![GCC編譯器后端移植技術(shù)_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/22/ae9534cf-12bf-4d9c-96b0-fcd1ec58c984/ae9534cf-12bf-4d9c-96b0-fcd1ec58c9841.gif)
![GCC編譯器后端移植技術(shù)_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/22/ae9534cf-12bf-4d9c-96b0-fcd1ec58c984/ae9534cf-12bf-4d9c-96b0-fcd1ec58c9842.gif)
![GCC編譯器后端移植技術(shù)_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/22/ae9534cf-12bf-4d9c-96b0-fcd1ec58c984/ae9534cf-12bf-4d9c-96b0-fcd1ec58c9843.gif)
![GCC編譯器后端移植技術(shù)_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/22/ae9534cf-12bf-4d9c-96b0-fcd1ec58c984/ae9534cf-12bf-4d9c-96b0-fcd1ec58c9844.gif)
![GCC編譯器后端移植技術(shù)_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/22/ae9534cf-12bf-4d9c-96b0-fcd1ec58c984/ae9534cf-12bf-4d9c-96b0-fcd1ec58c9845.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、GCC編譯器后端移植技術(shù)摘要:從gcc編譯器的體系結(jié)構(gòu)出發(fā),提出了gcc前后端分離的結(jié)構(gòu)以適合移植到不同的硬件平臺,分析了gcc后端移植的關(guān)鍵技術(shù)。重點闡述后端移植所必須的文件,并詳細說明這些文件的作用,給出了rtl中間語言的語法結(jié)構(gòu)以及典型指令的rtl指令模板結(jié)構(gòu)。最后通過一個實例對移植到新硬件體系結(jié)構(gòu)的gcc進行測試,結(jié)果表明針對特定的硬件體系結(jié)構(gòu),gcc后端移植技術(shù)是可行的,能夠產(chǎn)生正確的匯編語言代碼。關(guān)鍵詞:rtl中間語言; 指令模板; 機器描述md; 后端移植引言近年來,嵌入式計算機系統(tǒng)被廣泛應(yīng)用于軍事及空間領(lǐng)域的各種控制及智能系統(tǒng)中。在這些系統(tǒng)中,嵌入式計算機是系統(tǒng)的核心和智能部件
2、。隨著集成電路技術(shù)的發(fā)展,開始設(shè)計生產(chǎn)具有自主產(chǎn)權(quán)的專用芯片,并越來越多的將其應(yīng)用于航空航天等相應(yīng)嵌入式計算機系統(tǒng)中。同時嵌入式計算機應(yīng)用的不斷發(fā)展給計算機技術(shù)的各個方面提出了新的要求和挑戰(zhàn)。嵌入式系統(tǒng)的開發(fā)特征對開發(fā)工具提出了特殊的要求。它對于代碼大小,代碼性能,以及可配置性的苛刻要求,使得在桌面以及服務(wù)器端開發(fā)中表現(xiàn)良好的編譯系統(tǒng)往往不能勝任。這需要為其開發(fā)專用的高級語言編譯器,但是開發(fā)一個完全自主化的編譯器往往需要很長時間,并不是一個可取的方案,所以把目光轉(zhuǎn)向可變目標編譯器1??勺兡繕司幾g器能夠針對不同的目標機器生成代碼。編譯器中與機器有關(guān)的部分被獨立成模塊,針對不同的目標機器,這些模塊
3、可以方便的進行替換。gcc就是是可變目標編譯器,作為開源編譯器,它源碼豐富,文檔詳盡,是一個支持多種高級語言和多機器平臺的系統(tǒng),高度優(yōu)化和可移植性能是該編譯系統(tǒng)最為突出的2大特點。本文將詳細介紹gcc移植相關(guān)的技術(shù)。1gcc體系結(jié)構(gòu)gcc(gnu complier collection)是一個成功的支持多種高級語言和多種機器平臺的系統(tǒng)。gcc體系結(jié)構(gòu)(如圖1所示)可以劃分為2部分:與語言相關(guān),目標機器無關(guān)的前端和與語言無關(guān),目標機器相關(guān)的后端。圖1gcc體系結(jié)構(gòu)它是一個典型的語法制導(dǎo)的優(yōu)化編譯器23,前端通過詞法分析,語法分析,語義分析,生成語法樹,對語法樹簡單優(yōu)化之后,將其轉(zhuǎn)化為中間代碼。后
4、端接受前端產(chǎn)生的語法樹,將其轉(zhuǎn)換為中間語言的表現(xiàn)形式,在此基礎(chǔ)上進行各種優(yōu)化,然后根據(jù)目標機的機器描述生成匯編程序代碼4。gcc要實現(xiàn)支持多平臺編譯,必須解決3個根本問題:需要設(shè)計一種較好的中間語言,在適當?shù)膶哟紊希蛏夏苤味喾N語言的映射,向下能夠適合多平臺轉(zhuǎn)換并且適合于各種優(yōu)化;需要設(shè)計一種對目標機恰當?shù)臋C器描述;在機器描述與編譯主體之間需要仔細的設(shè)計一種統(tǒng)一接口。將gcc移植到一個新的硬件系統(tǒng)時,上述3個問題的解決是致關(guān)重要的。由于gcc前端與語言相關(guān)5,已經(jīng)很成熟穩(wěn)定,能夠支持當今流行的大部分高級語言,如c/c+,java,fortran,ada 等,所以不對前端做過多介紹,著重介紹后
5、端技術(shù)。2rtl中間語言rtl(register transfer language)6是一種以一種虛擬寄存器(pseudo register)的方式來敘述計算機行為的語言。rtl有5種對象:表達式,整數(shù),寬整數(shù),字符串和向量。其中最重要的是表達式rtx(rtl expression)。rtx類似于c的結(jié)構(gòu)體,通常用指針來引用它,指針類型定義名為rtx。每個rtx都具有統(tǒng)一的內(nèi)部數(shù)據(jù)結(jié)構(gòu)與外部語法。本文只涉及rtx的外部語法,即rtx表達式的文本形式的語法,其一般形式為:(code: m opn1 opn2 ),code:rtx操作碼。該操作碼指明rtx表示的操作類型,如表示一條指令時進行某種
6、說明。此外,code還確定rtx的操作數(shù)個數(shù)和這些操作數(shù)的種類。m:機器模式。表示數(shù)據(jù)和運行結(jié)果的類型,它反映了數(shù)據(jù)類型與字長兩部分信息。數(shù)據(jù)類型分為整型,浮點型和復(fù)型3種。機器字長則分為8位,16位,32位,64位等。這兩部分信息組合所構(gòu)成的機器方式反映了機器能表示的各種數(shù)據(jù)類型。opn:操作數(shù)。各個rtx表達式的操作個數(shù)以及操作數(shù)的種類是各不相同的,這取決于rtx操作碼。以下是一個實際的rtx表達式例子,(insn 7 6 0 (set (mem:si (plus:si (reg:si 54 virtualstackvars)(const_int 12 0xfffffff4) 0 a+0
7、s4 a32)(const_int 3 0x3) 1 (nil)操作碼“insn”指出這是一條表示指令的rtx,前3個操作數(shù)均為整常數(shù),分別表示本條指令編號,前一條指令編號和后一條指令編號,構(gòu)成前向鏈和后向鏈(如圖2所示)。其對應(yīng)的樹結(jié)構(gòu)(如圖3所示)。3gcc后端技術(shù)gcc后端對于目標機器的支持全部體現(xiàn)在后端描述中,將gcc移植到一個新的硬件系統(tǒng)時,要對新系統(tǒng)的處理器架構(gòu)要進行詳細的描述,使gcc的后端支持新的處理器架構(gòu)。本節(jié)重點介紹后端描述的結(jié)構(gòu)以后端描述的自動處理。圖2insn對象的雙向鏈表圖3rtx表達式及其對應(yīng)的樹結(jié)構(gòu)3.1gcc后端描述gcc對于后端的描述主要有3個文件7,一個是c
8、語言宏文件,一個c源文件,一個用rtl表達式寫成的機器描述文件md。將gcc移植到一個新的硬件系統(tǒng)時,要對新系統(tǒng)的處理器架構(gòu)要進行詳細的描述,使gcc的后端支持新的處理器架構(gòu)。具體的描述文件就是上述3個文件:c的宏文件,c文件和機器描述文件md,分別為target.h,target.c和target.md,target是需要移植的目標機器的代號。下面分別介紹3種文件。3.1.1c的宏文件c的宏是用來描述機器和abi的屬性。一般分成以下幾類:(1)控制gcc驅(qū)動程序選項,目標機器的特定命令行選項。這些宏定義告訴編譯驅(qū)動程序以何種形式的命令行參數(shù)運行諸如預(yù)處理,編譯,匯編,連接等處理步驟,在運行這
9、些處理步驟中可能需要的查詢路徑名以及是否需要運行某一些特殊的處理步驟等。(2) 存儲布局:要涉及基本的數(shù)據(jù)類型的大小,對齊約定;(3) 應(yīng)用二進制編程接口(abi),如何調(diào)用函數(shù);(4) 目標機器的寄存器使用,包括類型,基本特征,寄存器分配的順序,用于構(gòu)造堆棧的寄存器指令等等;(5) 尋址模式,描述目標機器不同的尋址模式;(6) 匯編文件輸出框架格式約定,指定匯編程序的初試數(shù)據(jù)段,正文段,一般數(shù)據(jù)段等等的格式要求,定義匯編輸出函數(shù)的函數(shù)名;(7) 調(diào)試信息輸出約定,指定系統(tǒng)支持的調(diào)試文件格式。這些參數(shù),其中很多不是參數(shù)核集的元素,有缺省的處理方式,但要具體地描述一個特定平臺,須對它們作正確而有
10、效的定義。它們是絕大多數(shù)平臺至少提供的內(nèi)容,只能描述出平臺最基本的功能。3.1.2c源文件target.h中定義的宏都是生成代碼,這給調(diào)試增加了一定的難度和復(fù)雜度,所以在target.c文件中增加一個同名函數(shù)(但是為小寫字母)。例如,在target.h文件中,定義了這樣一個宏:#define preferred_reload_class(x,class)preferred_reload_class (x, class)為了讓其可用,并保證程序的可讀性,引入了target_protos.h文件,在target_protos.h中,聲明了同名函數(shù):extern enum reg_class pre
11、ferred_reload_class(rtx, enum reg_class)并且在target.c文件中具體定義了此函數(shù)。這是一個約定,在配置的時候,配置程序會做處理。由此,可以調(diào)試這個函數(shù),而不必在眾多的文件中增加宏定義。3.1.3機器描述md機器描述md中用rtl語言描述的指令模板是核心內(nèi)容。md文件是目標機指令集的一個形式化的說明文件,它針對gcc中的各種操作模式,描述了指定目標機支持的操作和實現(xiàn)情況,而并非目標指令集的簡單匯集。編譯系統(tǒng)根據(jù)由機器描述md生成的數(shù)據(jù)結(jié)構(gòu)和函數(shù)定義集合,進行中間代碼的生成以及中間代碼到匯編代碼的映射。這些“標準指令”是從各種目標機的指令集中抽象出來的,
12、但同時它又能表達gcc中的各種基本操作。,下面是指令模板的一般結(jié)構(gòu)8:(define_patterntype “(optional)patternname”rtltempalte“optional paternalcondition”“outputtemplate”(optinally:attributesetting)簡單介紹以下各個參數(shù)的含義:(1)patterntype 有2種類型,insn是用于定義指令樣板的rtx表達式中最核心的一種類型,既可作為生成模板,又可作為匹配模板;expand是模板的擴充定義,僅在操作與標準名稱模板相關(guān)時使用。(2) patternname 指令模板名,一個
13、模板可以為gcc規(guī)定的標準指令名,或者開發(fā)者任意給定的名字,也可以空字符串,但是模板名必須惟一。(3) rtltempalte一個復(fù)雜操作的集合,為一不完全的rtx表達式或向量,稱為rtl模板。它表示指令模板的rtl指令體,只規(guī)定了rtl指令體中的各種操作以及操作數(shù)的位置和操作數(shù)必須滿足的條件和限制,并未指明具體的操作數(shù)。(4) optional paternalcondition 為一字符串,稱為條件。這個字符串或者為空,或者為一個c語言條件表達式。當非空時,它指出此模板有效的條件。(5) outputtemplate 為一字符串,稱為輸出模板。輸出模板用來確定與此模板相匹配的rtl指令的匯
14、編輸出形式。(6) attributesetting 它為一任選的rtx向量,稱為指令屬性。當此操作數(shù)出現(xiàn)時,它給出與這一模板相匹配的指令屬性。下面是mips.md中的一條單浮點加法指令模板:(define_insn “addsf3”(set(match_operand:sf 0 “register_operand” “=f”)(plus:sf(match_operand:sf 1 “register_operand”“f”) (match_operand:sf 2 “register_operand” “f”)“target_hard_float”“add.st%0,%1,%2”(set_a
15、ttr “type”“fadd”)(set_attr “mode”“sf”)這是一條單浮點加法指令的指令模板9,分別對應(yīng)指令模板結(jié)構(gòu)的各個參數(shù)的含義。從這個指令模板,可以看出這條指令的模板類型patterntype是insn;模板名patternnames是”addsf3”,這是指令名,從指令名可以看出這是一條單浮點加法指令;這條指令有3個操作數(shù),rtl模板規(guī)定了3個操作數(shù)的各種操作和位置以及必須滿足的條件和限制條件,”set” ,”mem”,”plus”分別表示賦值,存儲器引用和加法運算,它們的操作數(shù)均為rtx表達式;指令模板是否有效的條件是”target_hard_float”;匯編輸出模
16、板是”add.st%0,%1,%2”,輸出的匯編代碼形式就如輸出模板所示;最后是指令屬性,表明這是浮點加法指令,指令的模式為sf,是單浮點模式。3.2gcc后端處理機器描述文件md建立抽象機標準指令、中間語言rtl、目標機匯編模板三者之間的聯(lián)系,它是一個正文文件,如果編譯過程中為構(gòu)造或匹配rtl去搜尋這樣一種文件,將會機器緩慢。為此gcc編譯內(nèi)部設(shè)計了專門的函數(shù)和數(shù)據(jù)結(jié)構(gòu)作為編譯主體與機器描述之間的接口,編譯主體通過這些函數(shù)和數(shù)據(jù)結(jié)構(gòu)獲得md的內(nèi)容。在編譯器的構(gòu)造期間,利用gcc提供的一套獨立的,專用的機器描述處理程序,將正文形式的md轉(zhuǎn)換成含有接口所需的數(shù)據(jù)結(jié)構(gòu)與函數(shù)的c源程序。gen*正是
17、完成這一工作的一套轉(zhuǎn)換程序10,對機器描述文件進行處理(如圖4所示),生成一組c文件,或者頭文件,生成的這些文件以及手工定義的target.c和target.h結(jié)合起來就是gcc的機器相關(guān)部分。圖4后端處理流程gen*是指一套11個c程序,它們針對不同的編譯處理目的分析md,生成相應(yīng)一套接口程序包含11個c文件insn*.c,或者insn*.h。由gen*生成的這套接口程序分別作用于rtl的優(yōu)化,機器相關(guān)的優(yōu)化,匯編代碼輸出等過程。其中,insn*.h含有編譯主體和insn*.c涉及到的宏名定義,數(shù)據(jù)類型定義以及外說明,它們作為頭文件被包含于相關(guān)的源文件中。gcc通過使用生成的rtl代碼片段對
18、機器描述md文件中的指令模板進行匹配。insnrecog.c中的函數(shù)recog()是依據(jù)md中的指令樣板生成的rtl指令匹配函數(shù)。給定一條rtl指令,該函數(shù)判斷它是否與md中的某條指令樣板相匹配,若匹配則返回該樣板的編號,否則返回1。對每一個rtl片段來說,都要從md文件頭開始掃描,逐個匹配直到找到一個insn定義的寄存器行為和rtl片段完全相同,輸出相應(yīng)的匯編代碼。4實例驗證將gcc移植到了自己開發(fā)的dsp芯片lsdsp上。首先要詳細編寫的目標機器后端描述文件11 ,lsdsp.md,lsdsp.c和lsdsp.h,然后放在gcc源碼包中相應(yīng)的位置,通過配置源碼中的configure腳本(具體參照gcc使用手冊),經(jīng)過編譯后得到目標機編譯環(huán)境。簡單加法程序的測試結(jié)果(如圖5所示)。從測試結(jié)果可以看出,移植后的gcc可以支持新的硬件體系結(jié)構(gòu),能夠產(chǎn)生符合標準的匯編代碼。5結(jié)語gcc是支持多語言、多目標機編譯系統(tǒng)中最有代表性的一個。雖然隨著嵌入式應(yīng)用的升溫,優(yōu)化的交叉編譯系統(tǒng)正在得到越來越多的關(guān)注,但它還是一個比較新的課題,能參考的文獻和技術(shù)資料非常有限,很多工作都是靠閱讀大量的源代碼完成的。現(xiàn)在對專用芯片移植編譯器的技術(shù)已經(jīng)有所了解,要想得到高效的優(yōu)化的交叉編譯環(huán)境,還有大量工作要做。圖5測試結(jié)果參考文獻1fras
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代金融市場的信息披露與投資者保護研究
- 現(xiàn)代辦公用品展會的創(chuàng)新之處
- 現(xiàn)代物理學(xué)在辦公環(huán)境中的創(chuàng)新應(yīng)用
- 1《學(xué)會尊重》第一課時說課稿-2023-2024學(xué)年道德與法治六年級下冊統(tǒng)編版
- 環(huán)保意識在商業(yè)街區(qū)園林景觀設(shè)計中的體現(xiàn)
- 現(xiàn)代物流產(chǎn)業(yè)與綠色可持續(xù)發(fā)展
- 游戲行業(yè)的互動式網(wǎng)絡(luò)廣告設(shè)計探討
- 2023二年級數(shù)學(xué)下冊 二 時、分、秒第3課時 認識秒說課稿 蘇教版
- 現(xiàn)代小區(qū)火災(zāi)風(fēng)險評估與應(yīng)急救援隊伍建設(shè)策略
- 物聯(lián)網(wǎng)背景下的大數(shù)據(jù)管理與安全保障
- 2022年內(nèi)蒙古呼和浩特市中考化學(xué)真題(解析版)
- 血栓性微血管病的診治
- 綜合客運樞紐換乘區(qū)域設(shè)施設(shè)備配置要求JTT1066-2016
- 中國急性缺血性卒中診治指南(2023)解讀
- 2024PowerTitan系列運維指導(dǎo)儲能系統(tǒng)運維指導(dǎo)
- 沸石轉(zhuǎn)輪知識講解
- 固定資產(chǎn)盤點報告醫(yī)院版
- 中國內(nèi)部審計準則及指南
- 2024年ISTQB認證筆試歷年真題薈萃含答案
- tpu顆粒生產(chǎn)工藝
- 《體檢中心培訓(xùn)》課件
評論
0/150
提交評論