|
|
1.1 root 1: /*
2: * This header file defines everything which
3: * may be shared between passes of the compiler.
4: * This includes limits, types,
5: * the opcodes, both in the scratch files and
6: * in trees, that are used by all parts of the C compiler
7: * and any other compilers that use the C compiler back
8: * end (coder and optimizer).
9: *
10: * Limits.
11: */
12: #define NARGS 32 /* Max. args in a function */
13: #define NCSYMB 128 /* Max symbol */
14: #define NMNAME 64 /* Longest module name */
15:
16: /*
17: * Scratch file operators.
18: */
19: #define NOTUSED 0 /* Pads block in RSX */
20: #define FNAME 1 /* File name */
21: #define LLABEL 2 /* Local label */
22: #define FINISH 3 /* Soft end of file */
23: #define GLABEL 4 /* Global label */
24: #define SLABEL 5 /* Static label */
25: #define BLOCK 6 /* Block of bytes */
26: #define PROLOG 7 /* Function prolog */
27: #define EPILOG 8 /* Function epilog */
28: #define LLLINK 9 /* Switch table link */
29: #define AUTOS 10 /* Auto adjust */
30: #define JUMP 11 /* Jump */
31: #define CODE 12 /* Machine instruction */
32: #define LINE 13 /* Line # */
33: #define REXPR 14 /* Return expression */
34: #define EEXPR 15 /* Effect expression */
35: #define SEXPR 16 /* Switch expression */
36: #define SBODY 17 /* Switch body */
37: #define IEXPR 18 /* Init. expression */
38: #define IBLOCK 19 /* Init. absolute block */
39: #define ALIGN 20 /* Allignment */
40: #define TEXPR 21 /* True jump expression */
41: #define FEXPR 22 /* False jump expression */
42: #define ENTER 23 /* Enter an area */
43: #define MNAME 24 /* Module name */
44: #define COMM 25 /* Common in D space */
45: #define DLOCAT 26 /* Debug label location */
46: #define DLABEL 27 /* Debug label item */
47: /* Segment guess, withdrawn */
48: #define UREFER 29 /* Undefined reference for floating printf */
49:
50: /*
51: * Symbolic segments. The "SANY" code is
52: * never used in an "ENTER"; it only appears as a
53: * segment residence flag in an identifier ("LID" or
54: * "GID") node.
55: */
56: #define SCODE 0 /* Code */
57: #define SLINK 1 /* Links et al; can be code */
58: #define SPURE 2 /* Pure data */
59: #define SSTRN 3 /* Strings */
60: #define SDATA 4 /* General data */
61: #define SBSS 5 /* Uninitialized data */
62: #define SANY 6 /* Any segment */
63: #define SSTACK 7 /* Stack segment */
64: #define SALIEN 8 /* Some other language */
65: #define SDBG 9 /* Debugging information */
66: #define SSYM 10 /* Symbol declarations */
67:
68: #define NSEG 11 /* Number of segments */
69:
70: /*
71: * Tree operators.
72: * Operators are divided into
73: * little subranges.
74: * 0<=x<=9 Machine independent leaf.
75: * 10<=x<=19 Machine specific leaf.
76: * 20<=x<=79 Machine independent operator.
77: * 80<=x<=99 Machine specific operator.
78: * 100 up. Keywords, etc. for a parser.
79: * No tree passed to the code generator
80: * can contain a machine specific
81: * operator.
82: */
83: #define MILBASE 0 /* Machine independent leaf base */
84: #define MDLBASE 15 /* Machine dependent leaf base */
85: #define MIOBASE 20 /* Machine independent operator base */
86: #define MDOBASE 80 /* Machine dependent operator base */
87: #define ETCBASE 100 /* Misc. base */
88:
89: #define NIL 0 /* End of tree */
90: #define ICON 1 /* Integer constant */
91: #define LCON 2 /* Long constant */
92: #define DCON 3 /* Double constant */
93: #define LID 5 /* Local id */
94: #define GID 6 /* Global id */
95: #define REG 7 /* Register */
96: #define AID 8 /* Automatic id */
97: #define PID 9 /* Parameter id */
98: #define ZCON 10 /* Sizeof constant */
99:
100: #define ADD 20 /* + */
101: #define SUB 21 /* - */
102: #define MUL 22 /* * */
103: #define DIV 23 /* / */
104: #define REM 24 /* % */
105: #define AND 25 /* & */
106: #define OR 26 /* | */
107: #define XOR 27 /* ^ */
108: #define SHL 28 /* << */
109: #define SHR 29 /* >> */
110:
111: #define AADD 30 /* += */
112: #define ASUB 31 /* -= */
113: #define AMUL 32 /* *= */
114: #define ADIV 33 /* /= */
115: #define AREM 34 /* %= */
116: #define AAND 35 /* &= */
117: #define AOR 36 /* |= */
118: #define AXOR 37 /* ^= */
119: #define ASHL 38 /* <<= */
120: #define ASHR 39 /* >>= */
121:
122: #define EQ 40 /* == */
123: #define NE 41 /* != */
124: #define GT 42 /* > */
125: #define GE 43 /* >= */
126: #define LE 44 /* <= */
127: #define LT 45 /* < */
128: #define UGT 46 /* > if unsigned */
129: #define UGE 47 /* >= if unsigned */
130: #define ULE 48 /* <= if unsigned */
131: #define ULT 49 /* < if unsigned */
132:
133: #define STAR 50 /* Indirection */
134: #define ADDR 51 /* Address of */
135: #define NEG 52 /* - */
136: #define COM 53 /* ~ */
137: #define NOT 54 /* ! */
138: #define QUEST 55 /* ? */
139: #define COLON 56 /* : */
140: #define INCBEF 57 /* ++ prefix */
141: #define DECBEF 58 /* -- prefix */
142: #define INCAFT 59 /* ++ postfix */
143: #define DECAFT 60 /* -- postfix */
144: #define COMMA 61 /* , */
145: #define CALL 62 /* Call of function */
146: #define ANDAND 63 /* && */
147: #define OROR 64 /* || */
148: #define CAST 65 /* Type cast */
149: #define CONVERT 66 /* Conversion */
150: #define FIELD 67 /* Field op */
151: #define SIZEOF 68 /* sizeof */
152: #define ASSIGN 69 /* = */
153: #define NOP 70 /* Drain */
154: #define INIT 71 /* Init. type */
155: #define ARGLST 72 /* Link for arglist */
156: #define LEAF 73 /* Leaf node */
157: #define FIXUP 74 /* Table fix up */
158: #define BLKMOVE 75 /* Block move operation */
159: #define POS 76 /* Unary plus */
160:
161: /*
162: * Special names for Types, Dims, and Storage classes
163: * for use in passing debugger type information between passes.
164: */
165: #define DT_NONE 0 /* No type (yet) */
166: #define DT_CHAR 1 /* Char */
167: #define DT_UCHAR 2 /* Unsigned char */
168: #define DT_SHORT 3 /* Short */
169: #define DT_USHORT 4 /* Unsigned short */
170: #define DT_INT 5 /* Int */
171: #define DT_UINT 6 /* Unsigned int */
172: #define DT_LONG 7 /* Long */
173: #define DT_ULONG 8 /* Unsigned long */
174: #define DT_FLOAT 9 /* Float */
175: #define DT_DOUBLE 10 /* Double */
176: #define DT_VOID 11 /* void */
177: #define DT_STRUCT 12 /* Struct */
178: #define DT_UNION 13 /* Union */
179: #define DT_ENUM 14 /* Enumeration */
180:
181: #define DD_PTR 15 /* Pointer */
182: #define DD_FUNC 16 /* Function returning */
183: #define DD_ARRAY 17 /* Array */
184:
185: #define DX_MEMBS 18 /* Member list */
186: #define DX_NAME 19 /* Named type */
187:
188: /*
189: * Subranges denote associated information:
190: * SEX-LAB only name string.
191: * AUTO-CALL name and (int) value.
192: * MOS-MOU name, width, offset, value.
193: */
194: #define DC_SEX 21 /* Static external */
195: #define DC_GDEF 22 /* Global def. */
196: #define DC_GREF 23 /* Global ref. */
197: #define DC_TYPE 24 /* Typedef name */
198: #define DC_STAG 25 /* Structure tag */
199: #define DC_UTAG 26 /* Union tag */
200: #define DC_ETAG 27 /* Enumeration tag */
201: #define DC_FILE 28 /* Source file name */
202: #define DC_LINE 29 /* Line number */
203: #define DC_LAB 30 /* Label */
204:
205: #define DC_AUTO 31 /* Auto */
206: #define DC_PAUTO 32 /* Parametric auto */
207: #define DC_REG 33 /* Register */
208: #define DC_PREG 34 /* Parametric register */
209: #define DC_SIN 35 /* Static internal */
210: #define DC_MOE 36 /* Member of enumeration */
211: #define DC_CALL 37 /* Function call */
212:
213: #define DC_MOS 38 /* Member of structure */
214: #define DC_MOU 39 /* Member of union */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.