lcc的有很多操作符,相关的定义也很奇特,采用了宏做预处理。让我这个小菜鸟看得傻了眼,具体如下,大家可以当作一个C编程技巧
#define sizeop(n) ((n)<<10)
#define generic(op) ((op)&0x3F0) //返回操作码
#define specific(op) ((op)&0x3FF)
#define opindex(op) (((op)>>4)&0x3F)
#define opkind(op) ((op)&~0x3F0)
#define opsize(op) ((op)>>10)
#define optype(op) ((op)&0xF) //返回操作类型
#define gop(name,value) name=value<<4, //通过宏定义把枚举常量跟所定义的值绑定
#define op(name,type,sizes) //每个操作符所允许的类型操作
enum {
#include "ops.h"
LASTOP
};
#undef gop
#undef op
gop(CNST,1)
op(CNST,F,fdx)
op(CNST,I,csilh)
op(CNST,P,p)
op(CNST,U,csilh)
gop(ARG,2)
op(ARG,B,-)
op(ARG,F,fdx)
op(ARG,I,ilh)
op(ARG,P,p)
op(ARG,U,ilh) //ops.h的部分代码,其中B,F,I,P,U为类型后缀。在以后介绍LCC类型系统时会写出相关内容