X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fz80%2Fgen.h;h=becc53adba735c71d4474dbc1703fdaca2f4e166;hb=26daa5ec1aff94ebbe55715797ea92c0332b51b7;hp=b312bb4c31bc40b5978810586f750e398951976f;hpb=2fefb198f01957f9b60c8e206c2490a8fa14f3f3;p=fw%2Fsdcc diff --git a/src/z80/gen.h b/src/z80/gen.h index b312bb4c..becc53ad 100644 --- a/src/z80/gen.h +++ b/src/z80/gen.h @@ -22,54 +22,70 @@ what you give them. Help stamp out software-hoarding! -------------------------------------------------------------------------*/ -#ifndef SDCCGEN51_H -#define SDCCGEN51_H +#ifndef Z80GEN_H +#define Z80GEN_H -typedef enum { +typedef enum + { AOP_INVALID, /* Is a literal */ AOP_LIT = 1, /* Is in a register */ - AOP_REG, + AOP_REG, /* Is in direct space */ AOP_DIR, /* SFR space ($FF00 and above) */ AOP_SFR, /* Is on the stack */ - AOP_STK , + AOP_STK, /* Is an immediate value */ - AOP_IMMD, + AOP_IMMD, /* Is a string (?) */ AOP_STR, /* Is in the carry register */ - AOP_CRY, + AOP_CRY, /* Is pointed to by IY */ AOP_IY, /* Is pointed to by HL */ AOP_HL, /* Is in A */ - AOP_ACC -} AOP_TYPE; + AOP_ACC, + /* Is in H and L */ + AOP_HLREG, + /* Simple literal. */ + AOP_SIMPLELIT, + /* Is in the extended stack pointer (IY on the Z80) */ + AOP_EXSTK, + /* Is referenced by a pointer in a register pair. */ + AOP_PAIRPTR + } +AOP_TYPE; /* type asmop : a homogenised type for all the different spaces an operand can be in */ -typedef struct asmop { +typedef struct asmop + { AOP_TYPE type; - short coff ; /* current offset */ - short size ; /* total size */ - unsigned code :1 ; /* is in Code space */ - unsigned paged:1 ; /* in paged memory */ - unsigned freed:1 ; /* already freed */ - union { - value *aop_lit ; /* if literal */ - regs *aop_reg[4]; /* array of registers */ - char *aop_dir ; /* if direct */ - char *aop_immd; /* if immediate others are implied */ - int aop_stk ; /* stack offset when AOP_STK */ - char *aop_str[4]; /* just a string array containing the location */ - } aopu; -} asmop; + short coff; /* current offset */ + short size; /* total size */ + bool code; /* is in Code space */ + bool paged; /* in paged memory */ + bool freed; /* already freed */ + union + { + value *aop_lit; /* if literal */ + regs *aop_reg[4]; /* array of registers */ + char *aop_dir; /* if direct */ + char *aop_immd; /* if immediate others are implied */ + int aop_stk; /* stack offset when AOP_STK */ + const char *aop_str[4]; /* just a string array containing the location */ + unsigned long aop_simplelit; /* Just the value. */ + int aop_pairId; /* The pair ID */ + } + aopu; + } +asmop; void genZ80Code (iCode *);