LLVM 後端開發 (3)

在LLVM裡面,有個叫LLVMTargetMachine的class,是所有目標機器的父類別,所以如果要建立自己的目標機器的話,必須要實作裡面的虛擬函式。

LLVMTargetMachine上還有一層叫TargetMachine的最上層,定義在include/llvm/Target/TargetMachine.h裡面,有興趣可以去看看裡面在做什麼。

當我們隨便找一個目標機器的範例copy到我們自行創件的資料匣後,就要開始來修改了。

在標頭檔案,有一些基本的函式需要被建立,當作之後用來傳遞資訊的動作。這些函式通常都會被命名為get**Info之類的函式,如:
getInstrInfo:回傳指令集相關資訊
getRegisterInfo:回傳暫存器設定之類的資訊
getFrameInfo:回傳stack堆疊方式的資訊
及getDataLayout各目標機器的支援的資料型別大小及對齊方式。

另外對於有些目標機器還需要加上
getTargetLowering()
getJITInfo()
這兩個函式

若有些目標機器不支援jump等跳躍指令,則需在初始化時加上setRequiresStructuredCFG(true)來避免一些問題的產生。

在目標機器的TargetMachine建構子中,必須定義TargetDescription字串,用來告知這個目標機器的資料格式支援哪些,比如說對齊方式、資料格式的長度int是佔幾個byte、輸出bin的排序方式是big endianness或是little endianness。
如:DataLayout(“E-p:32:32-f128:128:128”)
詳細的說明可以參考這邊

今天就先到這邊
白天上班,晚上自修,六日顧小孩
有空再寫

發佈留言