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

现在详细地分析寄存器分配的属性结构,它的定义如下:
#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 是保存整型和浮点寄存器的已经使用寄存器
通过上面的数据结构来实现寄存器分配的。
 

你可能感兴趣的:(数据结构,struct,编译器,X86)