LCC编译器的源程序分析(53)指令的选择
来源:互联网 发布:淘宝关闭订单运费险 编辑:程序博客网 时间:2024/04/30 22:33
像下面的语句:
int nTest1 = 1;
选择什么样的汇编指令生成的呢?又是怎么样去选择指令的呢?在本例子里,LCC是选择下面的指令生成的:
#010 mov dword [ebp + -12], 1
现在就来分析选择指令过程的代码,先分析函数gen的代码:
#001 Node gen(Node forest) {
#002 int i;
#003 struct node sentinel;
#004 Node dummy, p;
#005
#006 head = forest;
#007 for (p = forest; p; p = p->link) {
#008 assert(p->count == 0);
#009 if (generic(p->op) == CALL)
#010 docall(p);
#011 else if ( generic(p->op) == ASGN
#012 && generic(p->kids[1]->op) == CALL)
#013 docall(p->kids[1]);
#014 else if (generic(p->op) == ARG)
#015 (*IR->x.doarg)(p);
#016 rewrite(p);
#017 p->x.listed = 1;
#018 }
第7行开始遍历整个代码森林。
第16行里调用函数rewrite来分析选择什么指令最合适。它的代码如下:
#001 static void rewrite(Node p) {
#002 assert(p->x.inst == 0);
#003 prelabel(p);
#004 debug(dumptree(p));
#005 debug(fprint(stderr, "/n"));
#006 (*IR->x._label)(p);
#007 debug(dumpcover(p, 1, 0));
#008 reduce(p, 1);
#009 }
第3行是生成前面的标号。
第6行调用后端代码生成接口函数_label来计算指令选择。
下次再分析函数_label,它是怎么计算指令的花费的。
- LCC编译器的源程序分析(53)指令的选择
- [转载]LCC编译器的源程序分析(53)指令的选择
- LCC编译器的源程序分析(54)指令模式匹配
- LCC编译器的源程序分析(2)LCC编译器的预处理
- LCC编译器的源程序分析(2)(3)
- LCC编译器的源程序分析(4)(5)
- LCC编译器的源程序分析(6)(7)
- LCC编译器的源程序分析(9)(8)
- LCC编译器的源程序分析(10)(11)
- LCC编译器的源程序分析(12)(13)
- LCC编译器的源程序分析(14)(15)
- LCC编译器的源程序分析(16)(17)
- LCC编译器的源程序分析(18)(19)
- LCC编译器的源程序分析(1)C编译器的目标
- LCC编译器的源程序分析(1)C编译器的目标
- [转载]LCC编译器的源程序分析(54)指令模式匹配
- LCC编译器的源程序分析(3)选择不同的目标代码接口
- LCC编译器的源程序分析(3)选择不同的目标代码接口
- 结构化异常及崩溃捕获
- 字符设备驱动程序的扩展操作
- 常用vi编辑器命令
- 解决中文乱码
- 有关北京的小产权
- LCC编译器的源程序分析(53)指令的选择
- 自定义threadpool
- Windows更新网站被黑还是被ARP病毒捉弄了?Virus.Win32.AutoRun.am
- 看看这个页面,水能告诉我他是怎么做出来的??
- php中的单双引号
- 小谈IP Over PCI 的开发
- 算法为王--正本溯源系列之一
- 双缓冲解决绘制图象闪烁问题
- 供应2007年秋季广交会展位-申请102届秋季广交会展位-求购秋季广交会位展位