第十二章代码生成内容摘要:

p C 的四元式序列A . 对每个四元式 i: A := B o p C ,依次执行下述步骤:1 . 以四元式 i: A := B o p C 为参数,调用过程 g et re g ( i : A := B o pC )。 从 g et re g 返回时,得到一寄存器 R ,用它作存放 A 现行值的寄存器;2 . 利用 A V A L U E [ B ] 和 A V A L U E [ C ] ,确定出 B 和 C 现行值存放位置 B` 和 C` ,如果其现行值在寄存器中,则把寄存器取作 B` 和 C` ;1 . 如 B` ≠ R ,则生成目标代码L D R , B `o p R , C ` 否则,生成目标代码 o p R , C` 如 B` 或 C` 为 R ,则删除 A V A L U E [ B ] 或 A V A L U E [ C ] 中的 R2 . 令 A V A L U E [ B ] ={ R } ,并令 R V A L U E [ R ] ={ A } ,以表示变量 A 的现行值只在 R 中并且 R 中的值只代表 A 的现行值;3 . 如 B 或 C 的现行值在基本块中不再被引用,它们也不是基本块出口之后的活跃变量 (由四元式 i 上的附加信息知道),并且其现行值在某个寄存器 Rk 中,则删除R V A L U E [ R k ] 中的 B 或 C 以及 A V A L U E [ B ] 或A V A L U E [ C ] 中的 Rk ,使该寄存器不再为 B 或 C 所占用。 B .处理完基本块中所有四元式之后,对现行值在某寄存器 R中的每个变量 M ,若它在出口之后使活跃的,则生成 STR , M ,放到主存中。 其中假定 d在基本块的出口是活跃的。 uvdutvcaubatcacabad::::)()()(:代码序列 语句 生成的代码 寄存器描述器 地址描述器t : = a - b M OV a,R 0SUB b,R0空寄存器R0包含 t t 在 R 0 中u: = a - c M OV a,R 1SUB c,R 1R0包含 tR1包含 ut 在 R0中u 在 R1中v: = t + u ADD R 1 ,R 0 R0包含 vR1包含 uu 在 R1中v 在 R0中d: = v + u ADD R 1 ,R 0M OV R0,dR0包含 d d 在 R0中d 在 R0中和存储器中从 dag生成目标代码 例:赋值语句 T 4 :=A+B(E(C+D)) 四元式序列 G T 1 : =A+B T 2 : =C+D T 3 : =ET 2 T 4 : =T 1 T 3 DAG : A B E C D n9 n3 n8 n1 n2 n7 n6 n4 n5 T4 T1 T3 T2 + + T4:=A+B(E(C+D)) T1:= A+B MOV A,R0 T2:=C+D ADD B,R0 T3:=ET2 MOV C,R1 T4:=T1T3 ADD D,R。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。