网站大量收购闲置独家精品文档,联系QQ:2885784924

编译程序的构造.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档