|
|
1.1 root 1: # include "mfile2"
2:
3: # define WPTR TPTRTO|TINT|TLONG|TFLOAT|TDOUBLE|TPOINT|TUNSIGNED|TULONG
4: # define AWD SNAME|SOREG|SCON|STARNM|STARREG
5: /* tbl */
6: # define ANYSIGNED TPOINT|TINT|TLONG|TSHORT|TCHAR
7: # define ANYUSIGNED TUNSIGNED|TULONG|TUSHORT|TUCHAR
8: # define ANYFIXED ANYSIGNED|ANYUSIGNED
9: # define TWORD TINT|TUNSIGNED|TPOINT|TLONG|TULONG
10: # define NIAWD SNAME|SCON|STARNM
11: /* tbl */
12:
13: struct optab table[] = {
14:
15: PCONV, INAREG|INTAREG,
16: SAREG|AWD, TCHAR|TSHORT,
17: SANY, TPOINT,
18: NAREG|NASL, RESC1,
19: " cvtZLl AL,A1\n",
20:
21: PCONV, INAREG|INTAREG,
22: SAREG|AWD, TUCHAR|TUSHORT,
23: SANY, TPOINT,
24: NAREG|NASL, RESC1,
25: " movzZLl AL,A1\n",
26:
27: PCONV, INAREG|INTAREG,
28: SAREG|AWD, TINT|TUNSIGNED,
29: SANY, TPOINT,
30: NAREG|NASL, RLEFT,
31: "",
32:
33: SCONV, INTAREG|FORCC,
34: SAREG, TDOUBLE,
35: SANY, TDOUBLE,
36: 0, RLEFT,
37: "",
38:
39: SCONV, INTAREG|FORCC,
40: SAREG|AWD, TANY,
41: SANY, TFLOAT|TDOUBLE,
42: NAREG|NASL, RESC1|RESCC,
43: " cvtZLd AL,A1\n",
44:
45: SCONV, INTAREG|FORCC,
46: SAREG|AWD, TFLOAT|TDOUBLE,
47: SANY, ANYFIXED,
48: NAREG|NASL, RESC1|RESCC,
49: " cvtZLZF AL,A1\n",
50:
51: SCONV, INTAREG|FORCC,
52: SAREG|SNAME|SCON|STARNM, TANY,
53: SANY, ANYUSIGNED,
54: NAREG|NASL, RESC1|RESCC,
55: " movzZRl AL,A1\n",
56:
57: SCONV, INTAREG|FORCC,
58: SSOREG, TANY,
59: SANY, ANYUSIGNED,
60: NAREG|NASL, RESC1|RESCC,
61: " movzZRl AL,A1\n",
62:
63: SCONV, INTAREG|FORCC,
64: SAREG|SNAME|SCON|STARNM, TANY,
65: SANY, TANY,
66: NAREG|NASL, RESC1|RESCC,
67: " cvtZRl AL,A1\n",
68:
69: SCONV, INTAREG|FORCC,
70: SSOREG, TANY,
71: SANY, TANY,
72: NAREG|NASL, RESC1|RESCC,
73: " cvtZRl AL,A1\n",
74:
75:
76: INIT, FOREFF,
77: SCON, TANY,
78: SANY, TWORD,
79: 0, RNOP,
80: " .long CL\n",
81:
82: INIT, FOREFF,
83: SCON, TANY,
84: SANY, TSHORT|TUSHORT,
85: 0, RNOP,
86: " .word CL\n",
87:
88: INIT, FOREFF,
89: SCON, TANY,
90: SANY, TCHAR|TUCHAR,
91: 0, RNOP,
92: " .byte CL\n",
93:
94: /* for the use of fortran only */
95:
96: GOTO, FOREFF,
97: SCON, TANY,
98: SANY, TANY,
99: 0, RNOP,
100: " jbr CL\n",
101:
102: GOTO, FOREFF,
103: SAREG, TANY,
104: SANY, TANY,
105: 0, RNOP,
106: " jmp (AL)\n",
107:
108: STARG, FORARG,
109: SCON|SOREG, TANY,
110: SANY, TANY,
111: NTEMP+2*NAREG, RESC3,
112: "ZS",
113:
114: STASG, FORARG,
115: SNAME|SOREG, TANY,
116: SCON|SAREG, TANY,
117: 0, RNULL,
118: " subl2 ZT,sp\nZS",
119:
120: STASG, FOREFF,
121: SNAME|SOREG, TANY,
122: SCON|SAREG, TANY,
123: 0, RNOP,
124: "ZS",
125:
126: STASG, INAREG,
127: SNAME|SOREG, TANY,
128: SCON, TANY,
129: NAREG, RESC1,
130: "ZS movl AR,A1\n",
131:
132: STASG, INAREG,
133: SNAME|SOREG, TANY,
134: SAREG, TANY,
135: 0, RRIGHT,
136: " pushl AR\nZS movl (sp)+,AR\n",
137:
138: FLD, INAREG|INTAREG,
139: SANY, TANY,
140: SFLD, ANYSIGNED,
141: NAREG|NASR, RESC1,
142: " extv H,S,AR,A1\n",
143:
144: FLD, INAREG|INTAREG,
145: SANY, TANY,
146: SFLD, ANYUSIGNED,
147: NAREG|NASR, RESC1,
148: " extzv H,S,AR,A1\n",
149:
150: FLD, FORARG,
151: SANY, TANY,
152: SFLD, ANYSIGNED,
153: 0, RNULL,
154: " extv H,S,AR,-(sp)\n",
155:
156: FLD, FORARG,
157: SANY, TANY,
158: SFLD, ANYUSIGNED,
159: 0, RNULL,
160: " extzv H,S,AR,-(sp)\n",
161:
162: OPLOG, FORCC,
163: SAREG|AWD, TWORD,
164: SAREG|AWD, TWORD,
165: 0, RESCC,
166: " cmpl AL,AR\nZP",
167:
168: OPLOG, FORCC,
169: SAREG|AWD, TSHORT|TUSHORT,
170: SAREG|AWD, TSHORT|TUSHORT,
171: 0, RESCC,
172: " cmpw AL,AR\nZP",
173:
174: OPLOG, FORCC,
175: SAREG|AWD, TCHAR|TUCHAR,
176: SAREG|AWD, TCHAR|TUCHAR,
177: 0, RESCC,
178: " cmpb AL,AR\nZP",
179:
180: OPLOG, FORCC,
181: SAREG|AWD, TSHORT|TUSHORT,
182: SSCON, TANY,
183: 0, RESCC,
184: " cmpw AL,AR\nZP",
185:
186: OPLOG, FORCC,
187: SAREG|AWD, TCHAR|TUCHAR,
188: SCCON, TANY,
189: 0, RESCC,
190: " cmpb AL,AR\nZP",
191:
192: OPLOG, FORCC,
193: SAREG|AWD, TDOUBLE,
194: SAREG|AWD, TDOUBLE,
195: 0, RESCC,
196: " cmpd AL,AR\nZP",
197:
198: OPLOG, FORCC,
199: SAREG|AWD, TFLOAT|TDOUBLE,
200: SAREG|AWD, TFLOAT|TDOUBLE,
201: 0, RESCC,
202: " cmpf AL,AR\nZP",
203:
204: CCODES, INAREG|INTAREG,
205: SANY, TANY,
206: SANY, TANY,
207: NAREG, RESC1,
208: " movl $1,A1\nZN",
209:
210: UNARY CALL, INTAREG,
211: SCON, TANY,
212: SANY, TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
213: NAREG|NASL, RESC1, /* should be register 0 */
214: " calls ZC,CL\n",
215:
216: UNARY CALL, INTAREG,
217: SAREG, TANY,
218: SANY, TWORD|TCHAR|TUCHAR|TSHORT|TUSHORT|TFLOAT|TDOUBLE,
219: NAREG|NASL, RESC1, /* should be 0 */
220: " calls ZC,(AL)\n",
221:
222: UNARY CALL, INAREG|INTAREG,
223: SNAME, TANY,
224: SANY, TANY,
225: NAREG|NASL, RESC1, /* really reg 0 */
226: " calls ZC,*AL\n",
227:
228: UNARY CALL, INAREG|INTAREG,
229: SSOREG, TANY,
230: SANY, TANY,
231: NAREG|NASL, RESC1, /* really reg 0 */
232: " calls ZC,*AL\n",
233:
234: ASG RS, INAREG|FOREFF|FORCC,
235: SAREG, TWORD,
236: SCON, TINT,
237: 0, RLEFT|RESCC,
238: " extzv AR,ZU,AL,AL\n",
239:
240: ASG RS, INAREG|FOREFF|FORCC,
241: SAREG, TWORD,
242: SAREG, ANYFIXED,
243: NAREG, RLEFT|RESCC,
244: " subl3 AR,$32,A1\n extzv AR,A1,AL,AL\n",
245:
246: ASG RS, INAREG|FOREFF|FORCC,
247: SAREG, TWORD,
248: SAREG|AWD, TWORD,
249: NAREG, RLEFT|RESCC,
250: " subl3 AR,$32,A1\n extzv AR,A1,AL,AL\n",
251:
252: RS, INAREG|INTAREG|FORCC,
253: SAREG, TWORD,
254: SCON, TINT,
255: NAREG|NASL, RESC1|RESCC,
256: " extzv AR,ZU,AL,A1\n",
257:
258: ASG LS, INAREG|FOREFF|FORCC,
259: SAREG|AWD, TWORD,
260: SAREG|NIAWD, ANYSIGNED|ANYUSIGNED,
261: 0, RLEFT|RESCC,
262: " ashl AR,AL,AL\n",
263:
264: ASG LS, INAREG|FOREFF|FORCC,
265: SAREG|AWD, TWORD,
266: SSOREG, ANYSIGNED|ANYUSIGNED,
267: 0, RLEFT|RESCC,
268: " ashl AR,AL,AL\n",
269:
270: LS, INAREG|INTAREG|FORCC,
271: SAREG|AWD, TWORD,
272: SAREG|NIAWD, ANYSIGNED|ANYUSIGNED,
273: NAREG|NASL|NASR, RESC1|RESCC,
274: " ashl AR,AL,A1\n",
275:
276: LS, INAREG|INTAREG|FORCC,
277: SAREG|AWD, TWORD,
278: SSOREG, ANYSIGNED|ANYUSIGNED,
279: NAREG|NASL|NASR, RESC1|RESCC,
280: " ashl AR,AL,A1\n",
281:
282: INCR, FOREFF,
283: SAREG|AWD, TANY,
284: SANY, TANY,
285: 0, RLEFT,
286: " ZE\n",
287:
288: DECR, FOREFF,
289: SAREG|AWD, TANY,
290: SCON, TANY,
291: 0, RLEFT,
292: " ZE\n",
293:
294: INCR, INAREG|INTAREG,
295: SAREG|AWD, TANY,
296: SCON, TANY,
297: NAREG, RESC1,
298: " ZD\n",
299:
300: DECR, INAREG|INTAREG,
301: SAREG|AWD, TANY,
302: SCON, TANY,
303: NAREG, RESC1,
304: " ZD\n",
305:
306: ASSIGN, INAREG|FOREFF|FORCC,
307: SAREG|AWD, TANY,
308: SAREG|AWD, TANY,
309: 0, RLEFT|RRIGHT|RESCC,
310: " ZA\n",
311:
312: ASSIGN, INAREG|FOREFF,
313: SFLD, TANY,
314: SAREG|AWD, TWORD,
315: 0, RRIGHT,
316: " insv AR,H,S,AL\n",
317:
318:
319: ASSIGN, INAREG|FOREFF|FORCC,
320: SAREG|AWD, TWORD,
321: SFLD, ANYSIGNED,
322: 0, RLEFT|RESCC,
323: " extv H,S,AR,AL\n",
324:
325: ASSIGN, INAREG|FOREFF|FORCC,
326: SAREG|AWD, TWORD,
327: SFLD, ANYUSIGNED,
328: 0, RLEFT|RESCC,
329: " extzv H,S,AR,AL\n",
330:
331: /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
332: UNARY MUL, FOREFF,
333: SCC, TANY,
334: SCC, TANY,
335: 0, RNULL,
336: " HELP HELP HELP\n",
337:
338: REG, FORARG,
339: SANY, TANY,
340: SAREG, TDOUBLE|TFLOAT,
341: 0, RNULL,
342: " movZR AR,-(sp)\n",
343:
344: REG, INTEMP,
345: SANY, TANY,
346: SAREG, TDOUBLE,
347: 2*NTEMP, RESC1,
348: " movd AR,A1\n",
349:
350: REG, INTEMP,
351: SANY, TANY,
352: SAREG, TANY,
353: NTEMP, RESC1,
354: " movZF AR,A1\n",
355:
356: OPLEAF, FOREFF,
357: SANY, TANY,
358: SAREG|AWD, TANY,
359: 0, RLEFT,
360: "",
361:
362: OPLTYPE, INAREG|INTAREG,
363: SANY, TANY,
364: SANY, TFLOAT|TDOUBLE,
365: 2*NAREG|NASR, RESC1,
366: " ZA\n",
367:
368: OPLTYPE, INAREG|INTAREG,
369: SANY, TANY,
370: SANY, TANY,
371: NAREG|NASR, RESC1,
372: " ZA\n",
373:
374: OPLTYPE, FORCC,
375: SANY, TANY,
376: SANY, TANY,
377: 0, RESCC,
378: " tstZR AR\n",
379:
380: OPLTYPE, FORARG,
381: SANY, TANY,
382: SANY, TWORD,
383: 0, RNULL,
384: " pushl AR\n",
385:
386: OPLTYPE, FORARG,
387: SANY, TANY,
388: SANY, TCHAR|TSHORT,
389: 0, RNULL,
390: " cvtZRl AR,-(sp)\n",
391:
392: OPLTYPE, FORARG,
393: SANY, TANY,
394: SANY, TUCHAR|TUSHORT,
395: 0, RNULL,
396: " movzZRl AR,-(sp)\n",
397:
398: OPLTYPE, FORARG,
399: SANY, TANY,
400: SANY, TDOUBLE,
401: 0, RNULL,
402: " movd AR,-(sp)\n",
403:
404: OPLTYPE, FORARG,
405: SANY, TANY,
406: SANY, TFLOAT,
407: 0, RNULL,
408: " cvtfd AR,-(sp)\n",
409:
410: UNARY MINUS, INTAREG|FORCC,
411: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG|TDOUBLE,
412: SANY, TANY,
413: NAREG|NASL, RESC1|RESCC,
414: " mnegZL AL,A1\n",
415:
416: COMPL, INTAREG|FORCC,
417: SAREG|AWD, TINT|TUNSIGNED,
418: SANY, TANY,
419: NAREG|NASL, RESC1|RESCC,
420: " mcomZL AL,A1\n",
421:
422: COMPL, INTAREG|FORCC,
423: SAREG|AWD, ANYSIGNED|ANYUSIGNED,
424: SANY, TANY,
425: NAREG|NASL, RESC1|RESCC,
426: " cvtZLl AL,A1\n mcoml A1,A1\n",
427:
428: AND, FORCC,
429: SAREG|AWD, TWORD,
430: SCON, TWORD,
431: 0, RESCC,
432: " bitl ZZ,AL\n",
433:
434: AND, FORCC,
435: SAREG|AWD, TSHORT|TUSHORT,
436: SSCON, TWORD,
437: 0, RESCC,
438: " bitw ZZ,AL\n",
439:
440: AND, FORCC,
441: SAREG|AWD, TCHAR|TUCHAR,
442: SCCON, TWORD,
443: 0, RESCC,
444: " bitb ZZ,AL\n",
445:
446: ASG AND, INAREG|FOREFF|FORCC,
447: SAREG, ANYFIXED,
448: SCON, TWORD,
449: 0, RLEFT|RESCC,
450: " bicl2 AR,AL\n",
451:
452: ASG OPMUL, INAREG|FOREFF|FORCC,
453: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
454: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
455: 0, RLEFT|RESCC,
456: " OL2 AR,AL\n",
457:
458: OPMUL, INAREG|INTAREG|FORCC,
459: STAREG, TINT|TUNSIGNED|TLONG|TULONG,
460: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
461: 0, RLEFT|RESCC,
462: " OL2 AR,AL\n",
463:
464: OPMUL, INAREG|INTAREG|FORCC,
465: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
466: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
467: NAREG|NASL|NASR, RESC1|RESCC,
468: " OL3 AR,AL,A1\n",
469:
470: ASG MOD, INAREG|INTAREG|FOREFF|FORCC,
471: SAREG, TINT|TUNSIGNED|TLONG|TULONG,
472: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
473: NAREG, RLEFT|RESCC,
474: " divl3 AR,AL,A1\n mull2 AR,A1\n subl2 A1,AL\n",
475:
476: MOD, INAREG|INTAREG,
477: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
478: SAREG|AWD, TINT|TUNSIGNED|TLONG|TULONG,
479: NAREG, RESC1,
480: " divl3 AR,AL,A1\n mull2 AR,A1\n subl3 A1,AL,A1\n",
481:
482: ASG PLUS, INAREG|FOREFF|FORCC,
483: SAREG|AWD, ANYSIGNED|ANYUSIGNED,
484: SONE, TINT|TLONG,
485: 0, RLEFT|RESCC,
486: " incZL AL\n",
487:
488: ASG MINUS, INAREG|FOREFF|FORCC,
489: SAREG|AWD, ANYSIGNED|ANYUSIGNED,
490: SONE, TINT|TLONG,
491: 0, RLEFT|RESCC,
492: " decZL AL\n",
493:
494: PLUS, INAREG|INTAREG|FORCC,
495: STAREG, ANYFIXED,
496: SONE, TWORD,
497: 0, RLEFT|RESCC,
498: " incZL AL\n",
499:
500: MINUS, INAREG|INTAREG|FORCC,
501: STAREG, ANYFIXED,
502: SONE, TWORD,
503: 0, RLEFT|RESCC,
504: " decZL AL\n",
505:
506: ASG OPSIMP, INAREG|FOREFF|FORCC,
507: SAREG|AWD, TWORD,
508: SAREG|AWD, TWORD,
509: 0, RLEFT|RESCC,
510: " OL2 AR,AL\n",
511:
512: ASG OPSIMP, INAREG|FOREFF|FORCC,
513: AWD, TSHORT|TUSHORT,
514: SAREG|AWD, TSHORT|TUSHORT,
515: 0, RLEFT|RESCC,
516: " OW2 AR,AL\n",
517:
518: ASG OPSIMP, INAREG|FOREFF|FORCC,
519: AWD, TSHORT|TUSHORT,
520: SSCON, TWORD,
521: 0, RLEFT|RESCC,
522: " OW2 AR,AL\n",
523:
524: ASG OPSIMP, INAREG|FOREFF|FORCC,
525: AWD, TCHAR|TUCHAR,
526: SAREG|AWD, TCHAR|TUCHAR,
527: 0, RLEFT|RESCC,
528: " OB2 AR,AL\n",
529:
530: ASG OPSIMP, INAREG|FOREFF|FORCC,
531: AWD, TCHAR|TUCHAR,
532: SCCON, TWORD,
533: 0, RLEFT|RESCC,
534: " OB2 AR,AL\n",
535:
536: OPSIMP, INAREG|INTAREG|FORCC,
537: STAREG, ANYFIXED,
538: SAREG|AWD, TWORD,
539: 0, RLEFT|RESCC,
540: " OL2 AR,AL\n",
541:
542: OPSIMP, INAREG|INTAREG|FORCC,
543: SAREG|AWD, TWORD,
544: SAREG|AWD, TWORD,
545: NAREG|NASL|NASR, RESC1|RESCC,
546: " OL3 AR,AL,A1\n",
547:
548: ASG OPFLOAT, INAREG|FOREFF|FORCC,
549: SAREG|AWD, TDOUBLE,
550: SAREG|AWD, TDOUBLE,
551: 0, RLEFT|RESCC,
552: " OD2 AR,AL\n",
553:
554: ASG OPFLOAT, INAREG|FOREFF|FORCC,
555: SAREG|AWD, TFLOAT,
556: SAREG|AWD, TFLOAT,
557: 0, RLEFT|RESCC,
558: " OF2 AR,AL\n",
559:
560: ASG OPFLOAT, INAREG|FOREFF|FORCC,
561: SAREG|AWD, TDOUBLE,
562: SAREG|AWD, TFLOAT,
563: NAREG|NASR, RLEFT|RESCC,
564: " cvtfd AR,A1\n OD2 A1,AL\n",
565:
566: ASG OPFLOAT, INAREG|INTAREG|FOREFF|FORCC,
567: SAREG|AWD, TFLOAT,
568: SAREG|AWD, TDOUBLE,
569: NAREG, RLEFT|RESC1|RESCC,
570: " cvtfd AL,A1\n OD2 AR,A1\n cvtdf A1,AL\n",
571:
572: OPFLOAT, INAREG|INTAREG|FORCC,
573: STAREG, TDOUBLE,
574: SAREG|AWD, TDOUBLE,
575: 0, RLEFT|RESCC,
576: " OD2 AR,AL\n",
577:
578: OPFLOAT, INAREG|INTAREG|FORCC,
579: SAREG|AWD, TDOUBLE,
580: SAREG|AWD, TDOUBLE,
581: NAREG|NASL|NASR, RESC1|RESCC,
582: " OD3 AR,AL,A1\n",
583:
584: OPFLOAT, INAREG|INTAREG|FORCC,
585: SAREG|AWD, TFLOAT,
586: SAREG|AWD, TDOUBLE,
587: NAREG|NASL, RESC1|RESCC,
588: " cvtfd AL,A1\n OD2 AR,A1\n",
589:
590: OPFLOAT, INAREG|INTAREG|FORCC,
591: SAREG|AWD, TDOUBLE,
592: SAREG|AWD, TFLOAT,
593: NAREG|NASR, RESC1|RESCC,
594: " cvtfd AR,A1\n OD3 A1,AL,A1\n",
595:
596: OPFLOAT, INAREG|INTAREG|FORCC,
597: SAREG|AWD, TFLOAT,
598: SAREG|AWD, TFLOAT,
599: NAREG|NASL|NASR, RESC1|RESCC,
600: " OF3 AR,AL,A1\n cvtfd A1,A1\n",
601:
602: /* Default actions for hard trees ... */
603:
604: # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
605:
606: UNARY MUL, DF( UNARY MUL ),
607:
608: INCR, DF(INCR),
609:
610: DECR, DF(INCR),
611:
612: ASSIGN, DF(ASSIGN),
613:
614: STASG, DF(STASG),
615:
616: FLD, DF(FLD),
617:
618: OPLEAF, DF(NAME),
619:
620: OPLOG, FORCC,
621: SANY, TANY,
622: SANY, TANY,
623: REWRITE, BITYPE,
624: "",
625:
626: OPLOG, DF(NOT),
627:
628: COMOP, DF(COMOP),
629:
630: INIT, DF(INIT),
631:
632: OPUNARY, DF(UNARY MINUS),
633:
634:
635: ASG OPANY, DF(ASG PLUS),
636:
637: OPANY, DF(BITYPE),
638:
639: FREE, FREE, FREE, FREE, FREE, FREE, FREE, FREE, "help; I'm in trouble\n" };
640:
641:
642:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.