免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10514 | 回复: 3
打印 上一主题 下一主题

RTL(gcc Register Transfer Language )中文版(zz) [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-06 15:35 |只看该作者 |倒序浏览
以下是本人对gcc internal的RTL的部分中文翻译,希望给指出点错误,也希望大家能够参与Machine Desc和Target Macros的翻译



11        RTL表示
编译器的大多数工作都是在一种称为寄存器传递语言(Register Transfer Language)的中间表示之上完成的。这种语言用来描述将被输出的指令,几乎是一个接一个的,通过代数形式来描述指令的功能。

RTL的灵感来自Lisp列表。它存在两种形式:一种是内部形式,通过指向其它结构的结构来表示;另一种是文本形式,用在机器描述和打印调式输出中,通过嵌套的圆括号来表示,以对应其在内部的结构。
11.1        RTL对象类型
RTL使用五种对象:表达式,整数,宽整数,字符串和向量。表达式是非常重要的一种对象。一个RTL表达式(简称为RTX)是一个C语言中的结构类型,通常用一个指针来引用;类型为typedef name rtx。

整数就是简单的int,用十进制数书写。宽整数是一种类型为HOST_WIDE_INT的整数对象,用十进制书写。

字符串是一系列的字符。在内部用C语言的char*方式表示,并且采用C的语法形式。不过,在RTL中字符串不能为空。如果在机器描述中写了一个空串,它在内部将由一个空指针表示而不是一个指向空字符的指针。在某些上下文中,这些替代字符串的空指针是有效的。在RTL代码中,字符串通常出现在symbol_ref表达式中,但也在其它RTL表达式的上下文中出现,用于构成机器描述。

在机器描述中,字符串通常加上双引号,和在C中一样。不过,在机器描述中,字符串可以分成多行写,这在C中是非法的,并且临近的字符串常量不会像C一样被连接。字符串常量可以用圆括号围住,使得机器描述便于阅读。

字符串还有一种特殊的语法,这在当机器描述中嵌入C代码时很有用。在出现字符串的任何地方都可以加上C风格的大括号块。整个大括号块,包括最外层的一对括号,被看作字符串常量。大括号里面的双引号不作为特殊的字符。因此,如果用C代码写字符串常量时,不需要通过反斜杠对双引号进行转义操作。

向量包含多个指向表达式的指针。向量中的元素个数被显式的表现。向量的书写方式为用方括号包裹着元素,通过空格顺序隔开。长度为零的向量不会被生成,而使用空指针来代替。

表达式按表达式代码(也称作RTX码)分类。表达式代码的名字在rtl.def中定义为一个C的枚举常量(大写字母)。表达式代码及它的含义是机器独立的。RTX码可以通过宏GET_CODE(x)获取,通过宏PUT_CODE(x, newcode)修改。

表达式代码决定了表达式包含多少操作数,以及操作数是哪种对象。和LISP不一样的是,在RTL中,无法通过操作数来得知它属于哪种对象。必须通过它的上下文——包含表达式的表达式代码得知。例如,在代码subreg的表达式中,第一个操作数被作为一个表达式,第二个数被作为一个整数。在代码plus的表达式中有两个操作数,都被作为表达式。在symbol_ref表达式中有一个操作数,被作为字符串。

表达式的书写方式为一对圆括号加上表达式的类型名字,标志和机器模式,然后是表达式的操作数(用空格分隔)。

表达式代码的名字在md文件中用小写表示,在C代码中用大写表示。在本参考手册中,它们用下面的方式表示:const_int。

在一些上下文中,表达式通常会需要一个空指针,书写方式为nil。

[ 本帖最后由 cjaizss 于 2008-6-1 11:57 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-14 22:02 |只看该作者
容易误解的是RTL是in mem IR,而不是in file IR。
GCC是紧凑结构的静态编译器,RTL对于移植来讲最直接,但是 树 也同样重要,RTL和树 是同时存在的,共同构成CFG来进行优化,尤其现在GCC4还有了GIMPLE。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2008-01-15 12:55 |只看该作者
挺好,但是建议可否把标题中的RTL用Register Transfer Language 解释一下,因为单个RTL容易被误解,特别在这个版面,hoho

论坛徽章:
0
4 [报告]
发表于 2008-01-20 16:21 |只看该作者
学习了,谢谢分享。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP