Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
718 | jacekm | 1 | /* |
2 | ** CC.H -- Symbol Definitions for Small-C compiler. |
||
3 | */ |
||
4 | |||
5 | #ifdef _MSC_VER |
||
6 | #define YES 1 /* true */ |
||
7 | #define NO 0 /* false */ |
||
8 | #define CR 13 /* ASCII carriage return */ |
||
9 | #define LF 10 /* ASCII line feed */ |
||
10 | #define BELL 7 /* ASCII bell */ |
||
11 | #define SPACE ' ' /* ASCII space */ |
||
12 | #define NEWLINE LF /* Small C newline character */ |
||
13 | |||
14 | #endif |
||
15 | |||
16 | /* |
||
17 | ** size of 'int' |
||
18 | */ |
||
19 | |||
20 | #define INT32 /* if #defined int = 32 bits, else 16 */ |
||
21 | |||
22 | /* |
||
23 | ** ALIGNMENT |
||
24 | */ |
||
25 | |||
26 | #define ALIGN 4 |
||
27 | |||
28 | |||
29 | /* |
||
30 | ** machine dependent parameters |
||
31 | */ |
||
32 | #define BPD 4 /* bytes per dword */ |
||
33 | #define LBPD 2 /* log2(BPD) */ |
||
34 | #define BPW 2 /* bytes per word */ |
||
35 | #define LBPW 1 /* log2(BPW) */ |
||
36 | #define SBPC 1 /* stack bytes per character */ |
||
37 | #define ERRCODE 7 /* op sys return code */ |
||
38 | #define INTSIZE 4 |
||
39 | |||
40 | /* |
||
41 | ** symbol table format |
||
42 | */ |
||
43 | #define IDENT 0 |
||
44 | #define TYPE 1 |
||
45 | #define CLASS 2 |
||
46 | #define SIZE 3 |
||
47 | #define OFFSET 5+2 |
||
48 | #define NAME (7+4) |
||
49 | |||
50 | #define SYMAVG (12+4) |
||
51 | #define SYMMAX (16+4) |
||
52 | |||
53 | /* |
||
54 | ** symbol table parameters |
||
55 | */ |
||
56 | #define NUMLOCS 25 |
||
57 | #define STARTLOC symtab |
||
58 | #define ENDLOC (symtab+NUMLOCS*SYMAVG) |
||
59 | #define NUMGLBS 200 |
||
60 | #define STARTGLB ENDLOC |
||
61 | #define ENDGLB (ENDLOC+(NUMGLBS-1)*SYMMAX) |
||
62 | #define SYMTBSZ /*3050*/ (NUMLOCS*SYMAVG + NUMGLBS*SYMMAX) |
||
63 | |||
64 | /* |
||
65 | ** system wide name size (for symbols) |
||
66 | */ |
||
67 | #define NAMESIZE 9 |
||
68 | #define NAMEMAX 8 |
||
69 | |||
70 | /* |
||
71 | ** values for "IDENT" |
||
72 | */ |
||
73 | #define LABEL 0 |
||
74 | #define VARIABLE 1 |
||
75 | #define ARRAY 2 |
||
76 | #define POINTER 3 |
||
77 | #define FUNCTION 4 |
||
78 | |||
79 | #define PTRSIZE INTSIZE /* Size of pointer (must match an int!) */ |
||
80 | |||
81 | |||
82 | /* |
||
83 | ** values for "TYPE" |
||
84 | ** high order 14 bits give length of object |
||
85 | ** low order 2 bits make type unique within length |
||
86 | */ |
||
87 | /* LABEL 0 */ |
||
88 | #define CHR ( 1 << 2) |
||
89 | #define SHORT (BPW << 2) |
||
90 | #define INT (INTSIZE << 2) |
||
91 | #define UCHR (( 1 << 2) + 1) |
||
92 | #define USHORT ((BPW << 2) + 1) |
||
93 | #define UINT ((INTSIZE << 2) + 1) |
||
94 | #define UNSIGNED 1 |
||
95 | |||
96 | /* |
||
97 | ** values for "CLASS" |
||
98 | */ |
||
99 | /* LABEL 0 */ |
||
100 | #define AUTOMATIC 1 |
||
101 | #define STATIC 2 |
||
102 | #define EXTERNAL 3 |
||
103 | #define AUTOEXT 4 |
||
104 | |||
105 | /* |
||
106 | ** segment types |
||
107 | */ |
||
108 | #define DATASEG 1 |
||
109 | #define CODESEG 2 |
||
110 | |||
111 | /* |
||
112 | ** "switch" table |
||
113 | */ |
||
114 | #define SWSIZ (2*BPW) |
||
115 | #define SWTABSZ (90*SWSIZ) |
||
116 | |||
117 | /* |
||
118 | ** "while" queue |
||
119 | */ |
||
120 | #define WQTABSZ 30 |
||
121 | #define WQSIZ 3 |
||
122 | #define WQMAX (wq+WQTABSZ-WQSIZ) |
||
123 | |||
124 | /* |
||
125 | ** field offsets in "while" queue |
||
126 | */ |
||
127 | #define WQSP 0 |
||
128 | #define WQLOOP 1 |
||
129 | #define WQEXIT 2 |
||
130 | |||
131 | /* |
||
132 | ** literal pool |
||
133 | */ |
||
134 | #define LITABSZ 3000 |
||
135 | #define LITMAX (LITABSZ-1) |
||
136 | |||
137 | /* |
||
138 | ** input line |
||
139 | */ |
||
140 | #define LINEMAX 127 |
||
141 | #define LINESIZE 128 |
||
142 | |||
143 | /* |
||
144 | ** entries in staging buffer |
||
145 | */ |
||
146 | #define STAGESIZE 200 |
||
147 | |||
148 | /* |
||
149 | ** macro (#define) pool |
||
150 | */ |
||
151 | #define MACNBR 300 |
||
152 | #define MACNSIZE (MACNBR*(NAMESIZE+2)) |
||
153 | #define MACNEND (macn+MACNSIZE) |
||
154 | #define MACQSIZE (MACNBR*7) |
||
155 | #define MACMAX (MACQSIZE-1) |
||
156 | |||
157 | /* |
||
158 | ** statement types |
||
159 | */ |
||
160 | #define STIF 1 |
||
161 | #define STWHILE 2 |
||
162 | #define STRETURN 3 |
||
163 | #define STBREAK 4 |
||
164 | #define STCONT 5 |
||
165 | #define STASM 6 |
||
166 | #define STEXPR 7 |
||
167 | #define STDO 8 |
||
168 | #define STFOR 9 |
||
169 | #define STSWITCH 10 |
||
170 | #define STCASE 11 |
||
171 | #define STDEF 12 |
||
172 | #define STGOTO 13 |
||
173 | #define STLABEL 14 |
||
174 | |||
175 | /* |
||
176 | ** p-code symbols |
||
177 | ** |
||
178 | ** legend: |
||
179 | ** 1 = primary register (pr in comments) |
||
180 | ** 2 = secondary register (sr in comments) |
||
181 | ** b = byte |
||
182 | ** f = jump on false condition |
||
183 | ** l = current literal pool label number |
||
184 | ** m = memory reference by label |
||
185 | ** n = numeric constant |
||
186 | ** p = indirect reference thru pointer in sr |
||
187 | ** r = repeated r times |
||
188 | ** s = stack frame reference |
||
189 | ** u = unsigned |
||
190 | ** w = word |
||
191 | ** _ (tail) = another p-code completes this one |
||
192 | */ |
||
193 | |||
194 | /* compiler-generated */ |
||
195 | #define ADD12 1 /* add sr to pr */ |
||
196 | #define ADDSP 2 /* add to stack pointer */ |
||
197 | #define AND12 3 /* AND sr to pr */ |
||
198 | #define ANEG1 4 /* arith negate pr */ |
||
199 | #define ARGCNTn 5 /* pass arg count to function */ |
||
200 | #define ASL12 6 /* arith shift left sr by pr into pr */ |
||
201 | #define ASR12 7 /* arith shift right sr by pr into pr */ |
||
202 | #define CALL1 8 /* call function thru pr */ |
||
203 | #define CALLm 9 /* call function directly */ |
||
204 | #define BYTE_ 10 /* define bytes (part 1) */ |
||
205 | #define BYTEn 11 /* define byte of value n */ |
||
206 | #define BYTEr0 12 /* define r bytes of value 0 */ |
||
207 | #define COM1 13 /* ones complement pr */ |
||
208 | #define DBL1 14 /* double pr */ |
||
209 | #define DBL2 15 /* double sr */ |
||
210 | #define DIV12 16 /* div pr by sr */ |
||
211 | #define DIV12u 17 /* div pr by sr unsigned */ |
||
212 | |||
213 | #define DWORD_ 111 /* define dword (part 1) */ |
||
214 | #define DWORDn 112 /* define dword of value n */ |
||
215 | #define DWORDr0 113 /* define r dwords of value 0 */ |
||
216 | |||
217 | #define ENTER 18 /* set stack frame on function entry */ |
||
218 | #define EQ10f 19 /* jump if (pr == 0) is false */ |
||
219 | #define EQ12 20 /* set pr TRUE if (sr == pr) */ |
||
220 | #define GE10f 21 /* jump if (pr >= 0) is false */ |
||
221 | #define GE12 22 /* set pr TRUE if (sr >= pr) */ |
||
222 | #define GE12u 23 /* set pr TRUE if (sr >= pr) unsigned */ |
||
223 | #define POINT1l 24 /* point pr to function's literal pool */ |
||
224 | #define POINT1m 25 /* point pr to mem item thru label */ |
||
225 | #define GETb1m 26 /* get byte into pr from mem thru label */ |
||
226 | #define GETb1mu 27 /* get unsigned byte into pr from mem thru label */ |
||
227 | #define GETb1p 28 /* get byte into pr from mem thru sr ptr */ |
||
228 | #define GETb1pu 29 /* get unsigned byte into pr from mem thru sr ptr */ |
||
229 | |||
230 | #define GETd1m 107 /* get dword into pr from mem thru label */ |
||
231 | #define GETd1n 108 /* get dword of value n into pr */ |
||
232 | #define GETd1p 109 /* get dword into pr from mem thru sr ptr */ |
||
233 | #define GETd2n 110 /* get word of value n into sr */ |
||
234 | |||
235 | #define GETw1m 30 /* get word into pr from mem thru label */ |
||
236 | #define GETw1n 31 /* get word of value n into pr */ |
||
237 | #define GETw1p 32 /* get word into pr from mem thru sr ptr */ |
||
238 | #define GETw2n 33 /* get word of value n into sr */ |
||
239 | #define GT10f 34 /* jump if (pr > 0) is false */ |
||
240 | #define GT12 35 /* set pr TRUE if (sr > pr) */ |
||
241 | #define GT12u 36 /* set pr TRUE if (sr > pr) unsigned */ |
||
242 | #define WORD_ 37 /* define word (part 1) */ |
||
243 | #define WORDn 38 /* define word of value n */ |
||
244 | #define WORDr0 39 /* define r words of value 0 */ |
||
245 | #define JMPm 40 /* jump to label */ |
||
246 | #define LABm 41 /* define label m */ |
||
247 | #define LE10f 42 /* jump if (pr <= 0) is false */ |
||
248 | #define LE12 43 /* set pr TRUE if (sr <= pr) */ |
||
249 | #define LE12u 44 /* set pr TRUE if (sr <= pr) unsigned */ |
||
250 | #define LNEG1 45 /* logical negate pr */ |
||
251 | #define LT10f 46 /* jump if (pr < 0) is false */ |
||
252 | #define LT12 47 /* set pr TRUE if (sr < pr) */ |
||
253 | #define LT12u 48 /* set pr TRUE if (sr < pr) unsigned */ |
||
254 | #define MOD12 49 /* modulo pr by sr */ |
||
255 | #define MOD12u 50 /* modulo pr by sr unsigned */ |
||
256 | #define MOVE21 51 /* move pr to sr */ |
||
257 | #define MUL12 52 /* multiply pr by sr */ |
||
258 | #define MUL12u 53 /* multiply pr by sr unsigned */ |
||
259 | #define NE10f 54 /* jump if (pr != 0) is false */ |
||
260 | #define NE12 55 /* set pr TRUE if (sr != pr) */ |
||
261 | #define NEARm 56 /* define near pointer thru label */ |
||
262 | #define OR12 57 /* OR sr onto pr */ |
||
263 | #define POINT1s 58 /* point pr to stack item */ |
||
264 | #define POP2 59 /* pop stack into sr */ |
||
265 | #define PUSH1 60 /* push pr onto stack */ |
||
266 | #define PUTbm1 61 /* put pr byte in mem thru label */ |
||
267 | #define PUTbp1 62 /* put pr byte in mem thru sr ptr */ |
||
268 | |||
269 | #define PUTdm1 114 /* put pr dword in mem thru label */ |
||
270 | #define PUTdp1 115 /* put pr dword in mem thru sr ptr */ |
||
271 | |||
272 | #define PUTwm1 63 /* put pr word in mem thru label */ |
||
273 | #define PUTwp1 64 /* put pr word in mem thru sr ptr */ |
||
274 | #define rDEC1 65 /* dec pr (may repeat) */ |
||
275 | #define REFm 66 /* finish instruction with label */ |
||
276 | #define RETURN 67 /* restore stack and return */ |
||
277 | #define rINC1 68 /* inc pr (may repeat) */ |
||
278 | #define SUB12 69 /* sub sr from pr */ |
||
279 | #define SWAP12 70 /* swap pr and sr */ |
||
280 | #define SWAP1s 71 /* swap pr and top of stack */ |
||
281 | #define SWITCH 72 /* find switch case */ |
||
282 | #define XOR12 73 /* XOR pr with sr */ |
||
283 | |||
284 | /* optimizer-generated */ |
||
285 | #define ADD1n 74 /* add n to pr */ |
||
286 | #define ADD21 75 /* add pr to sr */ |
||
287 | #define ADD2n 76 /* add immediate to sr */ |
||
288 | #define ADDbpn 77 /* add n to mem byte thru sr ptr */ |
||
289 | #define ADDwpn 78 /* add n to mem word thru sr ptr */ |
||
290 | #define ADDm_ 79 /* add n to mem byte/word thru label (part 1) */ |
||
291 | #define COMMAn 80 /* finish instruction with ,n */ |
||
292 | #define DECbp 81 /* dec mem byte thru sr ptr */ |
||
293 | #define DECwp 82 /* dec mem word thru sr ptr */ |
||
294 | #define POINT2m 83 /* point sr to mem thru label */ |
||
295 | #define POINT2m_ 84 /* point sr to mem thru label (part 1) */ |
||
296 | #define GETb1s 85 /* get byte into pr from stack */ |
||
297 | #define GETb1su 86 /* get unsigned byte into pr from stack */ |
||
298 | #define GETw1m_ 87 /* get word into pr from mem thru label (part 1) */ |
||
299 | #define GETw1s 88 /* get word into pr from stack */ |
||
300 | #define GETw2m 89 /* get word into sr from mem (label) */ |
||
301 | #define GETw2p 90 /* get word into sr thru sr ptr */ |
||
302 | #define GETw2s 91 /* get word into sr from stack */ |
||
303 | #define INCbp 92 /* inc byte in mem thru sr ptr */ |
||
304 | #define INCwp 93 /* inc word in mem thru sr ptr */ |
||
305 | #define PLUSn 94 /* finish instruction with +n */ |
||
306 | #define POINT2s 95 /* point sr to stack */ |
||
307 | #define PUSH2 96 /* push sr */ |
||
308 | #define PUSHm 97 /* push word from mem thru label */ |
||
309 | #define PUSHp 98 /* push word from mem thru sr ptr */ |
||
310 | #define PUSHs 99 /* push word from stack */ |
||
311 | #define PUT_m_ 100 /* put byte/word into mem thru label (part 1) */ |
||
312 | #define rDEC2 101 /* dec sr (may repeat) */ |
||
313 | #define rINC2 102 /* inc sr (may repeat) */ |
||
314 | #define SUB_m_ 103 /* sub from mem byte/word thru label (part 1) */ |
||
315 | #define SUB1n 104 /* sub n from pr */ |
||
316 | #define SUBbpn 105 /* sub n from mem byte thru sr ptr */ |
||
317 | #define SUBwpn 106 /* sub n from mem word thru sr ptr */ |
||
318 | |||
319 | #define PCODES 116 /* size of code[] (it's a [+ 1]) */>>>=>=>=>><>><>><>><>><>><> |
||
320 |