LCC编译器的源程序分析(58)后端使用的节点结构

 
在LCC编译器后端,主要使用下面的节点结构来标识代码属性。
#001 
#002 //节点注释的扩展,主要是代码生成使用。
#003 //
#004 //蔡军生 2007/07/21 QQ: 9073204
#005 //
#006 typedef struct {
#007     unsigned listed:1; //标记这是树的根节点。
#008     unsigned registered:1; //寄存器是否分配
#009     unsigned emitted:1; //标识已经输出指令。
#010     unsigned copy:1; //标记寄存器之间的复制。
#011     unsigned equatable:1; //标记存放公共表达式的临时单元的指令
#012     unsigned spills:1; //寄存器溢出标志。
#013     unsigned mayrecalc:1; //可以重新计算公共表达式的节点。
#014     void *state; //保存指令选择的结果。
#015     short inst; //标记节点是否使用指令实现。
#016     Node kids[3]; //后端编译的指令树。
#017     Node prev, next; //指令链表。
#018     Node prevuse;
#019     short argno; //参数数目。
#020 } Xnode;
#021 
#022 
#023 typedef struct {
#024     char *name; //编译器后端产生的名称.
#025     unsigned int eaddr; /* omit */
#026     int offset; //表示变量所在的栈位置。
#027     Node lastuse; //最后使用寄存器的节点。
#028     int usecount; //节点的使用次数。
#029     Regnode regnode; //寄存分配相关属性。
#030     Symbol *wildcard; //保存寄存器列表。
#031 } Xsymbol;
#032 
 
后端生成代码,主要就是计算上面结构的属性,只要把上面的结构全部填充,就可以生成最终的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值