Linux 版 (精华区)
发信人: xian (我想用心来点亮希望), 信区: Linux
标 题: GNU CC 支持多平台的实现技术
发信站: 紫 丁 香 (Sun May 2 15:54:01 1999), 转信
GNUCC支持多平台的实现技术
支持多平台的实现技术
GNUCC编译程序是一个支持多种平台的编译系统,它所支持的处理机约有30多种,如VAX系
列,convexc1,c2,sparc,i386,i486,MIPS系列,intel960,RS/6000,Alpha等等.GNUCC之所以
能支持如此多的平台,是由于它成功地采用了一种将机器相关部分从编译中分离出来的独特
方法.GNUCC的这种编译方法适应了自由软件覆盖大部分处理机平台的设计宗旨,在计算机更
新换代如此迅速的今天,这种多平台的编译技术越发显得重要.它可以减少大量的重复劳动,
缩短编译程序的开发期.GNUCC所采用的支持多平台的思想及其实现方法独具特色.
GNUCC编译系统主要由三部分组成:与语言相关的前端,与语言无关的后端以及与机器相关的
机器描述.GNUCC的前端由与源语言关系密切的语法分析,语义分析组成.它对源语言进行分
析后将其转换为语法树.它的后端为编译系统的主体部分,它将语法树转换成中间语言,在此
中间语言基础上进行各种优化并完成代码生成,机器描述部分则描述GNUCC所运行的宿主机
和目标机的操作系统,体系结构,指令系统等有关系统与硬件的情况并提供给编译程序的后
端使用.这样采用不同的体系机器描述,将得到适合于在不同机器与系统上运行的GNUCC版
本.不同的处理器之间和不同的操作系统之间存在着相当大的差别,对于支持多平台的编
译程序而言,面对这众多不同的系统与体系结构它必须解决三个根本的问题:(1)需要设计
一种对目标机恰当的描述,这种描述既要能描述它们各自的特性,同时还要适合于编译程
序的处理;
(2)
需要设计出一种较好的中间语言,这种中间语言应当在适当的层次上,向上能支撑多语言
的映射,向下能适应多平台转换并且适合于进行各种优化;(3)在机器描述与编译主体之
间需要仔细地设计一种统一接口.GNUCC编译系统的独特设计解决了这三个问题.
1.GNUCC的中间语言
GNUCC的中间语言称为寄存器传递语言(RegisterTransferLanguage),简称为RTL.RTL的
语法结构类似于LISP语言的表达式结构.这种结构实际上表示的是一种树结构.利用这种
类LISP的表示,RTL设计得十分简洁,灵活,它仅有115种操作码,其中真正用于编译内部的
只有91种,另外的24种则只出现在机器描述中.
RTL的基本元素是称为rtx的表达式.每个rtx都具有统一的内部数据结构与外部语法形式,
这里,我们只涉及外部语法形式,rtx表达式的外部语法一般形式为:
(code:mopn1opn2...)其中,
code-rtx操作码.该操作码指明rtx表示的操作类型,如表示一条rtx指令,进行某种算术
运算,引用某个符号名或寄存器,表示某种说明等等.除此之外,code还确定rtx的操作个
数和这些操作数的种类
m-机器方式,机器方式表示数据和运算结果的类型,它反映了数据类型与字长两部分信息,
数据类型分为整型,浮点和复型三种.机器字长则分8位,16位,32位,64位,双64位等,这两
部分信息有条件组合所构成的机器方式反映了机器所能表示的各种数据类型.此外,GNUCC
还提供了void方式,条件结果方式和块方式.并不是每一种rtx表达式都必须有机器方式,
当不提供机器方式时,意味着其机器方式为void.
Opn-操作数.每个rtx表达式的操作数个数以及操作数种类是各不相同的,这取决于rtx操
作码,gcc编译内部有一套表格,由rtx的code可直接从这些表格中获取自身操作数个数以及各操
作数所表示对象的种类.rtx的操作数可表示五种对象:一般整数,宽整数,字符串,rtx表达
式和由指向rtx的指针组成的向量.
如(insn121113(set(mem:SF(plus:S1(reg::S!58)(const_int32)))(reg:SF
71)))
它表示了一条将寄存器之值送至内存的指令,其中,操作码insn指出这是一条表示指令的
rtx,它的第0,第1,第2操作数均为整数,分别表示该指令的编号,前一条指令的编号与后
一条指令的编号;它的第三操作数为一rtx表达式,表示该指令的动作;这里省略了它的第
四以后的操作数.第三操作数中,set,mem,plus分别表示赋值,存储器引用和加法运算,
它们的操作数均为rtx表达式;reg与const-int分别表示寄存器引用和整常数引用,它们
的操作数分别为一般整型和宽整型
...
admin@studio.openunix.org
--
※ 修改:.netiscpu 于 May 2 16:12:42 修改本文.[FROM: dns.mtlab.hit.ed]
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.239.115]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.202毫秒