支持多平臺編譯系統(tǒng)的理論、分析與實現(xiàn)—基于gcc的研究.doc
約80頁DOC格式手機打開展開
支持多平臺編譯系統(tǒng)的理論、分析與實現(xiàn)—基于gcc的研究,支持多平臺編譯系統(tǒng)的理論、分析與實現(xiàn)—基于gcc的研究頁數(shù) 78 字數(shù) 34090摘要gcc是前端支持多種語言、后端支持多種平臺的成功的編譯系統(tǒng)。本文介紹現(xiàn)代編譯系統(tǒng)的一些設(shè)計思想和實現(xiàn)方式,給出gcc支持多平臺的理論總結(jié)和關(guān)鍵代碼的分析,然后設(shè)計一個平臺模型,以其代入的結(jié)果驗證所總結(jié)的理論。gcc兼顧國際潮流,在已有...
內(nèi)容介紹
此文檔由會員 背水一戰(zhàn) 發(fā)布
支持多平臺編譯系統(tǒng)的理論、分析與實現(xiàn)—基于GCC的研究
頁數(shù) 78 字數(shù) 34090
摘 要
GCC是前端支持多種語言、后端支持多種平臺的成功的編譯系統(tǒng)。本文介紹現(xiàn)代編譯系統(tǒng)的一些設(shè)計思想和實現(xiàn)方式,給出GCC支持多平臺的理論總結(jié)和關(guān)鍵代碼的分析,然后設(shè)計一個平臺模型,以其代入的結(jié)果驗證所總結(jié)的理論。
GCC兼顧國際潮流,在已有公認的標準軟/硬平臺上,高起點地表現(xiàn)自己的特色:軟件重用和可擴性。GCC支持多平臺的關(guān)鍵是:
1.描述能力強的RTL:作為優(yōu)化處理的中間語言,抽象機的描述語言,目標機模型的描述語言,以及編譯各遍卸出文件的輸出語言;
2.特有的編譯結(jié)構(gòu):將平臺特性信息的描述與算法分離,通過映射機制將平臺特性信息作用于各算法上,既共享算法,又兼顧平臺特性的體現(xiàn),而映射機制重在提供描述工具;
3.參數(shù)代入的映射機制:包括參數(shù)定義和參數(shù)操作,參數(shù)定義是一個表示問題,最遲在系統(tǒng)生成時即可完成,算法對參數(shù)操作時就實現(xiàn)了映射。
GCC的抽象機是一套標準名(參數(shù)),相當于一種協(xié)議:平臺提供的功能,以實現(xiàn)語法樹的操作語義;抽象機參數(shù)的核集:平臺必須提供的功能,足以實現(xiàn)語法樹的操作語義。
加入新平臺的設(shè)計是參數(shù)選取的過程。參數(shù)定義時首先考慮參數(shù)核集,重點考慮關(guān)鍵參數(shù)。GCC使用RTL和C的宏來描述平臺,實現(xiàn)后端描述/匹配過程的自動化。
目 錄
前 言 8
1 理論總結(jié) 9
1.1 編譯系統(tǒng)現(xiàn)狀 9
1.1.1 編譯系統(tǒng)的設(shè)計 9
1.1.1.1 編譯結(jié)構(gòu) 9
1.1.1.2 開發(fā)工具 9
1.1.1.3 編譯技術(shù)的應(yīng)用 10
1.1.1.4 編譯系統(tǒng)的研究重點 10
1.1.1.5 書寫編譯系統(tǒng)的語言 10
1.1.1.6 編譯系統(tǒng)的中間語言 11
1.1.1.7 RISC體系結(jié)構(gòu)的編譯特點 11
1.1.2 編譯程序的自動生成 12
1.1.2.1 編譯程序生成器的作用 13
1.1.2.2 編譯程序生成器的元語言 13
1.1.2.3 編譯程序生成器的結(jié)構(gòu) 14
1.1.2.4 詞法分析程序的自動生成 14
1.1.2.5 語法分析程序的自動生成 16
1.1.2.6 語義分析程序生成器 17
1.1.2.7 代碼生成程序的自動生成 18
1.1.3 編譯后端技術(shù)介紹 19
1.1.3.1 中間代碼的優(yōu)化 19
1.1.3.2 局部優(yōu)化策略 20
1.1.3.3 循環(huán)優(yōu)化策略 21
1.1.3.4 全局優(yōu)化策略 21
1.1.3.5 高層優(yōu)化 21
1.1.3.6 代碼生成 22
1.1.3.7 代碼生成的信息表示 23
1.1.3.8 寄存器分配 23
1.1.3.9 窺孔優(yōu)化策略 24
1.2 GCC支持多平臺的實現(xiàn) 25
1.2.1 GCC支持多平臺的關(guān)鍵 25
1.2.2 GCC的系統(tǒng)特色 25
1.2.2.1 作為軟件系統(tǒng)的特點 25
1.2.2.2 GCC的軟件重用 25
1.2.2.3 GCC的可擴性 26
1.2.3 描述語言RTL(Register Transfer Language) 26
1.2.3.1 RTL的語法 26
1.2.3.2 RTL的特點 27
1.2.3.3 RTL的作用 27
1.2.3.4 GCC編譯的信息轉(zhuǎn)換過程 27
1.2.4 三類編譯結(jié)構(gòu) 28
1.2.4.1 特定于平臺的編譯結(jié)構(gòu)(編譯結(jié)構(gòu)Ⅰ) 28
1.2.4.2 可重定義目標機的編譯結(jié)構(gòu)(編譯結(jié)構(gòu)Ⅱ) 29
1.2.4.3 GCC的編譯結(jié)構(gòu)(編譯結(jié)構(gòu)Ⅲ) 29
1.2.4.4 三種編譯結(jié)構(gòu)的比較 29
1.2.5 GCC支持多平臺的分析 30
1.2.5.1 編譯系統(tǒng)支持多平臺的關(guān)鍵 30
1.2.5.2 選擇平臺 31
1.2.5.3 描述平臺 31
1.2.5.4 描述抽象機 32
1.2.5.5 平臺到抽象機的映射機制 32
1.2.5.6 參數(shù)代入 33
1.2.5.7 對平臺描述的翻譯 34
1.2.6 加入新平臺的過程 34
2 代碼分析 36
2.1 抽象機參數(shù)的定義 36
2.1.1 機器描述文件“md”及其編譯器“gen*” 36
2.1.1.1 MD代碼 36
2.1.1.2 “gen*”作用與特點 38
2.1.2 抽象機及其描述 41
2.1.2.1 標準指令 41
2.1.2.2 宏定義 44
2.2 抽象機參數(shù)的引用 46
2.2.1 RTL生成(RTL Generater) 46
2.2.2 寄存器掃描(Register Scan) 48
2.2.3 跳轉(zhuǎn)優(yōu)化(Jump Optimization) 48
2.2.4 刪除公共子表達式(Common Subexpression Elimination) 48
2.2.5 循環(huán)優(yōu)化(Loop optimization) 48
2.2.6 數(shù)據(jù)流分析(Data Flow Analysis) 48
2.2.7 指令合并(Instructions Combination) 49
2.2.8 指令調(diào)度(Instruction Scheduling) 49
2.2.9 局部寄存器分配(Local Register Allocation) 49
2.2.10 全局寄存器分配(Global Register Allocation) 49
2.2.11 硬件寄存器分配(Reloading) 49
2.2.12 延遲分支調(diào)度(Delay Branch Scheduing) 50
2.2.13 匯編輸出(Assemble) 50
2.2.14 一些文件使用 50
3 平臺設(shè)計 52
3.1 平臺定義 52
3.1.1 存儲器定義 52
3.1.2 源語言定義 52
3.1.3 寄存器定義 52
3.1.4 函數(shù)調(diào)用方式 52
3.1.4.1 調(diào)用方式 52
3.1.4.2 調(diào)用 52
3.1.4.3 被調(diào)用 53
3.1.4.4 函數(shù)的??臻g分配 53
3.1.5 匯編輸出形式 53
3.1.5.1 數(shù)據(jù)格式 53
3.1.5.2 偽指令 53
3.1.5.3 標號生成 54
3.1.6 匯編指令集 54
3.1.6.1 符號約定 54
3.1.6.2 寄存器取數(shù)指令 54
3.1.6.3 傳送指令 54
3.1.6.4 整數(shù)算術(shù)運算指令 55
3.1.6.5 邏輯操作指令 55
3.1.6.6 移位指令 55
3.1.6.7 轉(zhuǎn)移指令 55
3.1.6.8 轉(zhuǎn)換指令 55
3.1.6.9 比較指令 56
3.1.7 mara的描述 56
3.1.8 平臺模型mara與原平臺的差別 56
3.2 平臺實現(xiàn) 57
3.2.1 說明 57
3.2.2 平臺描述文件 58
3.2.3 C的驗證程序 58
3.2.3.1 輸入的C源程序test1.c 58
3.2.3.2 輸出的MARA匯編程序test1.s 58
3.2.3.3 說明 60
結(jié) 束 語 61
致 謝 62
【參考資料】 63
【附錄A】GCC系統(tǒng)配置程序configure的結(jié)構(gòu)剖析 64
前言 64
系統(tǒng)配置程序configure的作用 64
系統(tǒng)配置程序configure的工作流程 64
版本及版權(quán)信息 64
取參數(shù)缺省值 64
命令行參數(shù)的處理 65
檢查參數(shù) 66
系統(tǒng)名標準化 66
系統(tǒng)特殊配置參數(shù)的賦值 66
邏輯名與系統(tǒng)文件的鏈接 66
生成當前目錄和各語言子目錄的Makefile文件 67
生成config.status文件 69
配值成功信息的輸出 69
成功退出configure 69
【附錄B】GCC系統(tǒng)生成程序Makefile的結(jié)構(gòu)分析 70
系統(tǒng)生成程序Makefile命令行參數(shù)的定義 70
系統(tǒng)生成程序Makefile的工作流程 71
A. all.internal 71
宏定義 71
執(zhí)行目標all (轉(zhuǎn)向執(zhí)行all.internal) 71
檢察配置狀態(tài) 71
預(yù)處理程序的生成(cpp) 71
c編譯子系統(tǒng)的生成(cc1) 71
鏈接程序的生成(ld) 72
驅(qū)動程序的生成(xgcc) 72
spec文件的生成 72
libgcc1.a的生成 72
生成xlimit.h 73
c++驅(qū)動程序的生成(g++) 73
頭文件的獲得 73
執(zhí)行fixproto 73
目標all(all.internal)結(jié)束 74
退出make 74
B. install 74
宏定義 74
執(zhí)行目標install 74
安裝生成的系統(tǒng)文件 74
安裝頭文件 75
安裝庫文件 75
安裝幫助手冊 75
安裝系統(tǒng)信息手冊 75
目標install結(jié)束 75
退出make 75
【附錄C】GCC系統(tǒng)安裝的實例 76
在sparc-sun-sunos4.1.3上安裝 76
在sparc-sun-sunos4.1.3上帶自編譯檢查的安裝 76
在mips-sgi-irix5.2上安裝 77
說明 77
【參考資料】
[1] J.P.Bennett . 1990. Introduction to Compiling Techniques,
McGraw-Hill Book Company (UK) Ltd.
[2] Lemone , K.A. 1992. Design of Compilers Techniques of
Programming Language Translation, CRC Press , Inc.
[3] Allen , Holub . 1990. Compiler Design in C , Prentice-Hall
Intenational Editions.
[4] 陳火旺 錢家驊 .1983.編譯原理.
頁數(shù) 78 字數(shù) 34090
摘 要
GCC是前端支持多種語言、后端支持多種平臺的成功的編譯系統(tǒng)。本文介紹現(xiàn)代編譯系統(tǒng)的一些設(shè)計思想和實現(xiàn)方式,給出GCC支持多平臺的理論總結(jié)和關(guān)鍵代碼的分析,然后設(shè)計一個平臺模型,以其代入的結(jié)果驗證所總結(jié)的理論。
GCC兼顧國際潮流,在已有公認的標準軟/硬平臺上,高起點地表現(xiàn)自己的特色:軟件重用和可擴性。GCC支持多平臺的關(guān)鍵是:
1.描述能力強的RTL:作為優(yōu)化處理的中間語言,抽象機的描述語言,目標機模型的描述語言,以及編譯各遍卸出文件的輸出語言;
2.特有的編譯結(jié)構(gòu):將平臺特性信息的描述與算法分離,通過映射機制將平臺特性信息作用于各算法上,既共享算法,又兼顧平臺特性的體現(xiàn),而映射機制重在提供描述工具;
3.參數(shù)代入的映射機制:包括參數(shù)定義和參數(shù)操作,參數(shù)定義是一個表示問題,最遲在系統(tǒng)生成時即可完成,算法對參數(shù)操作時就實現(xiàn)了映射。
GCC的抽象機是一套標準名(參數(shù)),相當于一種協(xié)議:平臺提供的功能,以實現(xiàn)語法樹的操作語義;抽象機參數(shù)的核集:平臺必須提供的功能,足以實現(xiàn)語法樹的操作語義。
加入新平臺的設(shè)計是參數(shù)選取的過程。參數(shù)定義時首先考慮參數(shù)核集,重點考慮關(guān)鍵參數(shù)。GCC使用RTL和C的宏來描述平臺,實現(xiàn)后端描述/匹配過程的自動化。
目 錄
前 言 8
1 理論總結(jié) 9
1.1 編譯系統(tǒng)現(xiàn)狀 9
1.1.1 編譯系統(tǒng)的設(shè)計 9
1.1.1.1 編譯結(jié)構(gòu) 9
1.1.1.2 開發(fā)工具 9
1.1.1.3 編譯技術(shù)的應(yīng)用 10
1.1.1.4 編譯系統(tǒng)的研究重點 10
1.1.1.5 書寫編譯系統(tǒng)的語言 10
1.1.1.6 編譯系統(tǒng)的中間語言 11
1.1.1.7 RISC體系結(jié)構(gòu)的編譯特點 11
1.1.2 編譯程序的自動生成 12
1.1.2.1 編譯程序生成器的作用 13
1.1.2.2 編譯程序生成器的元語言 13
1.1.2.3 編譯程序生成器的結(jié)構(gòu) 14
1.1.2.4 詞法分析程序的自動生成 14
1.1.2.5 語法分析程序的自動生成 16
1.1.2.6 語義分析程序生成器 17
1.1.2.7 代碼生成程序的自動生成 18
1.1.3 編譯后端技術(shù)介紹 19
1.1.3.1 中間代碼的優(yōu)化 19
1.1.3.2 局部優(yōu)化策略 20
1.1.3.3 循環(huán)優(yōu)化策略 21
1.1.3.4 全局優(yōu)化策略 21
1.1.3.5 高層優(yōu)化 21
1.1.3.6 代碼生成 22
1.1.3.7 代碼生成的信息表示 23
1.1.3.8 寄存器分配 23
1.1.3.9 窺孔優(yōu)化策略 24
1.2 GCC支持多平臺的實現(xiàn) 25
1.2.1 GCC支持多平臺的關(guān)鍵 25
1.2.2 GCC的系統(tǒng)特色 25
1.2.2.1 作為軟件系統(tǒng)的特點 25
1.2.2.2 GCC的軟件重用 25
1.2.2.3 GCC的可擴性 26
1.2.3 描述語言RTL(Register Transfer Language) 26
1.2.3.1 RTL的語法 26
1.2.3.2 RTL的特點 27
1.2.3.3 RTL的作用 27
1.2.3.4 GCC編譯的信息轉(zhuǎn)換過程 27
1.2.4 三類編譯結(jié)構(gòu) 28
1.2.4.1 特定于平臺的編譯結(jié)構(gòu)(編譯結(jié)構(gòu)Ⅰ) 28
1.2.4.2 可重定義目標機的編譯結(jié)構(gòu)(編譯結(jié)構(gòu)Ⅱ) 29
1.2.4.3 GCC的編譯結(jié)構(gòu)(編譯結(jié)構(gòu)Ⅲ) 29
1.2.4.4 三種編譯結(jié)構(gòu)的比較 29
1.2.5 GCC支持多平臺的分析 30
1.2.5.1 編譯系統(tǒng)支持多平臺的關(guān)鍵 30
1.2.5.2 選擇平臺 31
1.2.5.3 描述平臺 31
1.2.5.4 描述抽象機 32
1.2.5.5 平臺到抽象機的映射機制 32
1.2.5.6 參數(shù)代入 33
1.2.5.7 對平臺描述的翻譯 34
1.2.6 加入新平臺的過程 34
2 代碼分析 36
2.1 抽象機參數(shù)的定義 36
2.1.1 機器描述文件“md”及其編譯器“gen*” 36
2.1.1.1 MD代碼 36
2.1.1.2 “gen*”作用與特點 38
2.1.2 抽象機及其描述 41
2.1.2.1 標準指令 41
2.1.2.2 宏定義 44
2.2 抽象機參數(shù)的引用 46
2.2.1 RTL生成(RTL Generater) 46
2.2.2 寄存器掃描(Register Scan) 48
2.2.3 跳轉(zhuǎn)優(yōu)化(Jump Optimization) 48
2.2.4 刪除公共子表達式(Common Subexpression Elimination) 48
2.2.5 循環(huán)優(yōu)化(Loop optimization) 48
2.2.6 數(shù)據(jù)流分析(Data Flow Analysis) 48
2.2.7 指令合并(Instructions Combination) 49
2.2.8 指令調(diào)度(Instruction Scheduling) 49
2.2.9 局部寄存器分配(Local Register Allocation) 49
2.2.10 全局寄存器分配(Global Register Allocation) 49
2.2.11 硬件寄存器分配(Reloading) 49
2.2.12 延遲分支調(diào)度(Delay Branch Scheduing) 50
2.2.13 匯編輸出(Assemble) 50
2.2.14 一些文件使用 50
3 平臺設(shè)計 52
3.1 平臺定義 52
3.1.1 存儲器定義 52
3.1.2 源語言定義 52
3.1.3 寄存器定義 52
3.1.4 函數(shù)調(diào)用方式 52
3.1.4.1 調(diào)用方式 52
3.1.4.2 調(diào)用 52
3.1.4.3 被調(diào)用 53
3.1.4.4 函數(shù)的??臻g分配 53
3.1.5 匯編輸出形式 53
3.1.5.1 數(shù)據(jù)格式 53
3.1.5.2 偽指令 53
3.1.5.3 標號生成 54
3.1.6 匯編指令集 54
3.1.6.1 符號約定 54
3.1.6.2 寄存器取數(shù)指令 54
3.1.6.3 傳送指令 54
3.1.6.4 整數(shù)算術(shù)運算指令 55
3.1.6.5 邏輯操作指令 55
3.1.6.6 移位指令 55
3.1.6.7 轉(zhuǎn)移指令 55
3.1.6.8 轉(zhuǎn)換指令 55
3.1.6.9 比較指令 56
3.1.7 mara的描述 56
3.1.8 平臺模型mara與原平臺的差別 56
3.2 平臺實現(xiàn) 57
3.2.1 說明 57
3.2.2 平臺描述文件 58
3.2.3 C的驗證程序 58
3.2.3.1 輸入的C源程序test1.c 58
3.2.3.2 輸出的MARA匯編程序test1.s 58
3.2.3.3 說明 60
結(jié) 束 語 61
致 謝 62
【參考資料】 63
【附錄A】GCC系統(tǒng)配置程序configure的結(jié)構(gòu)剖析 64
前言 64
系統(tǒng)配置程序configure的作用 64
系統(tǒng)配置程序configure的工作流程 64
版本及版權(quán)信息 64
取參數(shù)缺省值 64
命令行參數(shù)的處理 65
檢查參數(shù) 66
系統(tǒng)名標準化 66
系統(tǒng)特殊配置參數(shù)的賦值 66
邏輯名與系統(tǒng)文件的鏈接 66
生成當前目錄和各語言子目錄的Makefile文件 67
生成config.status文件 69
配值成功信息的輸出 69
成功退出configure 69
【附錄B】GCC系統(tǒng)生成程序Makefile的結(jié)構(gòu)分析 70
系統(tǒng)生成程序Makefile命令行參數(shù)的定義 70
系統(tǒng)生成程序Makefile的工作流程 71
A. all.internal 71
宏定義 71
執(zhí)行目標all (轉(zhuǎn)向執(zhí)行all.internal) 71
檢察配置狀態(tài) 71
預(yù)處理程序的生成(cpp) 71
c編譯子系統(tǒng)的生成(cc1) 71
鏈接程序的生成(ld) 72
驅(qū)動程序的生成(xgcc) 72
spec文件的生成 72
libgcc1.a的生成 72
生成xlimit.h 73
c++驅(qū)動程序的生成(g++) 73
頭文件的獲得 73
執(zhí)行fixproto 73
目標all(all.internal)結(jié)束 74
退出make 74
B. install 74
宏定義 74
執(zhí)行目標install 74
安裝生成的系統(tǒng)文件 74
安裝頭文件 75
安裝庫文件 75
安裝幫助手冊 75
安裝系統(tǒng)信息手冊 75
目標install結(jié)束 75
退出make 75
【附錄C】GCC系統(tǒng)安裝的實例 76
在sparc-sun-sunos4.1.3上安裝 76
在sparc-sun-sunos4.1.3上帶自編譯檢查的安裝 76
在mips-sgi-irix5.2上安裝 77
說明 77
【參考資料】
[1] J.P.Bennett . 1990. Introduction to Compiling Techniques,
McGraw-Hill Book Company (UK) Ltd.
[2] Lemone , K.A. 1992. Design of Compilers Techniques of
Programming Language Translation, CRC Press , Inc.
[3] Allen , Holub . 1990. Compiler Design in C , Prentice-Hall
Intenational Editions.
[4] 陳火旺 錢家驊 .1983.編譯原理.