|
|
1.1 ! root 1: /* ! 2: * This is the machine specific header file for the iAPX-86 compilers. ! 3: * It is used in both the SMALL and LARGE models of segmentation. ! 4: * It contains typedefs, register names and macros for all compiler phases. ! 5: * This one produces a COHERENT-resident !TINY UDI 80286 compiler ! 6: * which does both models and uses the 8087. ! 7: */ ! 8: #define DATE "1/22/87" /* Date */ ! 9: #define VERSMWC "V2.7.1" /* MWC version number */ ! 10: #define VERSINT "X314" /* Intel version number */ ! 11: ! 12: #define EATDOL 1 /* Eat '$' in identifiers? */ ! 13: #define IEEE 1 /* IEEE format? */ ! 14: #define DECVAX 0 /* DECVAX format? */ ! 15: #define MCFFP 0 /* Motorola fast floating point? */ ! 16: #define TINY 0 /* No code gen debug info? */ ! 17: #ifndef YATC ! 18: #define YATC 0 /* Not code table compile */ ! 19: #endif ! 20: #define RUNNING_LARGE 0 /* Long pointers? */ ! 21: #define SPLIT_CC1 0 /* CC1A-CC1B? */ ! 22: #define AS_FORMAT 0 /* Coherent/Rainbow .s format? */ ! 23: #define INTEL 1 /* Intel copyright? */ ! 24: #define OMF286 1 /* 286 object format? */ ! 25: #define TEMPBUF 0 /* Memory tempfile buffers? */ ! 26: ! 27: #define NDP 1 /* 8087? */ ! 28: #define EMULATION 0 /* Use M: links? */ ! 29: #define ONLYSMALL 0 /* Just SMALL model? */ ! 30: ! 31: /* ! 32: * Types. ! 33: */ ! 34: #define S8 0 /* Signed byte */ ! 35: #define U8 1 /* Unsigned byte */ ! 36: #define S16 2 /* Signed word */ ! 37: #define U16 3 /* Unsigned word */ ! 38: #define S32 4 /* Signed long */ ! 39: #define U32 5 /* Unsigned long */ ! 40: #define F32 6 /* Short floating point */ ! 41: #define F64 7 /* Long floating point */ ! 42: #define BLK 8 /* Block of bytes */ ! 43: #define FLD8 9 /* Field, byte wide */ ! 44: #define FLD16 10 /* Field, word wide */ ! 45: #define LPTR 11 /* Large (2 word) pointer */ ! 46: #define LPTB 12 /* Large (2 word) pointer to BLK */ ! 47: #define SPTR 13 /* Small (1 word) pointer */ ! 48: #define SPTB 14 /* Small (1 word) pointer to BLK */ ! 49: ! 50: #define TRUTH S16 /* Type used for truth values */ ! 51: #define LOFS LPTR /* Large, offset LEAF type */ ! 52: #define SOFS SPTR /* Small, offset LEAF type */ ! 53: #define IVAL_T S16 /* Type for ival_t con */ ! 54: #define LVAL_T S32 /* Type for lval_t con */ ! 55: #define DVAL_T F64 /* Type for dval_t con */ ! 56: #define NBPBYTE 8 /* # of bits in a "byte" */ ! 57: #define NBPSTRG 8 /* Structure granularity */ ! 58: ! 59: /* ! 60: * For each machine type there is ! 61: * a flag bit type. ! 62: */ ! 63: #define FS8 01 ! 64: #define FU8 02 ! 65: #define FS16 04 ! 66: #define FU16 010 ! 67: #define FS32 020 ! 68: #define FU32 040 ! 69: #define FF32 0100 ! 70: #define FF64 0200 ! 71: #define FBLK 0400 ! 72: #define FFLD8 01000 ! 73: #define FFLD16 02000 ! 74: #define FLPTR 04000 ! 75: #define FLPTB 010000 ! 76: #define FSPTR 020000 ! 77: #define FSPTB 040000 ! 78: ! 79: /* ! 80: * Allocation types. ! 81: */ ! 82: #ifdef vax ! 83: typedef short ival_t; /* 16 bits */ ! 84: typedef int lval_t; /* 32 bits */ ! 85: #else ! 86: typedef int ival_t; /* ints */ ! 87: typedef long lval_t; /* longs */ ! 88: #endif ! 89: typedef char dval_t[8]; /* doubles */ ! 90: ! 91: /* ! 92: * Limits. ! 93: */ ! 94: #define MAXIV 32767L /* Max integer */ ! 95: #define MAXMEMB MAXIV /* Max struct/union member offset */ ! 96: #define MAXUV 65535L /* Max unsigned integer */ ! 97: #define MAXESIZE MAXUV /* Max struct/union/array size */ ! 98: #define MAXUCE 255 /* Max unsigned char enumeration */ ! 99: #define UIMASK 037777600000L /* Unsigned long check mask */ ! 100: #define SIMASK 037777700000L /* Signed long check mask */ ! 101: #define ASMASK 0177777L /* Address space mask */ ! 102: ! 103: /* ! 104: * Registers. ! 105: * This list includes the machine's ! 106: * actual registers, some registers that are ! 107: * only given names for the benefit of the ! 108: * code output routines, and the pseudo registers ! 109: * used by the code generator. ! 110: */ ! 111: #define AX 0 ! 112: #define DX 1 ! 113: #define BX 2 ! 114: #define CX 3 ! 115: ! 116: #define SI 4 ! 117: #define DI 5 ! 118: #define SP 6 ! 119: #define BP 7 ! 120: ! 121: #define FPAC 8 ! 122: ! 123: #define ES 9 ! 124: #define CS 10 ! 125: #define SS 11 ! 126: #define DS 12 ! 127: ! 128: #define DXAX 13 ! 129: #define CXBX 14 ! 130: ! 131: #define SSSP 15 ! 132: #define SSBP 16 ! 133: ! 134: #define ESAX 17 ! 135: #define ESBX 18 ! 136: #define ESSI 19 ! 137: #define ESDI 20 ! 138: ! 139: #define DSAX 21 ! 140: #define DSBX 22 ! 141: #define DSSI 23 ! 142: #define DSDI 24 ! 143: ! 144: #define AL 25 ! 145: #define BL 26 ! 146: #define CL 27 ! 147: #define DL 28 ! 148: #define AH 29 ! 149: #define BH 30 ! 150: #define CH 31 ! 151: #define DH 32 ! 152: ! 153: #define NONE 33 ! 154: #define ANYR 34 ! 155: #define ANYL 35 ! 156: #define PAIR 36 ! 157: #define TEMP 37 ! 158: #define LOTEMP 38 ! 159: #define HITEMP 39 ! 160: ! 161: #define NRREG 25 /* Number of real regs */ ! 162: #define NREG 40 /* Number of regs */ ! 163: #define FRREG AX ! 164: ! 165: #define BAX 01 ! 166: #define BDX 02 ! 167: #define BBX 04 ! 168: #define BCX 010 ! 169: #define BSI 020 ! 170: #define BDI 040 ! 171: #define BSP 0100 ! 172: #define BBP 0200 ! 173: #define BFPAC 0400 ! 174: #define BES 01000 ! 175: #define BCS 02000 ! 176: #define BSS 04000 ! 177: #define BDS 010000 ! 178: ! 179: /* ! 180: * Definitions for the "a_mode" ! 181: * field of an AFIELD object. Some bits are ! 182: * used only by the peephole optimizer routines in ! 183: * the "mregstate" and "sregstate" tables. ! 184: */ ! 185: #define A_REGM 0x000F /* Register code, etc */ ! 186: #define A_AMOD 0x00F0 /* Address mode */ ! 187: #define A_PREFX 0x0F00 /* Escape prefix needed */ ! 188: #define A_EA 0x1000 /* Flag for peephole; effective address */ ! 189: #define A_OFFS 0x2000 /* Flag for getfield; offset present */ ! 190: #define A_LID 0x4000 /* Flag for getfield; local id present */ ! 191: #define A_GID 0x8000 /* Flag for getfield; global id present */ ! 192: ! 193: #define A_NONE 0 /* General "none" value */ ! 194: ! 195: #define A_BR (1<<4) /* Byte register */ ! 196: #define A_WR (2<<4) /* Word register */ ! 197: #define A_SR (3<<4) /* Segment register */ ! 198: #define A_IMM (4<<4) /* Immediate */ ! 199: #define A_DIR (5<<4) /* Direct */ ! 200: #define A_X (6<<4) /* Indexed */ ! 201: ! 202: #define A_ES (1<<8) /* ES: needed */ ! 203: #define A_CS (2<<8) /* CS: needed */ ! 204: #define A_SS (3<<8) /* SS: needed */ ! 205: #define A_DS (4<<8) /* DS: needed */ ! 206: ! 207: #define A_XSI (A_X|0x04) /* [si] */ ! 208: #define A_XDI (A_X|0x05) /* [di] */ ! 209: #define A_XBP (A_X|0x06) /* [bp] */ ! 210: #define A_XBX (A_X|0x07) /* [bx] */ ! 211: ! 212: #define A_RAX (A_WR|0x00) /* ax */ ! 213: #define A_RCX (A_WR|0x01) /* cx */ ! 214: #define A_RDX (A_WR|0x02) /* dx */ ! 215: #define A_RBX (A_WR|0x03) /* bx */ ! 216: #define A_RSP (A_WR|0x04) /* sp */ ! 217: #define A_RBP (A_WR|0x05) /* bp */ ! 218: #define A_RSI (A_WR|0x06) /* si */ ! 219: #define A_RDI (A_WR|0x07) /* di */ ! 220: ! 221: #define A_RAL (A_BR|0x00) /* al */ ! 222: #define A_RCL (A_BR|0x01) /* cl */ ! 223: #define A_RDL (A_BR|0x02) /* dl */ ! 224: #define A_RBL (A_BR|0x03) /* bl */ ! 225: #define A_RAH (A_BR|0x04) /* ah */ ! 226: #define A_RCH (A_BR|0x05) /* ch */ ! 227: #define A_RDH (A_BR|0x06) /* dh */ ! 228: #define A_RBH (A_BR|0x07) /* bh */ ! 229: ! 230: #define A_RES (A_SR|0x00) /* es */ ! 231: #define A_RCS (A_SR|0x01) /* cs */ ! 232: #define A_RSS (A_SR|0x02) /* ss */ ! 233: #define A_RDS (A_SR|0x03) /* ds */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.