hxuhack / compiler_project

This is the compiler project webpage for the SOFT130061 @ Fudan University.
24 stars 32 forks source link

关于spill部分的实现 #27

Closed yilin0518 closed 1 month ago

yilin0518 commented 1 month ago
74a018e623c32bdf6678aa5eb059717

关于这部分我的想法是这样的,不知道正确与否:

  1. 需要先计算为spill额外开辟多少栈空间,然后对于每一个虚拟寄存器,偏移量分别是多少。
  2. 然后对之后每次用到这个虚拟寄存器的地方分配一个spill专用的物理寄存器,use的话ldr到这个寄存器中,def的话通过这个寄存器再str到栈上,这些指令直接加到对应指令的附近。

但是这样的话栈空间的开辟应该插入到哪个位置呢?

zhanghanxing2022 commented 1 month ago

直接修改原来的。 比如,在函数第一条语句,我会写成 sub sp,sp,#imm1 之后,在spill的时候, 我会读取#imm1,加上#imm2,将两者的和移入一个寄存器,假设是x16,直接修改原来的语句 变成 mov x16,#imm1+imm2 sub sp,sp,x16.