支持多平台编译系统的理论、分析与实现—基于gcc的研究.doc
约80页DOC格式手机打开展开
支持多平台编译系统的理论、分析与实现—基于gcc的研究,支持多平台编译系统的理论、分析与实现—基于gcc的研究页数 78 字数 34090摘要gcc是前端支持多种语言、后端支持多种平台的成功的编译系统。本文介绍现代编译系统的一些设计思想和实现方式,给出gcc支持多平台的理论总结和关键代码的分析,然后设计一个平台模型,以其代入的结果验证所总结的理论。gcc兼顾国际潮流,在已有...
内容介绍
此文档由会员 背水一战 发布
支持多平台编译系统的理论、分析与实现—基于GCC的研究
页数 78 字数 34090
摘 要
GCC是前端支持多种语言、后端支持多种平台的成功的编译系统。本文介绍现代编译系统的一些设计思想和实现方式,给出GCC支持多平台的理论总结和关键代码的分析,然后设计一个平台模型,以其代入的结果验证所总结的理论。
GCC兼顾国际潮流,在已有公认的标准软/硬平台上,高起点地表现自己的特色:软件重用和可扩性。GCC支持多平台的关键是:
1.描述能力强的RTL:作为优化处理的中间语言,抽象机的描述语言,目标机模型的描述语言,以及编译各遍卸出文件的输出语言;
2.特有的编译结构:将平台特性信息的描述与算法分离,通过映射机制将平台特性信息作用于各算法上,既共享算法,又兼顾平台特性的体现,而映射机制重在提供描述工具;
3.参数代入的映射机制:包括参数定义和参数操作,参数定义是一个表示问题,最迟在系统生成时即可完成,算法对参数操作时就实现了映射。
GCC的抽象机是一套标准名(参数),相当于一种协议:平台提供的功能,以实现语法树的操作语义;抽象机参数的核集:平台必须提供的功能,足以实现语法树的操作语义。
加入新平台的设计是参数选取的过程。参数定义时首先考虑参数核集,重点考虑关键参数。GCC使用RTL和C的宏来描述平台,实现后端描述/匹配过程的自动化。
目 录
前 言 8
1 理论总结 9
1.1 编译系统现状 9
1.1.1 编译系统的设计 9
1.1.1.1 编译结构 9
1.1.1.2 开发工具 9
1.1.1.3 编译技术的应用 10
1.1.1.4 编译系统的研究重点 10
1.1.1.5 书写编译系统的语言 10
1.1.1.6 编译系统的中间语言 11
1.1.1.7 RISC体系结构的编译特点 11
1.1.2 编译程序的自动生成 12
1.1.2.1 编译程序生成器的作用 13
1.1.2.2 编译程序生成器的元语言 13
1.1.2.3 编译程序生成器的结构 14
1.1.2.4 词法分析程序的自动生成 14
1.1.2.5 语法分析程序的自动生成 16
1.1.2.6 语义分析程序生成器 17
1.1.2.7 代码生成程序的自动生成 18
1.1.3 编译后端技术介绍 19
1.1.3.1 中间代码的优化 19
1.1.3.2 局部优化策略 20
1.1.3.3 循环优化策略 21
1.1.3.4 全局优化策略 21
1.1.3.5 高层优化 21
1.1.3.6 代码生成 22
1.1.3.7 代码生成的信息表示 23
1.1.3.8 寄存器分配 23
1.1.3.9 窥孔优化策略 24
1.2 GCC支持多平台的实现 25
1.2.1 GCC支持多平台的关键 25
1.2.2 GCC的系统特色 25
1.2.2.1 作为软件系统的特点 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编译的信息转换过程 27
1.2.4 三类编译结构 28
1.2.4.1 特定于平台的编译结构(编译结构Ⅰ) 28
1.2.4.2 可重定义目标机的编译结构(编译结构Ⅱ) 29
1.2.4.3 GCC的编译结构(编译结构Ⅲ) 29
1.2.4.4 三种编译结构的比较 29
1.2.5 GCC支持多平台的分析 30
1.2.5.1 编译系统支持多平台的关键 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 参数代入 33
1.2.5.7 对平台描述的翻译 34
1.2.6 加入新平台的过程 34
2 代码分析 36
2.1 抽象机参数的定义 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 抽象机参数的引用 46
2.2.1 RTL生成(RTL Generater) 46
2.2.2 寄存器扫描(Register Scan) 48
2.2.3 跳转优化(Jump Optimization) 48
2.2.4 删除公共子表达式(Common Subexpression Elimination) 48
2.2.5 循环优化(Loop optimization) 48
2.2.6 数据流分析(Data Flow Analysis) 48
2.2.7 指令合并(Instructions Combination) 49
2.2.8 指令调度(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 延迟分支调度(Delay Branch Scheduing) 50
2.2.13 汇编输出(Assemble) 50
2.2.14 一些文件使用 50
3 平台设计 52
3.1 平台定义 52
3.1.1 存储器定义 52
3.1.2 源语言定义 52
3.1.3 寄存器定义 52
3.1.4 函数调用方式 52
3.1.4.1 调用方式 52
3.1.4.2 调用 52
3.1.4.3 被调用 53
3.1.4.4 函数的栈空间分配 53
3.1.5 汇编输出形式 53
3.1.5.1 数据格式 53
3.1.5.2 伪指令 53
3.1.5.3 标号生成 54
3.1.6 汇编指令集 54
3.1.6.1 符号约定 54
3.1.6.2 寄存器取数指令 54
3.1.6.3 传送指令 54
3.1.6.4 整数算术运算指令 55
3.1.6.5 逻辑操作指令 55
3.1.6.6 移位指令 55
3.1.6.7 转移指令 55
3.1.6.8 转换指令 55
3.1.6.9 比较指令 56
3.1.7 mara的描述 56
3.1.8 平台模型mara与原平台的差别 56
3.2 平台实现 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
结 束 语 61
致 谢 62
【参考资料】 63
【附录A】GCC系统配置程序configure的结构剖析 64
前言 64
系统配置程序configure的作用 64
系统配置程序configure的工作流程 64
版本及版权信息 64
取参数缺省值 64
命令行参数的处理 65
检查参数 66
系统名标准化 66
系统特殊配置参数的赋值 66
逻辑名与系统文件的链接 66
生成当前目录和各语言子目录的Makefile文件 67
生成config.status文件 69
配值成功信息的输出 69
成功退出configure 69
【附录B】GCC系统生成程序Makefile的结构分析 70
系统生成程序Makefile命令行参数的定义 70
系统生成程序Makefile的工作流程 71
A. all.internal 71
宏定义 71
执行目标all (转向执行all.internal) 71
检察配置状态 71
预处理程序的生成(cpp) 71
c编译子系统的生成(cc1) 71
链接程序的生成(ld) 72
驱动程序的生成(xgcc) 72
spec文件的生成 72
libgcc1.a的生成 72
生成xlimit.h 73
c++驱动程序的生成(g++) 73
头文件的获得 73
执行fixproto 73
目标all(all.internal)结束 74
退出make 74
B. install 74
宏定义 74
执行目标install 74
安装生成的系统文件 74
安装头文件 75
安装库文件 75
安装帮助手册 75
安装系统信息手册 75
目标install结束 75
退出make 75
【附录C】GCC系统安装的实例 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.编译原理.
页数 78 字数 34090
摘 要
GCC是前端支持多种语言、后端支持多种平台的成功的编译系统。本文介绍现代编译系统的一些设计思想和实现方式,给出GCC支持多平台的理论总结和关键代码的分析,然后设计一个平台模型,以其代入的结果验证所总结的理论。
GCC兼顾国际潮流,在已有公认的标准软/硬平台上,高起点地表现自己的特色:软件重用和可扩性。GCC支持多平台的关键是:
1.描述能力强的RTL:作为优化处理的中间语言,抽象机的描述语言,目标机模型的描述语言,以及编译各遍卸出文件的输出语言;
2.特有的编译结构:将平台特性信息的描述与算法分离,通过映射机制将平台特性信息作用于各算法上,既共享算法,又兼顾平台特性的体现,而映射机制重在提供描述工具;
3.参数代入的映射机制:包括参数定义和参数操作,参数定义是一个表示问题,最迟在系统生成时即可完成,算法对参数操作时就实现了映射。
GCC的抽象机是一套标准名(参数),相当于一种协议:平台提供的功能,以实现语法树的操作语义;抽象机参数的核集:平台必须提供的功能,足以实现语法树的操作语义。
加入新平台的设计是参数选取的过程。参数定义时首先考虑参数核集,重点考虑关键参数。GCC使用RTL和C的宏来描述平台,实现后端描述/匹配过程的自动化。
目 录
前 言 8
1 理论总结 9
1.1 编译系统现状 9
1.1.1 编译系统的设计 9
1.1.1.1 编译结构 9
1.1.1.2 开发工具 9
1.1.1.3 编译技术的应用 10
1.1.1.4 编译系统的研究重点 10
1.1.1.5 书写编译系统的语言 10
1.1.1.6 编译系统的中间语言 11
1.1.1.7 RISC体系结构的编译特点 11
1.1.2 编译程序的自动生成 12
1.1.2.1 编译程序生成器的作用 13
1.1.2.2 编译程序生成器的元语言 13
1.1.2.3 编译程序生成器的结构 14
1.1.2.4 词法分析程序的自动生成 14
1.1.2.5 语法分析程序的自动生成 16
1.1.2.6 语义分析程序生成器 17
1.1.2.7 代码生成程序的自动生成 18
1.1.3 编译后端技术介绍 19
1.1.3.1 中间代码的优化 19
1.1.3.2 局部优化策略 20
1.1.3.3 循环优化策略 21
1.1.3.4 全局优化策略 21
1.1.3.5 高层优化 21
1.1.3.6 代码生成 22
1.1.3.7 代码生成的信息表示 23
1.1.3.8 寄存器分配 23
1.1.3.9 窥孔优化策略 24
1.2 GCC支持多平台的实现 25
1.2.1 GCC支持多平台的关键 25
1.2.2 GCC的系统特色 25
1.2.2.1 作为软件系统的特点 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编译的信息转换过程 27
1.2.4 三类编译结构 28
1.2.4.1 特定于平台的编译结构(编译结构Ⅰ) 28
1.2.4.2 可重定义目标机的编译结构(编译结构Ⅱ) 29
1.2.4.3 GCC的编译结构(编译结构Ⅲ) 29
1.2.4.4 三种编译结构的比较 29
1.2.5 GCC支持多平台的分析 30
1.2.5.1 编译系统支持多平台的关键 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 参数代入 33
1.2.5.7 对平台描述的翻译 34
1.2.6 加入新平台的过程 34
2 代码分析 36
2.1 抽象机参数的定义 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 抽象机参数的引用 46
2.2.1 RTL生成(RTL Generater) 46
2.2.2 寄存器扫描(Register Scan) 48
2.2.3 跳转优化(Jump Optimization) 48
2.2.4 删除公共子表达式(Common Subexpression Elimination) 48
2.2.5 循环优化(Loop optimization) 48
2.2.6 数据流分析(Data Flow Analysis) 48
2.2.7 指令合并(Instructions Combination) 49
2.2.8 指令调度(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 延迟分支调度(Delay Branch Scheduing) 50
2.2.13 汇编输出(Assemble) 50
2.2.14 一些文件使用 50
3 平台设计 52
3.1 平台定义 52
3.1.1 存储器定义 52
3.1.2 源语言定义 52
3.1.3 寄存器定义 52
3.1.4 函数调用方式 52
3.1.4.1 调用方式 52
3.1.4.2 调用 52
3.1.4.3 被调用 53
3.1.4.4 函数的栈空间分配 53
3.1.5 汇编输出形式 53
3.1.5.1 数据格式 53
3.1.5.2 伪指令 53
3.1.5.3 标号生成 54
3.1.6 汇编指令集 54
3.1.6.1 符号约定 54
3.1.6.2 寄存器取数指令 54
3.1.6.3 传送指令 54
3.1.6.4 整数算术运算指令 55
3.1.6.5 逻辑操作指令 55
3.1.6.6 移位指令 55
3.1.6.7 转移指令 55
3.1.6.8 转换指令 55
3.1.6.9 比较指令 56
3.1.7 mara的描述 56
3.1.8 平台模型mara与原平台的差别 56
3.2 平台实现 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
结 束 语 61
致 谢 62
【参考资料】 63
【附录A】GCC系统配置程序configure的结构剖析 64
前言 64
系统配置程序configure的作用 64
系统配置程序configure的工作流程 64
版本及版权信息 64
取参数缺省值 64
命令行参数的处理 65
检查参数 66
系统名标准化 66
系统特殊配置参数的赋值 66
逻辑名与系统文件的链接 66
生成当前目录和各语言子目录的Makefile文件 67
生成config.status文件 69
配值成功信息的输出 69
成功退出configure 69
【附录B】GCC系统生成程序Makefile的结构分析 70
系统生成程序Makefile命令行参数的定义 70
系统生成程序Makefile的工作流程 71
A. all.internal 71
宏定义 71
执行目标all (转向执行all.internal) 71
检察配置状态 71
预处理程序的生成(cpp) 71
c编译子系统的生成(cc1) 71
链接程序的生成(ld) 72
驱动程序的生成(xgcc) 72
spec文件的生成 72
libgcc1.a的生成 72
生成xlimit.h 73
c++驱动程序的生成(g++) 73
头文件的获得 73
执行fixproto 73
目标all(all.internal)结束 74
退出make 74
B. install 74
宏定义 74
执行目标install 74
安装生成的系统文件 74
安装头文件 75
安装库文件 75
安装帮助手册 75
安装系统信息手册 75
目标install结束 75
退出make 75
【附录C】GCC系统安装的实例 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.编译原理.