typedef enum
{
RAL,
RCL,
RDL,
RBL,
RAH,
RCH,
RDH,
RBH,
} Reg8;
typedef enum
{
RAX,
RCX,
RDX,
RBX,
RSP,
RBP,
RSI,
RDI,
} Reg32;
enum
{
PrefixCS = 1<<0,
PrefixSS = 1<<1,
PrefixDS = 1<<2,
PrefixES = 1<<3,
PrefixFS = 1<<4,
PrefixGS = 1<<5,
};
typedef struct Mem Mem;
struct Mem
{
/* refers to mem location base+disp+index*scale */
Reg32 base;
u32int disp;
Reg32 index;
u32int scale;
};
typedef enum
{
ExReg8,
ExReg32,
ExMem,
ExConst,
} ExType;
typedef struct Expr Expr;
struct Expr
{
ExType ty;
union {
Reg8 r8;
Reg32 r32;
Mem m;
u32int i;
};
};
typedef struct Inst Inst;
struct Inst
{
uint prefix; /* bitfield */
char *op; /* name of op */
int ne;
Expr e[3];
};
typedef struct Sib Sib;
struct Sib
{
int index;
int scale;
};
typedef union Yystype Yystype;
union Yystype
{
int i;
uint prefix;
char *s;
Reg8 r8;
Reg32 r32;
Inst inst;
Expr expr;
Mem mem;
Sib sib;
};
typedef struct AsmRule AsmRule;
struct AsmRule
{
char *op;
char *arg[4];
char *byte[4];
};
extern AsmRule *asmrule;
int nasmrule;
extern Yystype yylval;
extern int yylex(void);
extern char *atom(char*);
|