X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fmcs51%2Fgen.h;h=3cd811f20c981f4ee3006a658e3be4948e2ba352;hb=eae1bd2f705a2c61e143c539f8c4d1e9c2b4efe6;hp=643dfcc3679cb0c4d64e6eaf4cbe8660bc01d951;hpb=b97d9b48eabf4db7ba87d196dae0bb289454f10d;p=fw%2Fsdcc diff --git a/src/mcs51/gen.h b/src/mcs51/gen.h index 643dfcc3..3cd811f2 100644 --- a/src/mcs51/gen.h +++ b/src/mcs51/gen.h @@ -25,52 +25,64 @@ #ifndef SDCCGEN51_H #define SDCCGEN51_H -enum { +enum + { AOP_LIT = 1, - AOP_REG, AOP_DIR, - AOP_DPTR,AOP_R0,AOP_R1, - AOP_STK ,AOP_IMMD, AOP_STR, - AOP_CRY, AOP_ACC }; + AOP_REG, AOP_DIR, + AOP_DPTR, AOP_R0, AOP_R1, + AOP_STK, AOP_IMMD, AOP_STR, + AOP_CRY, AOP_ACC, AOP_DUMMY + }; /* type asmop : a homogenised type for all the different spaces an operand can be in */ -typedef struct asmop { - - short type ; /* can have values - AOP_LIT - operand is a literal value - AOP_REG - is in registers - AOP_DIR - direct just a name - AOP_DPTR - dptr contains address of operand - AOP_R0/R1 - r0/r1 contains address of operand - AOP_STK - should be pushed on stack this - can happen only for the result - AOP_IMMD - immediate value for eg. remateriazable - AOP_CRY - carry contains the value of this - AOP_STR - array of strings - AOP_ACC - result is in the acc:b pair - */ - 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 */ - regs *aop_ptr ; /* either -> to r0 or r1 */ - 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; +typedef struct asmop + { + + short type; + /* can have values + AOP_LIT - operand is a literal value + AOP_REG - is in registers + AOP_DIR - direct just a name + AOP_DPTR - dptr contains address of operand + AOP_R0/R1 - r0/r1 contains address of operand + AOP_STK - should be pushed on stack this + can happen only for the result + AOP_IMMD - immediate value for eg. remateriazable + AOP_CRY - carry contains the value of this + AOP_STR - array of strings + AOP_ACC - result is in the acc:b pair + AOP_DUMMY - read as 0, discard writes + */ + short coff; /* current offset */ + short size; /* total size */ + unsigned code:1; /* is in Code space */ + unsigned paged:1; /* in paged memory */ + unsigned short allocated; /* number of times allocated */ + union + { + value *aop_lit; /* if literal */ + regs *aop_reg[4]; /* array of registers */ + char *aop_dir; /* if direct */ + regs *aop_ptr; /* either -> to r0 or r1 */ + struct { + int from_cast_remat; /* cast remat created this : immd2 field used for highest order*/ + char *aop_immd1; /* if immediate others are implied */ + char *aop_immd2; /* cast remat will generate this */ + } aop_immd; + int aop_stk; /* stack offset when AOP_STK */ + char *aop_str[4]; /* just a string array containing the location */ + } + aopu; + } +asmop; void gen51Code (iCode *); +void mcs51_emitDebuggerSymbol (char *); -extern char *fReturn8051[]; -extern char *fReturn390[]; -extern unsigned fReturnSize; -extern char **fReturn; +//extern char *fReturn8051[]; +extern unsigned fReturnSizeMCS51; +//extern char **fReturn; #endif