|
|
1.1 ! root 1: /* c2.h 4.10 85/08/22 */ ! 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: union { ! 130: struct { ! 131: char op_op; ! 132: char op_subop; ! 133: } un_op; ! 134: short un_combop; ! 135: } op_un; ! 136: short refc; ! 137: struct node *forw; ! 138: struct node *back; ! 139: struct node *ref; ! 140: char *code; ! 141: struct optab *pop; ! 142: long labno; ! 143: short seq; ! 144: }; ! 145: ! 146: #define op op_un.un_op.op_op ! 147: #define subop op_un.un_op.op_subop ! 148: #define combop op_un.un_combop ! 149: ! 150: char line[512]; ! 151: struct node first; ! 152: char *curlp; ! 153: int nbrbr; ! 154: int nsaddr; ! 155: int redunm; ! 156: int iaftbr; ! 157: int njp1; ! 158: int nrlab; ! 159: int nxjump; ! 160: int ncmot; ! 161: int nrevbr; ! 162: int loopiv; ! 163: int nredunj; ! 164: int nskip; ! 165: int ncomj; ! 166: int nsob; ! 167: int nrtst; ! 168: int nbj; ! 169: int nfield; ! 170: ! 171: int nchange; ! 172: long isn; ! 173: int debug; ! 174: char revbr[]; ! 175: #define NREG 12 ! 176: char *regs[NREG+5]; /* 0-11, 4 for operands, 1 for running off end */ ! 177: char conloc[C2_ASIZE]; ! 178: char conval[C2_ASIZE]; ! 179: char ccloc[C2_ASIZE]; ! 180: ! 181: #define RT1 12 ! 182: #define RT2 13 ! 183: #define RT3 14 ! 184: #define RT4 15 ! 185: #define LABHS 127 ! 186: ! 187: char *copy(); ! 188: long getnum(); ! 189: struct node *codemove(); ! 190: struct node *insertl(); ! 191: struct node *nonlab(); ! 192: ! 193: #ifdef notdef ! 194: #define decref(p) \ ! 195: ((p) && --(p)->refc <= 0 ? nrlab++, delnode(p) : 0) ! 196: #define delnode(p) \ ! 197: ((p)->back->forw = (p)->forw, (p)->forw->back = (p)->back) ! 198: #endif notdef ! 199: ! 200: char *xalloc(); ! 201: extern char *newa; ! 202: extern char *lasta; ! 203: extern char *lastr; ! 204: #define XALIGN(n) \ ! 205: (((n)+(sizeof (char *) - 1)) & ~(sizeof (char *) - 1)) ! 206: #define alloc(n) \ ! 207: ((struct node *) \ ! 208: ((newa = lasta) + (n) > lastr ? \ ! 209: xalloc(n) : \ ! 210: (lasta += XALIGN(n), newa)))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.