- 1、本文档共83页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译程序的构造
1 1 RTL的基本元素是rtx表达式,每个表达式的外部语法形 式为: (code: m opn1 opn2 ...) code为rtx的操作码,该操作码指明rtx的操作类型, 如表示一条rtx指令、进行某种算术运行、引用某个符号 名或寄存器以及表示某种说明等等。除此这外,code还确 定rtx的操作数个数及其种类 m表示机器方式,即数据和运算结果的类型,它反映了数 据类型与字长两部分信息 opn为操作数。rtx操作码可以表示5种对象:一般整数、宽 整数、字符串、rtx表达式、由指向rtx的指针组成的向量 下面是一条将寄存器值送入内存的rtx表达式及其相应 的树结构: (insn 11 13 (set (mem:SF (plus:S1 58) (const_int 32))) (reg:SF 71))... 图13.9中的rtx表达式表示了一条将寄存器的值送至内存的 指令: RTL的基本元素rtx在形式上是统一的,但根据它们允许 出现的场合可分为:指令的、具有副作用的、运算的、初 等值的rtx 表示指令的rtx一共有7条,其中最主要的是INSN、 JUMP_INSN、CALL_INSN、CODE_LABEL和NOTE, 它们分别表示一般指令、转移指令、转子指令、标号定义 和编译指导信息 GCC中间表示中每条RTL指令实际上都表示着目标机的一 条指令 源程序中一个处理单元(函数或程序段)中所有RTL指令 形成了如图13.10所示的一个完整结构: 三.GCC的机器描述 1.宏定义头文件: machine.h 定义的主要内容: (1)编译驱动程序的宏定义:用于指导编译驱动程序以什 么形式的命令行参数运行诸如预处理、编译、汇编连接等处 理步骤 (2)存储器的编址信息:如存储器的寻址单位、寻址方式 (3)各种类型数据对象的存储约定 (4)寄存器的个数、种类、名称及各种寄存器的用途约定 (5)栈的安排、函数的入口、出口及调用约定 (6)有关汇编语言输出的宏定义:指明汇编语言初始数据 段、正文段、一般数据段等的格式要求,定义汇编输出函数 的函数名 (7)目标机操作系统所支持的目标文件格式或调试输出格 式等等 2.机器描述文件: machine.md 它是一个正文文件 其中除了允许以;打头的注释行外,其余均是采用RTL外 部语法形式书写的rtx表达式 这些rtx表达式的操作码是专门用于机器描述的9条操作码, 由它们组成的机器描述包含目标机指令集的各种内容,主 要包括以下几个方面: (1)目标机指令集的有关属性,主要包括: 指令的分类 指令的数据类型 指令的长度 指令的延迟槽 功能部件 (2)指令样板,描述目标机所支持的每一条指令相应的 RTL指令形式和汇编输出格式 (3)指令样板的补充信息,指出可以进行与目标机相关的 优化动作及相应的RTL指令形式 define_insn具有4个或5个操作数,其形式和动作如下: 操作数0为指令名,用字符串表示 操作数1是一个不完全的rtx表达式或向量,称为RTL模板 操作数2为一字符串,称为条件 操作数3为一字符串,称为输出模板 操作数4为一任选的rtx向量,称为指令属性 下面是misp.md中一条指令样板的例子: (define_insn “adddf3” (set(match_operand:DF 0 “register_operand” “f”) (plus:DF(match_operand:DF 2 “register_operand” “f”) (match_operand:DF 2 “register_operand” “f”)))) “TARGER_HARD_FLOAT” “add.d\\t %0,%1,%2” ((set_attr“type”“tadd”) (set_attr“mode”“DF”) (set_attr“length”“1”) RTL模板中set和plus运算涉及的操作数均为形式如下的特 殊rtx的表达式:(match_operand:m n predicate constaint) 该表达式专门用于表示操作数 n指明为第几个操作数 m为操作数的方式 predicate指明操作数必须满足的匹配条件 constaint为对操作数的限制 如图13.11所示,指令样板有两个重要作用:用于构造中间 语言RTL中的指令、确定汇编代码的输出格式;它是支持 多平台思想得到实现的核心部分: 四.GCC的代码生成与机器描述的接口 GCC的机器描述文件都是普通的正文文件,在编译过程 中,如果为构造或匹配RTL在这种文件中搜索,那是极其 缓慢的 为此,一方面,在编译内部设计了一套专门的函数和数据 结构
文档评论(0)