LCC编译器的源程序分析(56)寄存器分配的属性结构

来源:互联网 发布:手机维修软件有哪些 编辑:程序博客网 时间:2024/05/17 01:06
现在详细地分析寄存器分配的属性结构,它的定义如下:
#001 typedef struct {
#002     Symbol vbl; //保存变量符号,而不是临时变量.
#003     short set; //寄存器类型,比如整数,或者浮点数。
#004     short number; //寄存器编号。
#005     unsigned mask; //寄存器字节大小,比如EAX,还是AX。
#006 } *Regnode;
#007 
#008 //寄存器集合类型:整数寄存器和浮点寄存器。
#009 enum { IREG=0, FREG=1 };
vbl是用来保存变量的符号指针。
set是保存寄存器类型,比如是使用IREG整型寄存器,还是使用FREG浮点寄存器。
number是寄存器编号,比如在X86里是从0开始到32。
mask是用来表示寄存器的字节大小,比如AH是8位mask值是1,AX是16位mask值是2,EAX是32位mask是4。
 
同时程序里还使用到两个数组保存全局寄存器的使用情况,如下:
#001 //保存空闲的寄存器
#002 unsigned freemask[2];
#003 
#004 //保存已经使用的寄存器。
#005 unsigned usedmask[2];
 
freemask是保存整型和浮点寄存器的空闲寄存器。
usedmask是保存整型和浮点寄存器的已经使用寄存器
通过上面的数据结构来实现寄存器分配的。