|
|
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 native !TINY compiler
6: * which does only SMALL models and uses the 8087.
7: */
8: #define DATE "1/29/87" /* Date */
9: #define VERSMWC "V2.7.2" /* MWC version number */
10: #define VERSINT "X315" /* Intel version number */
11:
12: #define EATDOL 0 /* 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 1 /* Coherent/Rainbow .s format? */
23: #define INTEL 0 /* Intel copyright? */
24: #define OMF286 0 /* 286 object format? */
25: #define TEMPBUF 0 /* Memory tempfile buffers? */
26:
27: #define NDP 1 /* 8087? */
28: #define EMUFIXUPS 0 /* Use M: 8087 emulation fixups? */
29: #define ONLYSMALL 1 /* 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.