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