- 7
- 0
- 约1.93万字
- 约 56页
- 2021-03-16 发布于广东
- 举报
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2021/3/14 * 9.6.3 函数getreg 函数 getreg 的第一次调用返回 R0 作为计算 t 的寄存器。因为 a 不在 R0 中,生成指令MOV a,R0 和指令 SUB b,R0,然后更新寄存器描述符以记录 R0 包含 t。 代码生成以这种方式继续进行,直到最后一个三地址语句 d := v+u 处理完为止。注意,因为 u 没有下次引用,R1 将变为空。最后,在基本块的结尾生成指令 MOV R0,d,存储活跃变量 d。 图9-10中生成的代码的开销为12。可以将它缩减到11,只要在第一条指令后立即生成指令MOV R0,Rl,而删除指令 MOV a,Rl 即可,但这需要更复杂的代码生成算法。开销能减少的原因是从 R0 装入 Rl 比从内存装入要廉价一些。 2021/3/14 * 9.6.4 为其他类型的语句生成代码 三地址语句中的索引与指针运算和二元运算的处理方式相同。图9-11给出了为索引赋值语句 a := b[i]和 a[i] := b 生成的代码序列,假定 b 是静态分配的。 i的当前位置决定了生成的代码序列。图中给出了
原创力文档

文档评论(0)