|
|
1.1 root 1: #ifndef generic
2: #define generic(op) ((op)&~15)
3: #define opindex(op) ((op)>>4)
4: #define optype(op) ((op)&15)
5: #define isaddrop(op) ((op)==ADDRG+P||(op)==ADDRL+P||(op)==ADDRF+P)
6:
7: #define F 1 /* float */
8: #define D 2 /* double */
9: #define C 3 /* char */
10: #define S 4 /* short */
11: #define I 5 /* int */
12: #define U 6 /* unsigned */
13: #define P 7 /* void* */
14: #define V 8 /* void */
15: #define B 9 /* struct */
16: #define TYPENAMES " FDCSIUPVB"
17:
18: #ifdef __STDC__
19: typedef enum opcode {
20: CNST=1<<4,
21: CNSTC=(1<<4)+C,
22: CNSTD=(1<<4)+D,
23: CNSTF=(1<<4)+F,
24: CNSTI=(1<<4)+I,
25: CNSTP=(1<<4)+P,
26: CNSTS=(1<<4)+S,
27: CNSTU=(1<<4)+U,
28: ARG=2<<4,
29: ARGB=(2<<4)+B,
30: ARGD=(2<<4)+D,
31: ARGF=(2<<4)+F,
32: ARGI=(2<<4)+I,
33: ARGP=(2<<4)+P,
34: ASGN=3<<4,
35: ASGNB=(3<<4)+B,
36: ASGNC=(3<<4)+C,
37: ASGND=(3<<4)+D,
38: ASGNF=(3<<4)+F,
39: ASGNI=(3<<4)+I,
40: ASGNS=(3<<4)+S,
41: ASGNP=(3<<4)+P,
42: INDIR=4<<4,
43: INDIRB=(4<<4)+B,
44: INDIRC=(4<<4)+C,
45: INDIRD=(4<<4)+D,
46: INDIRF=(4<<4)+F,
47: INDIRI=(4<<4)+I,
48: INDIRS=(4<<4)+S,
49: INDIRP=(4<<4)+P,
50: CVC=5<<4,
51: CVCI=(5<<4)+I,
52: CVCU=(5<<4)+U,
53: CVD=6<<4,
54: CVDF=(6<<4)+F,
55: CVDI=(6<<4)+I,
56: CVF=7<<4,
57: CVFD=(7<<4)+D,
58: CVI=8<<4,
59: CVIC=(8<<4)+C,
60: CVID=(8<<4)+D,
61: CVIS=(8<<4)+S,
62: CVIU=(8<<4)+U,
63: CVP=9<<4,
64: CVPU=(9<<4)+U,
65: CVS=10<<4,
66: CVSI=(10<<4)+I,
67: CVSU=(10<<4)+U,
68: CVU=11<<4,
69: CVUC=(11<<4)+C,
70: CVUI=(11<<4)+I,
71: CVUP=(11<<4)+P,
72: CVUS=(11<<4)+S,
73: NEG=12<<4,
74: NEGD=(12<<4)+D,
75: NEGF=(12<<4)+F,
76: NEGI=(12<<4)+I,
77: CALL=13<<4,
78: CALLB=(13<<4)+B,
79: CALLD=(13<<4)+D,
80: CALLF=(13<<4)+F,
81: CALLI=(13<<4)+I,
82: CALLV=(13<<4)+V,
83: LOAD=14<<4,
84: LOADB=(14<<4)+B,
85: LOADC=(14<<4)+C,
86: LOADD=(14<<4)+D,
87: LOADF=(14<<4)+F,
88: LOADI=(14<<4)+I,
89: LOADP=(14<<4)+P,
90: LOADS=(14<<4)+S,
91: LOADU=(14<<4)+U,
92: RET=15<<4,
93: RETD=(15<<4)+D,
94: RETF=(15<<4)+F,
95: RETI=(15<<4)+I,
96: RETV=(15<<4)+V,
97: ADDRG=16<<4,
98: ADDRGP=(16<<4)+P,
99: ADDRF=17<<4,
100: ADDRFP=(17<<4)+P,
101: ADDRL=18<<4,
102: ADDRLP=(18<<4)+P,
103: ADD=19<<4,
104: ADDD=(19<<4)+D,
105: ADDF=(19<<4)+F,
106: ADDI=(19<<4)+I,
107: ADDP=(19<<4)+P,
108: ADDU=(19<<4)+U,
109: SUB=20<<4,
110: SUBD=(20<<4)+D,
111: SUBF=(20<<4)+F,
112: SUBI=(20<<4)+I,
113: SUBP=(20<<4)+P,
114: SUBU=(20<<4)+U,
115: LSH=21<<4,
116: LSHI=(21<<4)+I,
117: LSHU=(21<<4)+U,
118: MOD=22<<4,
119: MODI=(22<<4)+I,
120: MODU=(22<<4)+U,
121: RSH=23<<4,
122: RSHI=(23<<4)+I,
123: RSHU=(23<<4)+U,
124: BAND=24<<4,
125: BANDU=(24<<4)+U,
126: BCOM=25<<4,
127: BCOMU=(25<<4)+U,
128: BOR=26<<4,
129: BORU=(26<<4)+U,
130: BXOR=27<<4,
131: BXORU=(27<<4)+U,
132: DIV=28<<4,
133: DIVD=(28<<4)+D,
134: DIVF=(28<<4)+F,
135: DIVI=(28<<4)+I,
136: DIVU=(28<<4)+U,
137: MUL=29<<4,
138: MULD=(29<<4)+D,
139: MULF=(29<<4)+F,
140: MULI=(29<<4)+I,
141: MULU=(29<<4)+U,
142: EQ=30<<4,
143: EQD=(30<<4)+D,
144: EQF=(30<<4)+F,
145: EQI=(30<<4)+I,
146: GE=31<<4,
147: GED=(31<<4)+D,
148: GEF=(31<<4)+F,
149: GEI=(31<<4)+I,
150: GEU=(31<<4)+U,
151: GT=32<<4,
152: GTD=(32<<4)+D,
153: GTF=(32<<4)+F,
154: GTI=(32<<4)+I,
155: GTU=(32<<4)+U,
156: LE=33<<4,
157: LED=(33<<4)+D,
158: LEF=(33<<4)+F,
159: LEI=(33<<4)+I,
160: LEU=(33<<4)+U,
161: LT=34<<4,
162: LTD=(34<<4)+D,
163: LTF=(34<<4)+F,
164: LTI=(34<<4)+I,
165: LTU=(34<<4)+U,
166: NE=35<<4,
167: NED=(35<<4)+D,
168: NEF=(35<<4)+F,
169: NEI=(35<<4)+I,
170: JUMP=36<<4,
171: JUMPV=(36<<4)+V,
172: LABEL=37<<4,
173: LABELV=(37<<4)+V,
174: MAXOP=38<<4,
175: /* additional tree operators: */
176: AND=MAXOP,
177: NOT=MAXOP+1*16,
178: OR=MAXOP+2*16,
179: COND=MAXOP+3*16,
180: RIGHT=MAXOP+4*16,
181: FIELD=MAXOP+5*16
182: } Opcode;
183: #else
184: typedef int Opcode;
185: #define CNST (1<<4)
186: #define CNSTC ((1<<4)+C)
187: #define CNSTD ((1<<4)+D)
188: #define CNSTF ((1<<4)+F)
189: #define CNSTI ((1<<4)+I)
190: #define CNSTP ((1<<4)+P)
191: #define CNSTS ((1<<4)+S)
192: #define CNSTU ((1<<4)+U)
193: #define ARG (2<<4)
194: #define ARGB ((2<<4)+B)
195: #define ARGD ((2<<4)+D)
196: #define ARGF ((2<<4)+F)
197: #define ARGI ((2<<4)+I)
198: #define ARGP ((2<<4)+P)
199: #define ASGN (3<<4)
200: #define ASGNB ((3<<4)+B)
201: #define ASGNC ((3<<4)+C)
202: #define ASGND ((3<<4)+D)
203: #define ASGNF ((3<<4)+F)
204: #define ASGNI ((3<<4)+I)
205: #define ASGNS ((3<<4)+S)
206: #define ASGNP ((3<<4)+P)
207: #define INDIR (4<<4)
208: #define INDIRB ((4<<4)+B)
209: #define INDIRC ((4<<4)+C)
210: #define INDIRD ((4<<4)+D)
211: #define INDIRF ((4<<4)+F)
212: #define INDIRI ((4<<4)+I)
213: #define INDIRS ((4<<4)+S)
214: #define INDIRP ((4<<4)+P)
215: #define CVC (5<<4)
216: #define CVCI ((5<<4)+I)
217: #define CVCU ((5<<4)+U)
218: #define CVD (6<<4)
219: #define CVDF ((6<<4)+F)
220: #define CVDI ((6<<4)+I)
221: #define CVF (7<<4)
222: #define CVFD ((7<<4)+D)
223: #define CVI (8<<4)
224: #define CVIC ((8<<4)+C)
225: #define CVID ((8<<4)+D)
226: #define CVIS ((8<<4)+S)
227: #define CVIU ((8<<4)+U)
228: #define CVP (9<<4)
229: #define CVPU ((9<<4)+U)
230: #define CVS (10<<4)
231: #define CVSI ((10<<4)+I)
232: #define CVSU ((10<<4)+U)
233: #define CVU (11<<4)
234: #define CVUC ((11<<4)+C)
235: #define CVUI ((11<<4)+I)
236: #define CVUP ((11<<4)+P)
237: #define CVUS ((11<<4)+S)
238: #define NEG (12<<4)
239: #define NEGD ((12<<4)+D)
240: #define NEGF ((12<<4)+F)
241: #define NEGI ((12<<4)+I)
242: #define CALL (13<<4)
243: #define CALLB ((13<<4)+B)
244: #define CALLD ((13<<4)+D)
245: #define CALLF ((13<<4)+F)
246: #define CALLI ((13<<4)+I)
247: #define CALLV ((13<<4)+V)
248: #define LOAD (14<<4)
249: #define LOADB ((14<<4)+B)
250: #define LOADC ((14<<4)+C)
251: #define LOADD ((14<<4)+D)
252: #define LOADF ((14<<4)+F)
253: #define LOADI ((14<<4)+I)
254: #define LOADP ((14<<4)+P)
255: #define LOADS ((14<<4)+S)
256: #define LOADU ((14<<4)+U)
257: #define RET (15<<4)
258: #define RETD ((15<<4)+D)
259: #define RETF ((15<<4)+F)
260: #define RETI ((15<<4)+I)
261: #define RETV ((15<<4)+V)
262: #define ADDRG (16<<4)
263: #define ADDRGP ((16<<4)+P)
264: #define ADDRF (17<<4)
265: #define ADDRFP ((17<<4)+P)
266: #define ADDRL (18<<4)
267: #define ADDRLP ((18<<4)+P)
268: #define ADD (19<<4)
269: #define ADDD ((19<<4)+D)
270: #define ADDF ((19<<4)+F)
271: #define ADDI ((19<<4)+I)
272: #define ADDP ((19<<4)+P)
273: #define ADDU ((19<<4)+U)
274: #define SUB (20<<4)
275: #define SUBD ((20<<4)+D)
276: #define SUBF ((20<<4)+F)
277: #define SUBI ((20<<4)+I)
278: #define SUBP ((20<<4)+P)
279: #define SUBU ((20<<4)+U)
280: #define LSH (21<<4)
281: #define LSHI ((21<<4)+I)
282: #define LSHU ((21<<4)+U)
283: #define MOD (22<<4)
284: #define MODI ((22<<4)+I)
285: #define MODU ((22<<4)+U)
286: #define RSH (23<<4)
287: #define RSHI ((23<<4)+I)
288: #define RSHU ((23<<4)+U)
289: #define BAND (24<<4)
290: #define BANDU ((24<<4)+U)
291: #define BCOM (25<<4)
292: #define BCOMU ((25<<4)+U)
293: #define BOR (26<<4)
294: #define BORU ((26<<4)+U)
295: #define BXOR (27<<4)
296: #define BXORU ((27<<4)+U)
297: #define DIV (28<<4)
298: #define DIVD ((28<<4)+D)
299: #define DIVF ((28<<4)+F)
300: #define DIVI ((28<<4)+I)
301: #define DIVU ((28<<4)+U)
302: #define MUL (29<<4)
303: #define MULD ((29<<4)+D)
304: #define MULF ((29<<4)+F)
305: #define MULI ((29<<4)+I)
306: #define MULU ((29<<4)+U)
307: #define EQ (30<<4)
308: #define EQD ((30<<4)+D)
309: #define EQF ((30<<4)+F)
310: #define EQI ((30<<4)+I)
311: #define GE (31<<4)
312: #define GED ((31<<4)+D)
313: #define GEF ((31<<4)+F)
314: #define GEI ((31<<4)+I)
315: #define GEU ((31<<4)+U)
316: #define GT (32<<4)
317: #define GTD ((32<<4)+D)
318: #define GTF ((32<<4)+F)
319: #define GTI ((32<<4)+I)
320: #define GTU ((32<<4)+U)
321: #define LE (33<<4)
322: #define LED ((33<<4)+D)
323: #define LEF ((33<<4)+F)
324: #define LEI ((33<<4)+I)
325: #define LEU ((33<<4)+U)
326: #define LT (34<<4)
327: #define LTD ((34<<4)+D)
328: #define LTF ((34<<4)+F)
329: #define LTI ((34<<4)+I)
330: #define LTU ((34<<4)+U)
331: #define NE (35<<4)
332: #define NED ((35<<4)+D)
333: #define NEF ((35<<4)+F)
334: #define NEI ((35<<4)+I)
335: #define JUMP (36<<4)
336: #define JUMPV ((36<<4)+V)
337: #define LABEL (37<<4)
338: #define LABELV ((37<<4)+V)
339: #define MAXOP (38<<4)
340: #define AND MAXOP
341: #define NOT (MAXOP+1*16)
342: #define OR (MAXOP+2*16)
343: #define COND (MAXOP+3*16)
344: #define RIGHT (MAXOP+4*16)
345: #define FIELD (MAXOP+5*16)
346: #endif /* __STDC__ */
347: #endif /* generic */
348:
349: #ifdef NEEDNAMES
350: "CNST",
351: "ARG",
352: "ASGN",
353: "INDIR",
354: "CVC",
355: "CVD",
356: "CVF",
357: "CVI",
358: "CVP",
359: "CVS",
360: "CVU",
361: "NEG",
362: "CALL",
363: "LOAD",
364: "RET",
365: "ADDRG",
366: "ADDRF",
367: "ADDRL",
368: "ADD",
369: "SUB",
370: "LSH",
371: "MOD",
372: "RSH",
373: "BAND",
374: "BCOM",
375: "BOR",
376: "BXOR",
377: "DIV",
378: "MUL",
379: "EQ",
380: "GE",
381: "GT",
382: "LE",
383: "LT",
384: "NE",
385: "JUMP",
386: "LABEL",
387: #undef NEEDNAMES
388: #endif /* NEEDNAMES */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.