Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1077217
  • 博文数量: 104
  • 博客积分: 3715
  • 博客等级: 中校
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-30 08:38
文章分类

全部博文(104)

文章存档

2013年(1)

2012年(9)

2011年(41)

2010年(3)

2009年(3)

2008年(47)

分类:

2008-08-14 22:59:27

这一章介绍的是目标代码生成。
个人感觉这一章的内容太少了。作为这么经典的一本书,感觉只是略讲的皮毛。
代码生成中三个重要的部分:指令选择、寄存器分配、指令调度。
其中,指令选择只是将了动态规划的树匹配,而且具体的树匹配算法并没有详细介绍,只是说了思想。对于自动机的那个方法根本就没有提。
寄存器分配,对于图染色的方法也只是说了一下思想,完全没有展开介绍。
指令调度只是提了一下名字,没有内容。

好吧。
1、代码生成是一个编译器的最后一个阶段。代码生成将前段构建的中间表示翻译成目标程序。
2、指令选择为每一个中间表示的语句选择最合适的实现它的目标机器指令。
3、寄存器分配用于确定在程序的每一个点上,哪些值将被保存在寄存器中。图染色是一个高效的方法。
4、Register Assignment用于确定哪一个值具体在哪个寄存器中。
5、所谓的可重定向编译器是指可以为多个目标机生成指令的编译器,如lcc。
6、虚拟机就是一个解释器。
7、RISC、CISC计算机的定义。
8、基本块、流图、循环的定义。
9、基本块的DAG表示中,DAG的每一个节点代表了基本快的一个语句,其子节点表示的语句是该节点操作数的最后一个定义。
10、窥孔优化是局部的代码改进变换,它每一次只关心一个比较小的程序语句序列的窗口。
11、指令选择可以使用树重写过程来完成。树模式对应于机器指令。可以通过为每一个模式关联一个代价,并应用动态规划的算法为大部分机器生成局部最优的代码。很遗憾,“大部分”机器不包括x86。
12、一个Ershov 数表示计算一个表达式,而且不将中间结果存储到主存至少需要多少个寄存器。
13、spill代码是一个指令序列,它将一个寄存器中的值存储到主存中,使得有一个寄存器可用。
阅读(1891) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~