1 /* c2.h 4.8 85/01/16 */ 2 3 /* 4 * Header for object code improver 5 */ 6 7 #define JBR 1 8 #define CBR 2 9 #define JMP 3 10 #define LABEL 4 11 #define DLABEL 5 12 #define EROU 7 13 #define JSW 9 14 #define MOV 10 15 #define CLR 11 16 #define INC 12 17 #define DEC 13 18 #define TST 14 19 #define PUSH 15 20 #define CVT 16 21 #define CMP 17 22 #define ADD 18 23 #define SUB 19 24 #define BIT 20 25 #define BIC 21 26 #define BIS 22 27 #define XOR 23 28 #define COM 24 29 #define NEG 25 30 #define MUL 26 31 #define DIV 27 32 #define ASH 28 33 #define EXTV 29 34 #define EXTZV 30 35 #define INSV 31 36 #define CALLS 32 37 #define RET 33 38 #define CASE 34 39 #define SOB 35 40 #define TEXT 36 41 #define DATA 37 42 #define BSS 38 43 #define ALIGN 39 44 #define END 40 45 #define MOVZ 41 46 #define WGEN 42 47 #define SOBGEQ 43 48 #define SOBGTR 44 49 #define AOBLEQ 45 50 #define AOBLSS 46 51 #define ACB 47 52 #define MOVA 48 53 #define PUSHA 49 54 #define LGEN 50 55 #define SET 51 56 #define MOVC3 52 57 #define RSB 53 58 #define JSB 54 59 #define MFPR 55 60 #define MTPR 56 61 #define PROBER 57 62 #define PROBEW 58 63 #define LCOMM 59 64 #define COMM 60 65 66 #define JEQ 0 67 #define JNE 1 68 #define JLE 2 69 #define JGE 3 70 #define JLT 4 71 #define JGT 5 72 /* rearranged for unsigned branches so that jxxu = jxx + 6 */ 73 #define JLOS 8 74 #define JHIS 9 75 #define JLO 10 76 #define JHI 11 77 78 #define JBC 12 79 #define JBS 13 80 #define JLBC 14 81 #define JLBS 15 82 #define JBCC 16 83 #define JBSC 17 84 #define JBCS 18 85 #define JBSS 19 86 87 #define JCC 20 88 #define JCS 21 89 #define JVC 22 90 #define JVS 23 91 92 /* 93 * When the new opcodes were added, the relative 94 * ordering of the first 3 (those that are not float) 95 * had to be retained, so that other parts of the program 96 * were not broken. 97 * 98 * In addition, the distance between OP3 and OP2 must be preserved. 99 * The order of definitions above OP2 must not be changed. 100 * 101 * Note that these definitions DO NOT correspond to 102 * those definitions used in as, adb and sdb. 103 */ 104 #define BYTE 1 105 #define WORD 2 106 #define LONG 3 107 #define FFLOAT 4 108 #define DFLOAT 5 109 #define QUAD 6 110 #define OP2 7 111 #define OP3 8 112 #define OPB 9 113 #define OPX 10 114 #define GFLOAT 11 115 #define HFLOAT 12 116 #define OCTA 13 117 118 #define T(a,b) (a|((b)<<8)) 119 #define U(a,b) (a|((b)<<4)) 120 121 #define C2_ASIZE 128 122 123 struct optab { 124 char opstring[7]; 125 short opcode; 126 } optab[]; 127 128 struct node { 129 char op; 130 char subop; 131 short refc; 132 struct node *forw; 133 struct node *back; 134 struct node *ref; 135 char *code; 136 struct optab *pop; 137 long labno; 138 short seq; 139 }; 140 141 struct { 142 short combop; 143 }; 144 145 char line[512]; 146 struct node first; 147 char *curlp; 148 int nbrbr; 149 int nsaddr; 150 int redunm; 151 int iaftbr; 152 int njp1; 153 int nrlab; 154 int nxjump; 155 int ncmot; 156 int nrevbr; 157 int loopiv; 158 int nredunj; 159 int nskip; 160 int ncomj; 161 int nsob; 162 int nrtst; 163 int nbj; 164 int nfield; 165 166 int nchange; 167 int isn; 168 int debug; 169 char *lasta; 170 char *lastr; 171 char *firstr; 172 char revbr[]; 173 #define NREG 12 174 char *regs[NREG+5]; /* 0-11, 4 for operands, 1 for running off end */ 175 char conloc[C2_ASIZE]; 176 char conval[C2_ASIZE]; 177 char ccloc[C2_ASIZE]; 178 179 #define RT1 12 180 #define RT2 13 181 #define RT3 14 182 #define RT4 15 183 #define LABHS 127 184 185 struct { char lbyte; }; 186 187 char *copy(); 188 long getnum(); 189 struct node *codemove(); 190 struct node *insertl(); 191 struct node *nonlab(); 192