Subversion Repositories Kolibri OS

Rev

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