1 /* gencode.h - code generation for bcc */ 2 3 /* Copyright (C) 1992 Bruce Evans */ 4 5 #ifdef MC6809 6 # define CANABXCUTOFF 7 /* favour ABX over MUL before this */ 7 #endif 8 #define EXPRLEVEL 126 /* level for symbols in exptree, > real levs */ 9 #define OFFKLUDGELEVEL 127 /* level for expr sym with offset from name */ 10 #define OPERANDSEPARATOR ',' /* char separating operands */ 11 #define OPSEPARATOR '\t' /* char separating op string and operand */ 12 13 EXTERN uoffset_T arg1size; /* size of 1st arg to function */ 14 /* zero after allocation of 1st arg */ 15 EXTERN store_pt callee1mask; /* calleemask with doubleregs masked if nec */ 16 EXTERN uoffset_T dataoffset; /* amount of initialized data so far */ 17 #ifdef DBNODE 18 EXTERN bool_t dbnodeon; /* nonzero to print debugging messages */ 19 /* depends on zero init */ 20 #endif 21 #ifdef FRAMEPOINTER 22 EXTERN store_pt framelist; /* bit pattern for frame and saved regs */ 23 EXTERN store_pt frame1list; /* framelist with doubleregs masked if nec */ 24 EXTERN offset_T framep; /* hardware relative frame ptr */ 25 #endif 26 EXTERN uoffset_T func1saveregsize; /* choice of next two values */ 27 EXTERN uoffset_T funcdsaveregsize; /* funcsaveregsize adjusted for doubles */ 28 EXTERN uoffset_T funcsaveregsize; /* tot size of framelist/calleemask regs */ 29 #ifdef I80386 30 EXTERN bool_t i386_32; /* nonzero to generate 386 32 bit code */ 31 /* depends on zero init */ 32 #endif 33 #ifdef DYNAMIC_LONG_ORDER 34 EXTERN bool_t long_big_endian; /* nonzero if high long word is first */ 35 /* depends on zero init */ 36 #endif 37 EXTERN offset_T lowsp; /* low water sp (collects locals in switch) */ 38 #ifdef POSINDEPENDENT 39 EXTERN bool_t posindependent; /* nonzero to generate pos-independent code */ 40 /* depends on zero init */ 41 #endif 42 EXTERN bool_t printf_fp; /* nonzero if *printf called with FP arg */ 43 EXTERN bool_t regarg; /* nonzero to show unloaded register arg */ 44 /* depends on zero init */ 45 EXTERN store_t reguse; /* registers in use */ 46 EXTERN bool_t scanf_fp; /* nonzero if *scanf called with ptr-to-FP */ 47 EXTERN offset_T softsp; /* software sp (leads sp during declares) */ 48 EXTERN offset_T sp; /* hardware relative stack ptr */ 49 /* depends on zero init */ 50 EXTERN store_t regfuse; /* registers in use in function. */ 51 #ifdef FRAMEPOINTER 52 EXTERN bool_t stackarg; /* nonzero to show function has arg on stack */ 53 #endif 54 EXTERN struct switchstruct *switchnow; /* currently active switch */ 55 /* depends on NULL init */ 56 EXTERN bool_t optimise; /* nonzero to add optimisation code */ 57 58 /* variables to be initialised to nonzero */ 59 60 extern store_pt allindregs; /* mask (in) for index registers */ 61 extern store_pt allregs; /* mask (in) for registers */ 62 extern bool_t arg1inreg; /* nonzero to pass 1st arg in reg */ 63 extern store_pt calleemask; /* mask (in) for regs to be saved by callee */ 64 extern bool_t callersaves; /* nonzero to make caller save regs */ 65 extern char *callstring; /* opcode string for call */ 66 extern store_pt doubleargregs; /* mask (in) for regs for 1st arg if double */ 67 extern store_pt doubleregs; /* mask (in) for regs to temp contain double */ 68 extern store_pt doublreturnregs; /* mask (in) for regs for returning double */ 69 extern offset_T jcclonger; /* amount jcc long jumps are longer */ 70 extern offset_T jmplonger; /* amount long jumps is longer */ 71 extern char *jumpstring; /* opcode string for jump */ 72 extern char *regpulllist; /* reg names and sizes (0 store_t bit first) */ 73 extern char *regpushlist; /* reg names and sizes (0 store_t bit last) */ 74 extern store_pt regregs; /* mask (in) for regs which can be reg vars */ 75 76 /* register names */ 77 78 extern char *acclostr; 79 extern char *accumstr; 80 extern char *badregstr; 81 #ifdef I8088 82 extern char *dreg1str; 83 extern char *dreg1bstr; 84 extern char *dreg2str; 85 #endif 86 extern char *ireg0str; 87 extern char *ireg1str; 88 extern char *ireg2str; 89 extern char *localregstr; 90 #ifdef I8088 91 extern char *stackregstr; 92 #endif 93 94 /* register sizes */ 95 96 extern uoffset_T accregsize; 97 #ifdef FRAMEPOINTER 98 extern uoffset_T frameregsize; 99 #endif 100 extern uoffset_T maxregsize; 101 extern uoffset_T opregsize; 102 extern uoffset_T pshregsize; 103 extern uoffset_T returnadrsize; 104