已阅读5页,还剩64页未读, 继续免费阅读
(计算机软件与理论专业论文)基于gcc的嵌入式系统编译器研究与开发.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 随着计算机技术和i n t e r n e t 的飞速发展 新型嵌入式系统正朝着信息家电 i a 和3 c c o m p u t e rc o m m u n i c a t i o n c o n s u m e r 产品方向发展 广泛的应用于工 业控制 通信 仪器仪表和家用消费等领域 嵌入式技术和设备的应用在我国国 民经济和国防建设的各个方面存在着广泛的应用领域 有着巨大的市场 可以说 它是信息技术的一个新的发展 是信息产业的一个新的亮点 嵌入式系统本身不具备自举开发能力 必须有交叉编译丌发工具和环境才能 进行开发 同时 嵌入式系统的特殊产品特征要求软件具有较小代码长度和较快 执行速度 因此对相应的软件开发工具有更高的要求 以l i n u x 为主机操作系统 搭配一个交叉编译系统 为嵌入式设备生成可执行程序己成为现在同益流行的编 译嵌入式软件的解决方案 而开放源码的编译器g c c 经过多年的发展 已能 支持几乎所有知名厂商的处理器 而且优化性能突出 是嵌入式软件开发中理想 的交叉编译器 本论文以嵌入式系统编译器z l t c c 的开发为背景 详细介绍了g c c 的体系 结构 对其高度可移植性所依赖的中间表示 机器搐述技术和后端优化技术进行 深入研究 并在此基础上完成了g c c 在目标机m i p s x 上的移植和优化工作 而且根据新目标机的特点 通过指令拆分 延时槽调度 寄存器分配和窥孔优化 等技术使得生成的目标代码更加紧凑 目标代码大约缩小了l o 同时性能也 得到大幅度的提高 论文首先概述了嵌入式系统的发展对编译器提出的更高要求和代码的优化 然后介绍了编译器系统z l t c c 的开发背景 第二章简要介绍了编译器的自动尘 成和优化技术 第三章详细分析了g c c 的设计思想 系统结构 后端自动生成 器 中间语言 机器描述机制 后端生成过程及优化技术 第四章详细介绍了移 植g c c 的思路和方法 目标机器的体系结构及其应用二进制接口 并就移植的 过程实例及移植过程中的难点问题和优化等技术问题进行了深入的探讨 并给出 了移植成功后的结果 最后是一点总结和展望 关键字 嵌入式系统 交叉编译器 后端自动生成 编译优化技术 中间语言 机器描述 g c c m i p s x r t l a bs t r a c t w i t ht h er a p i dd e v e l o p m e n to fc o m p u t e rt e c h n o l o g ya n di n t e m e tt e c h n o l o g y t h e d e v e l o p m e n to fn e we m b e d d e ds y s t e m i sa i m e dt oi n f e r m a t i o na p p l i a n c ea n d c o m b i n a t i o no fc o m p u t e r c o m m u n i c a t i o na n dc o n s u m e r i t w i d e l ya p p l i e di nf i l e d s o fi n d u s t r i a lc o n t r o l c o m m u n i c a t i o n a p p a r a t u s a n da p p l i a n c ec o n s u m p t i o na n ds oo i l f o rt h e r a p i dd e v e l o p m e n to ft h ee m b e d d e d h a n d h e l d a n dw i r e l e s sd e v i c e s t h e e m b e d d e ds o f t w a r ei sb e c o m i n gah o t s p o to f t h ei n f o r m a t i o ni n d u s t d w i t h o u tb o o t s t r a p p i n go nt h e m s e l f e m b e d d e ds y s t e m sa l w a y sr e q u e s tac r o s s d e v e l o p m e n tt o o lc h a i n a n df o rt h es p e c i a lf e a t u r ei n c l u d i n gc o m p a c tc o d ea n df a s t r u ns p e e d t h et o o lc h a i ns h o u l db ec a p a b l eo fo p t i m i z a t i o n i ts e e m st ob ea p o p u l a r s o l u t i o nf o re m b e d d e de q u i p e m e n t st oc o m p i l es o f t w a r eo na n o t h e r s y s t e m w h i c hr i s e l i n u xa sa l l o p e r a t i n gs y s t e mw i t hac r o s s c o m p i l e rb u i l to n a n dg c c t h em o s t p o r t a b l e a n d o p t i m i z e d o n eo fc u r r e n t o p e n s o u r c e c o m p i l e r s w h i c h h a db e e n d e v e l o p e dm a n yy e a r s c a ns u p p o n sn e a r l y a l lf a m o u sp r o c e s s o r sm a db e c o m ea n a p p r o p r i a t ec r o s s c o m p i l e r f o rt h ed e v e l o p m e n to fe m b e d d e ds o f t w a r e w i t ht h eb a c k g r o u n do f d e v e l o p i n gar e n o v a t e dc r o s s c o m p i l e rn a m e dz l t c c s u p p o r t i n gp r o c e s s o rm i p s x t h i st h e s i sa n a l y z e st h ea r c h i t e c t u r eo fg c c d e e p l y s t u d i e st h eb a c k e n d o p t i m i z a t i o nt e c h n o l o g i e s t h ei n t e r m e d i a t er e p r e s e n t a t i o na n d m a c h i n ed e s c r i p t i o nw h i c ht h ep o r t a b i l i t yo fg c ca r eb a s e do n a n dr e a l i z e sp o r t i n g o fg c c c r o s s c o m p i l e rs y s t e mt o at a r g e tp r o c e s s o rm i p s x b ym a k i n gu s eo f i n s t r u c t i o ns p l i t d e l a y s l o ts c h e d u l i n g r e g i s t e ra l l o c a t i o na n d p e e p h o l eo p t i m i z a t i o n i np o r t i n g t h ec o d ez l t c c o u t p u t sg e tm u c ho p t i m i z e d a tf i r s t t h i st h e s i sd e s c r i b e st h es p e c i a lf e a t u r e se m b e d d e d s y s t e m c o n s t r a i n so n t h ec r o s s c o m p i l e rs y s t e ma n dc o d eo p t i m i z a i o n t h e ni ti n t r o d u c e st h ed e v e l o p i n g b a c k g r o u n do ft h ec r o s s c o m p i l e rs y s t e m z l t c c i nc h a p t e r2 i ti n t r o d u c e st h e a u t o m a t i c a l l yg e n e r a t i o no fc o m p i l e ra n do p t i m i z a t i o nt e c h n o l o g i e s i nc h a p t e r3 i t a n a l y s e s g c co n d e s i g n a t i o i n a r c h i t e c t u r e b a c k e n dg e n e r a t o r s i n t e r m e d i a t e l a n g u a g e m a c h i n ed e s c r i p t i o n b a c k e n dg e n e r a t i o na n do p t i m i z a t i o nt e c h n o l o g i e s i n c h a p t e r4 i ti l l u s t r a t e st h ea r c h i t e c t u r ea n da b i o fm i p s xa n dh o wt op o r t i n gg c c f o rm i p s x i nc h a p t e r5 s o m ed i 币c u l t p r o b l e m s a n do p t i m i z a t i o ni s s u e sb e e n d i s c u s s e di nd e t a i li tt h e np r e s e n t st h es u c c e s s f u lp o r t i n gr e s u l t a tl a s t i tg i v e ss o m e c o n c l u s i o n sa n d f o r e s i g h t k e y w o r d s e m b e d d e ds y s t e m c r o s sc o m p i l e r b a c k e n da u t o m a t i c a lg e n e r a t i o n c o d eo p t i m i z a t i o n i n t e r m e d i a t el a n g u a g e m a c h i n e d e s c r i p t i o n g c c m i p s x r t l 跏旺入学坝 t 学位论文 幕十g c c 的嵌入j 系统编详 l j f 究1 开发 第一章绪论 1 1 嵌入式系统及其对编译系统的要求 嵌入式系统 e m b e d d e ds y s t e m 是将计算机直接嵌入至应用系统中 是信 息技术i t i n f o r m a t j o nt e c h n o l o g y 的最终产品 嵌入技术及其产品广泛应 用于智能家用电器 智能建筑 仪器仪表 通讯产品 工业控制 数控机床 掌 上型电脑 各种智能i c 卡的应用 如家庭电表 水表 煤气表的i c 卡计费系统 电子钱包 第二代身份证 公共交通收费系统 电子病历及挂号系统 以及军事 领域的应用等 大量的嵌入技术的应用不胜枚举 大多数老百姓感受到信息技术 的进步及电子信息技术产品的小巧 便捷和高效 都直接或州接源于嵌入技术 嵌入技术的研发和广泛应用已经成为我国信息化进程的重要课题之一 受到社会 各界的广泛关注 和通用计算机不同 嵌入式系统是针对具体应用的专用系统 一般具有成本 敏感性 它的硬件和软件都必须高效率地设计 量体裁衣 去除冗余 力争在同 样的硅片面积上实现更高的性能 好的嵌入式系统是完成目标功能的最小系统 嵌入式处理器的应用软件是实现嵌入式系统功能的关键 对嵌入式处理器系 统软件和应用软件的要求也和通用计算机有所不同 软件要求固态化存储 软件代码高质量 高可靠性 许多应用要求系统软件具有实时处理能力 多任务操作系统是知识集成的平台和走向工业标准化道路的基础 嵌入式系统本身不具各自举开发能力 必须有交叉编译开发工其和环境才能 进行开发 同时 嵌入式系统的特殊产品特征决定7 其对软件有特殊的要求 自 然就对相应的软件开发工具有更高的要求 区别于一般计算机中的c 语言编译器 嵌入式系统中的c 语言编译器要专门 进行优化 以提高编译效率 优秀的嵌入式系统c 编译器代码长度和执行时间仅 比以汇编语言编写的同样功能程序长5 2 0 编译质量的不同 是区别嵌入式c 编译器工具的重要指标 而c 编译器与汇编语言工具相比残余的5 2 0 效率差别 完全可以由现代微控制器的高速度 大存储器空间以及产品提前进入市场的优势 来弥补 1 2 z l t c c 编译系统简介 z l t c c 是通过移植开放源代码的编译器g c c 实现的 它是以c 为输入语言 以1 3 8 6 一l i n u x 为主机运行系统 以j t i i p s x 为目标系统的完整的交叉编译系统 浙江人学坝卜学位论史 皋十g c c 的嵌入 系统编i 簪 i j f 究jo 开发 1 9 8 5 年 美国杰出的程序设计师r i c h a l ds t a l l m a r l 发起并创建了世界上第 一个非营利性计算机软件组织一 自由软件基金会 f s f 哦组织以追求技术上 的创新 丌发的 为公众共享的软件产品为宗旨 制定了雄心勃勃的 g n u 计划 g n u 是g n u sn o tl n i x 的递归缩写 该计划的目标是要提供一个与u n i x 兼容 的完整系统并免费提供给所有使用它的用户 该计划的第一个产品用于u n i x 及 v a x v m s 即享有盛名的g n ue 讥s c s 一个可编程的编辑器 而另一个著名产 品就是g c c g n ucc o m p i l e r 编译器 g c c g n ucc o m p i l e r 是f s f 发起人r i c h a r dm s t a l m s n 于1 9 8 7 年3 月2 2 日首次发布的可移植的优化编译器 高度可移植性和代码优化质量是其最 大的特点 目前 g c c g n uc o m p i l e tc o l l e c t i o n 是t i i q j x 操作系统上最好的 编译器 g c c 也就是以前的g n uc 编译器 g n ucc o m p i l e r 是由e g c s 筹划指 导委员会维护的 该委员会的目标是让g c c 成为标准的c 编译器 1 9 9 9 年中 e g o s 和g c c 工程合并为一个编辑器套装 同年1 0 月发布g c c2 9 5 2 由于程序设计人员可以彼此共享这些软件和技术 使得g n t 软件都较同级的 商业软件产品更为稳定可靠 性能指标更高 而且发展极为迅速 每一个季度就 有一个功能更强 品质更优的新版本推出 因此 g n u 软件具有很强的生命力 并随着人们对其价值认识的提高 用户也迅速地扩大 g c c 是一个编译器套装 它集成了c c o b j e c t jv ec f o r t r a n 7 a v a 等语言编译器 由于u n i x 平台的高度可移植性 o c c 提供各种常见的u n i x 类 平台上的版本 而且还提供了w i n 3 2 和d o s 上的g c c 比如说s 的s o l a r is 操 作系统配置的编译器就是g n u 的g c c o c c 的不断发展完善使许多商业编译器都 相形见绌 运行于l i n u x 操作系统下的自由软件g n ug c c 编译器 不仅可以编译l i n u x 操作系统下运行的应用程序 编译l if i u x 本身 还可以作交叉编译 编译运行于 其它c p u 上的程序 可以作交叉编译的c p l i 或d s p 涵盖了几乎所有知名厂商 的产品 用于嵌入式应用的 众所周知的c p u 包括 i n t e l 的i 3 8 6 i n t e l 9 6 0 a m d 2 9 k a r f m 3 2 m i p s m 6 8 k c o t d f a r e p o w e r p c 6 8 h c il j l 2 t i 的t m s 3 2 等等 在g n uc c 支持下用户可以使用流行的c c 语言开发应用程序 满足生 成高效率运行代码 易掌握的编程语言的用户需求 g c c 的代码很少和特定机器紧密相关 绝大多数和机器相关的信息都从机器 描述 m a c h i n ed e s c r i p t i o f 中获得 丽机器描述对目标机器的特点及其每条 指令进行详尽的描述 通过改变g c c 的机器描述 我们可以使得g c c 产生不同 的目标机器代码 我们的工作主要就是对我们的目标机器进行描述 使g c c 按 照我们的要求生成可以在目标机器上运行的目标代码 作为一个完整的交叉编译系统 z l t c c 包含了如下3 个主要部分 其结构图 浙江大学聊 学位论史 见下图 1 交叉编译器 2 交叉汇编器 3 交叉链接器 娃十o c c 的嵌八成系统编详特岍究 升发 图表一 1 交叉编译系统z l t c c 系统结构 编译系统是非常复杂的软件 因此很容易陷入错误和不足中 考虑到编写编 译器所花费的人力物力 很多公司都会放弃独立编写 而源代码开放的编译器使 得错误可以最大限度地减少 作为惯例 一个新的编译系统并不意味着要从头重 写 换句话说 借鉴已有系统是一个捷径 z l t c c 直接以编译器g n uc c3 2 2 为基础 实现了目标机为m i p s x 的交叉编译器 并以g n ub i n u t i l s2 1 2 的汇 编器g a s 和链接器g l b 为基础 实现了目标机为m i p s x 的交叉汇编器和交叉链 接器 本文主要介绍g c c 的移植和优化 不涉及b i n u t i l s 部分 1 3 相关的工作 可以从g c c 的相关文档中看到g c c 已经被移植到很多目标机器上 而且 r i c h a r dms t a l i m a n 对g c c 的使用 中间语言r t l 后端机器描述和如何移植进 行了比较详细的解释 参见 6 c c i n t 但是 这个文档只是进行了抽象的描述 没有针对某特定的目标机器详细地解释 尽管如此 本文及我们的工作有相当部 分都是参考这个文档 h a n s p e t e rn ils s o n 把g c c 移植到d u n c e s 目标机器上 并对整个移植机制 和相关的问题进行了详尽的记录 参见 n i l s s o r l 依据这些文档 苏斐琦等同学对g c c 的移植工作上进行了初步的探索 在对 浙江人学硕1 学位论文 皋 j 二g c c 的嵌入 系统编佯器研究与开发 6 c c 的源代码进行分析的基础上把 c c 移植到m i p s x 目标机器上 以实现一个 交叉编译系统为m i p s x 生成目标代码 参见 s f q 但是该移植工作没有完全达 到移植的目标 我们对之进行了完善和提高 由于嵌入式系统对代码大小和性能方面的要求特别高 而我们前面的 作比 较粗糙 没有经过很好的测试和揣摩 所以是很不完善的 我们在随后的工作中 主要达到了如下目标 1 对整个编译系统进行了比较全面的测试 并在此基础e 对整个编译系统 进行了完善 测试集主要来自手写的测试程序 g c c 自带的测试集和嵌 入式系统应用程序 其中g c c 自带的测试集是比较全面和完善的 2 对于代码段和数据段寻址限制的问题进行了多种探索 最终得以完美地 解决并且没有带来性能上的降低 3 从多个方面对g c c 的优化策略进行了分析和研究 对机器描述进行重新 定义 以使得能够最大程度地利用g c c 的各个优化过程 浙江人学坝i j 学他论文旌寸二g c c 的l 跌入j 系统编洋器w 宄0 7 开发 第二章编译系统的自动生成和优化 本章主要讨沦编译器的体系结构 各个组成豁分的自动生成 后端技术及代 码优化的策略 参见 a h o8 6 l e v i n e9 2 和 m u e h n i c k 中的相关讨论 2 1 编译系统的体系结构 编译器是把用一种语言 源语言 书写的程序翻译成对应的另一种语言 目 标语言 书写的程序的软件系统 在这个翻译的过程中 编译器有一个重要的任 务 向用户报告源程序中存在的错误 一般来说 我们的源程序是c o 这类高 级语言书写的 目标程序是可以在目标机器上执行的可执行程序 从源程序到可执行程序包括预处理 p r e p r o o e s s i n g 编译 c o m p il a t i o n 汇编 a s s e m b l y 和链接 1i n k i n g 四个阶段 一般的编译器 如u n i x 的c c 和m i c r o s o f t 的c l 都隐藏了这些编译细节 典型的编译器系统结构如下图 仞始源程序 二二蔓壅要 t 源程序 二二巫e 汇编牦码 二二垂叵 t 可重定位的机器代码 二垂蔓窭口 t 机器代码 图表二 1 典型鑫奇编译器系统结构 其中主编译器把源代码转换为汇编代码 包括词法分析 1 e x i c a l a n a l y s i s 语法分析 p a r s i n g 语义分析 s e m a n t i ca n a l y s i s 中间代码 生成 i n t e r m e d i a t ec o d eg e n e r a t i o n 代码优化 c o d eo p t i m i z a t i o n 目 标代码生成 c o d eg e n e r a t i o n 等几个阶段 其主要结构如下图 堕塑坚叁望竺 堂竺堕兰 苎 塑壁垒 生 塑望堂堂型 i 丝 源程序 目标程序 图表二一2 编译器的组成部分 2 2 编译程序的自动生成 编译理论的发展 使编译程序的部分书写工作由专门的生成工具来自动完 成 编译程序的生成器不是自动生成整个编译系统 而是生成它的某些阶段 对 前端 需要将用户对新语言的词法 语法 语义信息的直观描述 形式文法 转 换成分析程序的内部处理形式 对后端 需要将用户对新机器物理特性到逻辑特 性映射的直观描述转换成生成程序使用的数据和算法 2 2 1 编译程序生成器的结构 编译程序生成器的一般结构是 浙江人学硕f 学位论奠 批十g c c 的嵌入式系统编译器研究 开发 一 输卅 图表二一3 编译程序生成器的结构 实际上 这种程序自动生成结构是将问题求解的表示与操作分离 好的表示 简明丽完全 操作采用成熟的算法 隐藏实现细节 生成器将元语言表示的信息转换成驱动程序直接访问的数据结构 多数情况 下这些数据结构以程序 文件 形式存放 然后经编译与驱动程序链接 尽管这 样会比直接生成表低效 但允许用户修改所生成的内容 以调整驱动程序的输入 工具应是健壮的 高效的 时 空 易于与其它部分接口 及有好的用户 模型 另外 工具的输出应易于扩充 修改 有良好的调试输出信息 尽管各种语言形式上差别很大 但它们都有相似的分析算法 如面向对象语 言与面向过程语言有很大的差异 而这种差异根本表现在语法 语义的描述上 用相同的前端生成工具可以实现这两种风格迥异的语言 2 2 2 词法分析程序的自动生成 将词法分析 1 e x i c a la n a l y s e r 或s c a g l l l e r 与语法分析 s y n t a xa n a l y s e r 或p a r s e r 分开的好处在于 前者专门处理所有的输入 隔离了语言的表示细 节 后者在此基础上分析程序结构 理论上 前者适用于3 一型文法 后者适用 于2 型文法 词法分析程序生成器的结构为 墨 浙江人学砂 i 学位论文坫十g c c 的嵌入 系统编详器研究2 i 开发 i正则表达式 图表二4 词法分新程序生成器的结构 l e x 是l e s k 和s c h m i d t 于1 9 7 5 年在贝尔实验室为u n i x 书写的词法分析程 序生成器 现在移植到很多0 s 和机器上 在几乎所有的系统 包括微机 上都 有l e x 的版本 l e x 产生的坷法分析程序l e x y y c 是c 程序 也有r a t f o r 版本 可以被 修改 经编译后 与其它模块链接 其它类l e x 的工具可以生成p a s c a l a d a 版的扫描器 2 2 3 语法分析程序的自动生成 语法分析程序生成器的结构为 图袁二一5 语法分析程序生成器的结构 上下文无关文法用b n f 或e b n f 扩展的b n f 允许更短但更复杂的产尘式 表示 生成的表既可以是自顶而下分析表 也可以是自底而上分析表 通常自顶 而下的分析比自底而上容易 自顶而下分析程序生成器一般是 l l 1 驱动程序 l l 1 分析表 j 江人掌颤f 学位蛇史 拱十g c c 撒a e 系统编译器纠 完 r 开发 l l 1 分析表由f i r s t 和f o l o w f 过程根据文法自动构造 l l 1 文法也称为表驱动的递归下降分析 另 种自顶而下的分析是递归下降语法分 析 直接将文法 右端 符号看作子程序 当文法是l l 1 而没有现成的l l 1 分析工具时 使用此法可以产生快速编译器 如t u r b op a s c a i 自底而上分析程序生成器 般基于l r 一系列的文法 使用移进一归约的驱动 程序 l r 足以分析 般的程序语毒 s l r i 能谀别程序的大韶分结构 l a l r 1 与l r 1 能力几乎相同 但状念要少得多 y a c c y e ta n o t h e rc o m p i l e rc o m p i l e r 是s t e v ej o t h s o n 于1 9 7 5 年在贝 尔实验室中为u n i x 书写的语法分析程序生成器 像l e x 样 已被移植到其它 机器和o s 上 y a c c 接受b n f 生成l a l r 1 分析表 输入的y y l e x 0 既可以是l e x 的输出 也可以手写 每个产生式有相关的语义动作 也可以定义单词符号 因此y a c c 可以被看作是一个前端生成器 y a c c 生成的代码也可以被更改 以调整后端的输入 驱动程序可以做错误 检查和处理 2 2 4 语义分析程序生成器 语义分析程序生成器不再是表 驱动器的模式了 其结构为 图表二占语义分析程序生成器的结构 属性文法起源于语法制导翻译技术 1 9 6 8 年k n u t h 对属性文法做了规范化 说明 一个属性文法是在b n f 上附加属性 如数据结构 值 机器码等 和语义 函数 定义如何给属性赋值 自顶而下的分析适于l 一属性文法 用继承属性 自底而上的分析适于s 一属性文法 用合成属性 元语言包括属性文法的翻译工具出现于七十年代末到八十年代初 如g g 9 浙江大学坝l j 学位论文 捧十o c c 的嵌入 系统编译器 宄 开发 k a sl e n s 等 j9 8 2 肌p r a i 等 1 9 7 8 v a t s b e r g 等 1 9 8 4 和m u g 一2 o a n a p a t h i 等 1 9 8 2 都是基于属性文法的描述 2 2 5 代码生成程序的自动生成 对代码生成程序的自动生成仍在研究中 一般模式仍是 表 驱动程序 即将机器描述与代码生成算法分丌 从而生成不同的由 中j 骨j 表示 目标代码 对构成的表 提高可移植性 代码生成程序生成器的结构为 一 机器描述 一一1 一 代码生成程序牛成器 i 一 一 一 11 t 1l f 中间表示 一 n代码牛成程膨l 叫代码 l 编 f i j l kl o 图表 7 代码生成程序生成器的结构 可重定义机器 r e t a r g e t a b l e 的代码生成 6 a n a p a t h i 等 1 9 8 2 的三种方 法都体现了这一恩想 1 解释性代码生成 既可以是手写翻译 些p c o d e 翻译器 也可以是 表格驱动 u c o d e 翻译器 表格驱动是实现虚拟机指令到实际机器指 令的映射 但这种方法太贴近特定机或特定语言 对上下文依赖的信息 很难体现 如 a b c 中 b c 的结果须存储 i fb ct h e n 中 b i n s n f l a g s h 处理m d 中具名的d e f i n e i n s n 和d e f i n e e x p a n d 类的指令模板 生成 一系列的宏 h a v e 章 以指示该目标机器有哪些可用的标准指令 宏定义 体根据模板的附加条件部分生成 1 若附加条件部分为空 则宏定义体为 i 2 若附加条件部分为非空 则宏定义体为 附加条件 另外 还生成具名模板相应的 g e n 一 函数原型说明 这些函数在 i n s n e m i t c 中定义 2 g e n c o n s t a n t s 一 i n g n c o n s t a n t s h 处理m d 中的d e f i n e c o n s t a n t s 模板 为每个模板中定义的常量生成一 个宏定义 浙江丈学顷 f 学位论史 基于g c c 的嵌a 武系统编译嚣研究与开发 3 g e n c o n f i g 一 i n s n c o n f i g h 处理m d 中的d e f i n e i n s n d e f i n e e x p a n d d e f i n e s p l i t d e f i d e p e e p h o l e 和d e f i n e p e e p h o l e 2 模板 统计这些m d 中r t l 模板的一 些边界数掘 生成相关的宏定义 4 g e n c o d e s2 i n s n c o d e s h 处理m d 中具名的d e f i n e i n s n 和d e f i n e e x p a n d 类的指令模板 对它 们赋以唯一的递增的编号 从0 开始 称之为i n s n c o d e n u m b e r 生成枚 举类型 i n s n c o d e 其可选值是具名的d e f i n e i n s n 和d e f i n e e x p a n d 模板的名字加上前缀 c o d e f o r 一 构成的字符串 此可选值被赋为相应模 板的i n s n c o d e n u m b e r 例如 名为 a d d s i 3 一 n t e r n a l 豹一条d e f i n e i n s n 模板 在m i p s m d 中是第三条 则i n s n c o d e 有可选值 c o d e f o r a d d s i 3 i n t e r n a 且其值为2 5 g e n a t t r 一 i n s n a t t r h 处理m d 中d e f i n e a t t r d e f i n e d e l a y 和d e f i n e f u n c t i o n u n i t 模板 生成相关的宏定义和函数原型 这些函数在由g e n a t t r t a b 生成的 i n s n a t t r t a b c 中定义 d e f i n e a t t r 生成一个宏定义 h a v e a t t r 一属性名 一个枚举类型 如果可数的话 和一个函数原型 g e t a t t r 一属性名 d e f i l 3 e d e l a y 对于普通的跳转延时 生成如下定义 d e f i n ed z l a xs l o t s b mi n tm 理由1 删 工 t 3 豫r 蹬 r t x j t e r ni n t i g i b l f o r d e l a yp 删 l t x i n t r t x i n t j x 协r ni n tc o n s tn u 皿d e l a ys l o t sp a r a m st r t x 对于预测结果的跳转延时 只有跳转成功 延时槽内的指令才执行 否 则结果丢弃 生成如下定义 d o f i n e 褂赋盈z a l s 黜 e x t e r ni n te l i g i b l e f o ra n n u l f a l s ep a r a i r t x i n t r t x i n t j d e f i q 珊翘s 翻眦衄 i n g d e f i n e f u n c o n u n i t 定义结构类型f u n c t i o n u n i t d e s c 及一些宏定义 6 g e n a t t r t a b i n s n a0 t r t a bc 处理m d 中d e f i n e a t t r d e f i n e d e l a y 和d e f i n e f u n c t i o n u n i t 模板 生成i n s n a t r h 中声明的函数的定义 同对 根据延时槽的定义 计算每 个i n s n 的延时槽数目 计算什么样的指令可以填入到延时槽 生成相关的 数据结构和函数 这些数据结构和函数对于处理延时槽指令调度非常重要 i 江大学积 学位论文 甚于二g c c 的嵌 c 系统编译器研究与开发 7 d e n e m l t2 l n s n e m l t c 处理m d 中具名的d e f i n e i n s n d e f i r e e x p a n d d e f i r e s p l i t 和 d e f i n e p e e p h o l e 2 类的指令模板 生成相应模板的 d e n 一模板名 函数定义 对于d e f i n e s p l i t 生成的函数名为 g e n s p l i t 一模板号 在r t l 生成时 这些函数用来生成i n s n 和i n s n 序列 另外还生成函数 a d d c l o b b e r s 和 a d d e d c l o b b e r s h a r d r e g p 8 g e n e xl f a c t i n s n e x t r a c t c 处理m d 中的d e f i n ei n s n 和d e f i n e p e e p h o l e 类模板 生成函数 i n s n e x t r a c t 该函数体是 个大的s w i t c h 语句 以模扳号为分支变量 返回相应i d s f l 中操作数的存取方式 9 g e n o p i n i t i n s n o p i n i t e 处理 中具名的d e f i n e i n s n 和d e f i d e e x p a n d 类的指令模扳 生成 函数 i n i t a l l o p t a b s 以初始化标准动作集 o p t a b 使 m d 中定义 了的标准动作出相应的模板来实现 而不是由库函数 1 i b g c c a 来实现 例如若 h a v e a d d d i 3 在i n s n f l a g s h 中定义 为真 则 a d d o p t a b 一 h a n d l e r s i n t d l m o d e i f i s h c o d e c o d e f o r a d d i 3 表示模式 为d l m o d e 的加法由名为 a d d d i 3 的这 条m d 来实现 1 0 g e n o u t p u t 一 j n s n o u t p u t c 处理m o 中的d e f i n e i n s n d e f i n e e x p a n d d e f in e s p l i t 和 d e f i n e p e e p h o l e 2 类的指令模板 生成相应模板的 o u t p u t 一模板号 函数 定义 这些函数定义了如何为相应的模板生成汇编代码 汇编模板以 开头表示由一段c 程序来输出汇编代码 以 开头表示要根据w h i c h a l t e r n a t i v e 的值在一系列汇编代码中选择一个 否则表示宜接输出 同时 生成两个结构数组i n s n d a t a 和o p e r a n d d a t a 以模板号为下标 分别 表示相应的信息和操作数信息 这两个数据结构的定义及其解释如下 s t r u o ti n s nd a t a f 一 o n m td 戤 c o n 8 tn 蛐 舨名 o o n s tp t ro u t p u t 三种情况 1 输出模板 2 输 出摸扳敷组 3 输出函赞 o o n j ti n s n 帆f ng o n f u n r t l 生成函数 c o n s ts t r u o ti n s no i n dd a t a c o n s to p e r a n d 撵作教数组的基址 c o n s tc h a rn o p e r a n d l i 撩臻糍 辍 c o a s td 堵rn d u p s 隅t 曲d 噼的个数 c o n s tc h a rna l t e r n a t i v e s c o n s t r a i n t 部 椭可选择个数 口o n s tc h a r 口u 印u 皇 如r m t j j s t r u e tz 观g 删出 o u s t 域中是哪种输出模式 浙江人学硕1 学位论殳 f 燕子g c c 的嵌入 系统编译器研宄与开发 c o n s ti n s q o p e r a n d p r e d i c a t ef np r e d i c a t e 模扳中的p e d i c a t e 部分 c o l l s tc h a r c n s tc o n t r a i n t j 模扳中的c o n s t r a i n t 部分 n 3 t 暑删b i t f i e l d m a c h i n em o d e m o d e 1 6 模式名 捌如 d x m o d e c o n s tc h a rs t r i c tl o w e o n s tc h a re l i m i n a b l 色 l i g e n p e e p 一 1 n s n p e e p c 处理m d 中的d e f i n e p e e p h o l e 模板 生成函数 p e e p h o l e 以进行窥 孔优化 同时生成一个r t x 类型的数组 p e e p o p e r a n d 其大小为m d 中定 义d e f i n e p e e p h o l e 模板个数加2 1 2 g e n r e c o g 一 i n s n r e c o g o 处理彻中的d e f i f i e i n s n d e f i n e s p l ic 和d e h e p e e p h o l e 2 类的指 令模板 生成三个函数和相关的子函数 r e c o g 这个函数用来识别给定的i n s n 是否 个合法的指令 若合法则返回 所匹配模板的模板号 否则返回一1 返回的模板号可以作为数组 i n s n d a t a 或其他数据结构的索引下标使用 s p l i t jn s n s 0 这个函数用来识别给的的i n s n 是否可以进行分割 若可以在返回分割 后的r t xs e q u e n c e 否则返回0 p e e p h o l e 2 一i f i s n s 0 若匹配在返回新的r t xs e q u e n c e 否则返回0 实际上 i n s n 一 的内容完全可以手工书写 但是编译体所使用的信息太分散 了 关于一个m d 的信息要写在几十个数组或函数中 若真的手写 是一件烦杂 易错且工程量很大的工作 而且势必会陷入到具体的编译内部数据结构的细节之 中 从而不能达到使开发者只需书写适当的机器描述文件就可加入新平台的目 的 与i r i s h 比较 m d 将后端信息集中 抽象 使一条模板的所有信息有机地 表达在同一结构中 其的联系使模板的书写和阅读都较容易 而模板之间的关系 通过它们的属性关系和共有的某种特征来反映 g e n 对滟所富含的语义进行 解 码 抽取不同编译p a s s 所关心的内容 以c 程序最容易读取的方式集中写入不 同的信息体 同时 显化 彻之间的联系 预先 替 编译体做了比较 判断 选择的工作 g e n 生成器是一个书写优美的m d 编译器 浙江人学坝j j 学逝 仑立 幕十g c c 的嵌入 c 系统编译器研究与开发 3 4 r t l r e g i s t e rt r a n s f e rl a n g u a g e g c c 编译器绝大部分工作都是对一种r t l 语言描述的中间表示形式进行加工 处理 r t l 中剧代码是g c c 的核心数据结构 是g c c 实现高度可移植性的桥梁 由于它描述了硬件结构中各种寄存器值的相互传送和依赖关系 因此 编译器能 够在其上进行全面而深入的优化
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿山绿色通风智能技术创新与瓦斯治理技术创新总结报告
- 商场医闹事件应急预案演练脚本
- 经开区项目屋面柔性防水层施工方案-作业方案
- 图书馆项目EPC总承包采购管理方案
- 中级焊工满4年才能考高级?工龄10年其实也能报
- 饭店食物中毒应急预案演练脚本
- 恒美智造磷酸盐检测仪:水质磷污染精准管控的核心技术装备研究
- 《Python数据分析》高职全套教学课件
- 2026年陕西省物业管理师《物业管理实务》试卷及答案
- 综合健身馆功能区二次装修施工方案
- 工艺纪律检查方案
- 汽车维修管理制度大全
- 信息系统运维项目投标方案模板
- 2026年《关于用好乡镇(街道)履行职责事项清单的具体措施》宣导课件
- 2026中国功能性食品原料科学认证与消费者认知调研
- 2026年初级注册安全工程师《安全生产专业实务(其他安全)》真题试卷(附答案解析)
- 胆南星临床应用现状
- 原材料采购价格监督制度
- 第二十章-颅内和椎管内血管性疾病
- 半月板与关节软骨损伤临床指南
- 2023年版人教版高一必修第一册物理测试题(含答案)
评论
0/150
提交评论