|
|
1.1 root 1: #ifndef lint
2: static char *sccsid ="@(#)table.c 1.10 (Berkeley) 6/9/85";
3: #endif lint
4:
5: # include "pass2.h"
6: /* special shapes (SSOREG,SZERO etc.) shouldn't be or-ed */
7: # define AWD SNAME|SOREG|SCON|STARNM|STARREG
8: /* tbl */
9: # define ANYSIGNED TPOINT|TINT|TSHORT|TCHAR
10: # define ANYUSIGNED TUNSIGNED|TUSHORT|TUCHAR
11: # define ANYFIXED ANYSIGNED|ANYUSIGNED
12: # define TWORD TINT|TUNSIGNED|TPOINT
13: /* tbl */
14:
15: struct optab table[] = {
16:
17: PCONV, INAREG|INTAREG,
18: SAREG|AWD, TCHAR|TSHORT,
19: SANY, TPOINT,
20: NAREG|NASL, RESC1,
21: " cvtZLl AL,A1\n",
22:
23: PCONV, INAREG|INTAREG,
24: SAREG|AWD, TUCHAR|TUSHORT,
25: SANY, TPOINT,
26: NAREG|NASL, RESC1,
27: " movzZLl AL,A1\n",
28:
29: /* the following entry is to fix a problem with
30: the manner that the first pass handles the
31: type of a shift expression */
32: PCONV, INAREG|INTAREG,
33: SAREG|AWD, TINT|TUNSIGNED,
34: SANY, TPOINT,
35: NAREG|NASL, RLEFT,
36: "",
37:
38: SCONV, INAREG|INTAREG|FORCC,
39: SAREG|AWD, TDOUBLE,
40: SANY, TFLOAT,
41: NAREG|NASL, RESC1|RESCC,
42: " ldd AL\n cvdf\n stf TA1\n",
43:
44: SCONV, INAREG|INTAREG|FORCC,
45: SAREG|AWD, TFLOAT,
46: SANY, TDOUBLE,
47: NAREG|NASL, RESC1|RESCC,
48: " ldfd AL\n std A1\n",
49:
50: SCONV, INAREG|INTAREG|FORCC,
51: SAREG|AWD, TINT|TUNSIGNED,
52: SANY, TFLOAT|TDOUBLE,
53: NAREG|NASL, RESC1|RESCC,
54: " cvlZR AL\n stZR TA1\n",
55:
56: SCONV, INAREG|INTAREG|FORCC,
57: SAREG|AWD, TFLOAT|TDOUBLE,
58: SANY, ANYFIXED,
59: NAREG|NASL, RESC1|RESCC,
60: " ldZL AL\n cvZLl A1\n",
61:
62: /* casts to shorter types */
63: SCONV, INAREG|INTAREG|FORCC,
64: SAREG|SCON, ANYFIXED,
65: SANY, ANYUSIGNED,
66: NAREG|NASL, RESC1|RESCC,
67: " movzZRl AL,A1\n",
68:
69: SCONV, INAREG|INTAREG|FORCC,
70: SNAME, ANYFIXED,
71: SANY, ANYUSIGNED,
72: NAREG|NASL, RESC1|RESCC,
73: " movzZRl ZU,A1\n",
74:
75: SCONV, INAREG|INTAREG|FORCC,
76: SSOREG, ANYFIXED,
77: SANY, ANYUSIGNED,
78: NAREG|NASL, RESC1|RESCC,
79: " movzZRl ZU,A1\n",
80:
81: SCONV, INAREG|INTAREG|FORCC,
82: SAREG|SCON, ANYFIXED,
83: SANY, ANYFIXED,
84: NAREG|NASL, RESC1|RESCC,
85: " cvtZRl AL,A1\n",
86:
87: SCONV, INAREG|INTAREG|FORCC,
88: SNAME, ANYFIXED,
89: SANY, ANYFIXED,
90: NAREG|NASL, RESC1|RESCC,
91: " cvtZRl ZU,A1\n",
92:
93: SCONV, INAREG|INTAREG|FORCC,
94: SSOREG, ANYFIXED,
95: SANY, ANYFIXED,
96: NAREG|NASL, RESC1|RESCC,
97: " cvtZRl ZU,A1\n",
98:
99: INIT, FOREFF,
100: SCON, TANY,
101: SANY, TWORD,
102: 0, RNOP,
103: " .long CL\n",
104:
105: INIT, FOREFF,
106: SCON, TANY,
107: SANY, TSHORT|TUSHORT,
108: 0, RNOP,
109: " .word CL\n",
110:
111: INIT, FOREFF,
112: SCON, TANY,
113: SANY, TCHAR|TUCHAR,
114: 0, RNOP,
115: " .byte CL\n",
116:
117: /* for the use of fortran only */
118:
119: GOTO, FOREFF,
120: SCON, TANY,
121: SANY, TANY,
122: 0, RNOP,
123: " jbr CL\n",
124:
125: GOTO, FOREFF,
126: AWD, TANY,
127: SANY, TANY,
128: 0, RNOP,
129: " jmp *AL\n",
130:
131: GOTO, FOREFF,
132: SAREG, TANY,
133: SANY, TANY,
134: 0, RNOP,
135: " jmp (AL)\n",
136:
137: STARG, FORARG,
138: SCON|SOREG, TANY,
139: SANY, TANY,
140: NTEMP+2*NAREG, RESC3,
141: "ZS",
142:
143: STASG, FORARG,
144: SNAME|SOREG, TANY,
145: SCON|SAREG, TANY,
146: 0, RNULL,
147: " ZT\nZS",
148:
149: STASG, FOREFF,
150: SNAME|SOREG, TANY,
151: SCON|SAREG, TANY,
152: 0, RNOP,
153: "ZS",
154:
155: STASG, INAREG,
156: SNAME|SOREG, TANY,
157: SCON, TANY,
158: NAREG, RESC1,
159: "ZS movl AR,A1\n",
160:
161: STASG, INAREG,
162: SNAME|SOREG, TANY,
163: SAREG, TANY,
164: 0, RRIGHT,
165: " pushl AR\nZS movl (sp)+,AR\n",
166:
167: OPLOG, FORCC,
168: SAREG|AWD, TWORD,
169: SAREG|AWD, TWORD,
170: 0, RESCC,
171: " cmpl AL,AR\nZP",
172:
173: OPLOG, FORCC,
174: SAREG|AWD, TSHORT|TUSHORT,
175: SCON , TUSHORT,
176: NAREG, RESCC,
177: " movzwl AL,A1\n cmpw A1,AR\nZP",
178: OPLOG, FORCC,
179: SAREG|AWD, TSHORT|TUSHORT,
180: SAREG|AWD, TSHORT|TUSHORT,
181: 0, RESCC,
182: " cmpw AL,AR\nZP",
183:
184: OPLOG, FORCC,
185: SAREG|AWD, TCHAR|TUCHAR,
186: SCON , TUCHAR,
187: NAREG, RESCC,
188: " movzbl AL,A1\n cmpb A1,AR\nZP",
189:
190: OPLOG, FORCC,
191: SAREG|AWD, TCHAR|TUCHAR,
192: SAREG|AWD, TCHAR|TUCHAR,
193: 0, RESCC,
194: " cmpb AL,AR\nZP",
195:
196: OPLOG, FORCC,
197: SAREG|AWD, TSHORT|TUSHORT,
198: SSCON, TANY,
199: 0, RESCC,
200: " cmpw AL,AR\nZP",
201:
202:
203: OPLOG, FORCC,
204: SAREG|AWD, TSHORT|TUSHORT,
205: SAREG|AWD, TSHORT|TUSHORT,
206: 0, RESCC,
207: " cmpw AL,AR\nZP",
208:
209: OPLOG, FORCC,
210: SAREG|AWD, TCHAR|TUCHAR,
211: SAREG|AWD, TCHAR|TUCHAR,
212: 0, RESCC,
213: " cmpb AL,AR\nZP",
214:
215: OPLOG, FORCC,
216: SAREG|AWD, TSHORT|TUSHORT,
217: SSCON, TANY,
218: 0, RESCC,
219: " cmpw AL,AR\nZP",
220:
221: OPLOG, FORCC,
222: SAREG|AWD, TCHAR|TUCHAR,
223: SCCON, TANY,
224: 0, RESCC,
225: " cmpb AL,AR\nZP",
226:
227: OPLOG, FORCC,
228: SAREG|AWD, TFLOAT,
229: SAREG|AWD, TFLOAT,
230: 0, RESCC,
231: " ldf AL\n cmpf AR\nZP",
232:
233: OPLOG, FORCC,
234: SZERO, TDOUBLE,
235: SAREG|AWD, TDOUBLE,
236: 0, RESCC,
237: " cmpf2 AL,AR\nZP",
238:
239: OPLOG, FORCC,
240: SAREG|AWD, TDOUBLE,
241: SAREG|AWD, TDOUBLE,
242: 0, RESCC,
243: " cmpZL2 AL,AR\nZP",
244:
245: CCODES, INAREG|INTAREG,
246: SANY, TANY,
247: SANY, TANY,
248: NAREG, RESC1,
249: " movl $1,A1\nZN",
250:
251: UNARY CALL, INAREG|INTAREG,
252: SCON, TANY,
253: SANY, TANY,
254: NAREG|NASL, RESC1, /* should be register 0 */
255: " ZC,CL\n",
256:
257: UNARY CALL, INAREG|INTAREG,
258: SAREG, TANY,
259: SANY, TANY,
260: NAREG|NASL, RESC1, /* should be 0 */
261: " ZC,(AL)\n",
262:
263: UNARY CALL, INAREG|INTAREG,
264: SNAME, TANY,
265: SANY, TANY,
266: NAREG|NASL, RESC1, /* really reg 0 */
267: " ZC,*AL\n",
268:
269: UNARY CALL, INAREG|INTAREG,
270: SSOREG, TANY,
271: SANY, TANY,
272: NAREG|NASL, RESC1, /* really reg 0 */
273: " ZC,*AL\n",
274:
275: FORTCALL, INAREG|INTAREG,
276: SCON, TANY,
277: SAREG|AWD, TFLOAT,
278: NAREG|NASL|NASR, RESC1,
279: " ldf AR\n CLf\n stf TA1\n",
280:
281: ASG OPSHFT, INAREG|FOREFF|FORCC,
282: SAREG|AWD, TWORD,
283: SAREG|SCON, ANYFIXED,
284: 0, RLEFT|RESCC,
285: " ZH AR,AL,AL\n",
286:
287: ASG OPSHFT, INAREG|FOREFF|FORCC,
288: SAREG|AWD, TWORD,
289: AWD, TCHAR|TUCHAR,
290: 0, RLEFT|RESCC,
291: " ZH AR,AL,AL\n",
292:
293: ASG OPSHFT, INAREG|FOREFF|FORCC,
294: SAREG|AWD, TWORD,
295: AWD, ANYFIXED,
296: NAREG, RLEFT|RESCC,
297: " ZB AR,A1\n ZH A1,AL,AL\n",
298:
299: OPSHFT, INAREG|INTAREG|FORCC,
300: SAREG|AWD, TWORD,
301: SAREG|SCON, ANYFIXED,
302: NAREG|NASL|NASR, RESC1|RESCC,
303: " ZH AR,AL,A1\n",
304:
305: OPSHFT, INAREG|INTAREG|FORCC,
306: SAREG|AWD, TWORD,
307: AWD, TCHAR|TUCHAR,
308: NAREG|NASL|NASR, RESC1|RESCC,
309: " ZH AR,AL,A1\n",
310:
311: OPSHFT, INAREG|INTAREG|FORCC,
312: SAREG|AWD, TWORD,
313: AWD, ANYFIXED,
314: NAREG|NASR, RESC1|RESCC,
315: " ZB AR,A1\n ZH A1,AL,A1\n",
316:
317: INCR, FOREFF,
318: AWD, TWORD,
319: SCON, TANY,
320: 0, RLEFT,
321: " ZE\n",
322:
323: DECR, FOREFF,
324: AWD, TWORD,
325: SCON, TANY,
326: 0, RLEFT,
327: " ZE\n",
328:
329: INCR, FOREFF,
330: SAREG, TWORD,
331: SCON, TANY,
332: 0, RLEFT,
333: " ZE\n",
334:
335: DECR, FOREFF,
336: SAREG, TWORD,
337: SCON, TANY,
338: 0, RLEFT,
339: " ZE\n",
340:
341: /* jwf INCR and DECR for SAREG TCHAR|TSHORT matched by ASG PLUS etc */
342:
343: INCR, INAREG|INTAREG,
344: AWD, TANY,
345: SCON, TANY,
346: NAREG, RESC1,
347: " ZD\n",
348:
349: DECR, INAREG|INTAREG,
350: AWD, TANY,
351: SCON, TANY,
352: NAREG, RESC1,
353: " ZD\n",
354:
355: INCR, INAREG|INTAREG,
356: SAREG, TWORD,
357: SCON, TANY,
358: NAREG, RESC1,
359: " ZD\n",
360:
361: DECR, INAREG|INTAREG,
362: SAREG, TWORD,
363: SCON, TANY,
364: NAREG, RESC1,
365: " ZD\n",
366:
367: ASSIGN, INAREG|FOREFF|FORCC,
368: SIREG, TDOUBLE,
369: SZERO, TANY,
370: 0, RLEFT|RESCC,
371: " cvld $0\n std AL\n",
372:
373: ASSIGN, INAREG|FOREFF|FORCC,
374: SAREG|SNAME|SOREG, TDOUBLE,
375: SZERO, TANY,
376: 0, RLEFT|RESCC,
377: " clrl UL\n clrl AL\n",
378:
379: ASSIGN, INAREG|FOREFF|FORCC,
380: SAREG|AWD, TDOUBLE,
381: SIREG, TDOUBLE,
382: 0, RLEFT|RRIGHT|RESCC,
383: " ldd AR\n std AL\n",
384:
385: ASSIGN, INAREG|FOREFF|FORCC,
386: SIREG, TDOUBLE,
387: SAREG|AWD, TDOUBLE,
388: 0, RLEFT|RRIGHT|RESCC,
389: " ldd AR\n std AL\n",
390:
391: ASSIGN, INAREG|FOREFF|FORCC,
392: SAREG|SNAME|SOREG, TDOUBLE,
393: SAREG|SNAME|SOREG, TDOUBLE,
394: 0, RLEFT|RRIGHT|RESCC,
395: " movl UR,UL\n movl AR,AL\n",
396:
397: ASSIGN, INAREG|FOREFF|FORCC,
398: SAREG|AWD, TFLOAT,
399: SZERO, TANY,
400: 0, RLEFT|RESCC,
401: " clrl TAL\n",
402:
403: ASSIGN, INAREG|FOREFF|FORCC,
404: SAREG|AWD, TFLOAT,
405: SAREG|AWD, TFLOAT,
406: 0, RLEFT|RRIGHT|RESCC,
407: " movl AR,TAL\n",
408:
409: ASSIGN, INAREG|FOREFF|FORCC,
410: SAREG|AWD, ANYFIXED,
411: SAREG|AWD, ANYFIXED,
412: 0, RLEFT|RRIGHT|RESCC,
413: " ZA\n",
414:
415: ASSIGN, INAREG|FOREFF,
416: SFLD, TANY,
417: SZERO, TANY,
418: 0, RRIGHT,
419: " andl2 N,AL\n",
420:
421: ASSIGN, INAREG|FOREFF,
422: SFLD, TANY,
423: SCON, TANY,
424: 0, RRIGHT,
425: " andl2 N,AL\n orl2 ZF,AL\n",
426:
427: ASSIGN, INAREG|FOREFF,
428: SFLD, TANY,
429: SAREG|AWD, TWORD,
430: NAREG|NASL, RRIGHT,
431: " shll $H,AR,A1\n andl2 M,A1\n andl2 N,AL\n\
432: orl2 A1,AL\n",
433:
434: /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */
435: UNARY MUL, FOREFF,
436: SCC, TANY,
437: SCC, TANY,
438: 0, RNULL,
439: " help help help\n",
440:
441: REG, INTEMP,
442: SANY, TANY,
443: SAREG, TDOUBLE,
444: 2*NTEMP, RESC1,
445: " movl UR,U1\n movl AR,A1\n",
446:
447: REG, INTEMP,
448: SANY, TANY,
449: SAREG, TANY,
450: NTEMP, RESC1,
451: " movl AR,A1\n",
452:
453: REG, FORARG,
454: SANY, TANY,
455: SAREG, TFLOAT,
456: 0, RNULL,
457: " pushl $0\n pushl AR\n",
458:
459: REG, FORARG,
460: SANY, TANY,
461: SAREG, TDOUBLE,
462: 0, RNULL,
463: " pushl UR\n pushl AR\n",
464:
465: OPLEAF, FOREFF,
466: SANY, TANY,
467: SAREG|AWD, TANY,
468: 0, RLEFT,
469: "",
470:
471: OPLTYPE, INAREG|INTAREG,
472: SANY, TANY,
473: SZERO, TDOUBLE,
474: NAREG|NASR, RESC1,
475: " clrl U1\n clrl A1\n",
476:
477: OPLTYPE, INAREG|INTAREG,
478: SANY, TANY,
479: SIREG, TDOUBLE,
480: NAREG|NASR, RESC1,
481: " ldd AR\n std A1\n",
482:
483: OPLTYPE, INAREG|INTAREG,
484: SANY, TANY,
485: SAREG|SNAME|SOREG|SCON, TDOUBLE,
486: NAREG, RESC1,
487: " movl AR,A1\n movl UR,U1\n",
488:
489: OPLTYPE, INAREG|INTAREG,
490: SANY, TANY,
491: SZERO, TANY,
492: NAREG|NASR, RESC1,
493: " clrl TA1\n",
494:
495: OPLTYPE, INAREG|INTAREG,
496: SANY, TANY,
497: SAREG|AWD, TFLOAT,
498: NAREG|NASR, RESC1,
499: " movl AR,TA1\n",
500:
501: OPLTYPE, INAREG|INTAREG,
502: SANY, TANY,
503: SANY, ANYFIXED,
504: NAREG|NASR, RESC1,
505: " ZA\n",
506:
507: OPLTYPE, FORCC,
508: SANY, TANY,
509: SIREG, TDOUBLE,
510: 0, RESCC,
511: " ldd AR\n tstd\n",
512:
513: OPLTYPE, FORCC,
514: SANY, TANY,
515: SAREG|AWD, TFLOAT|TDOUBLE,
516: 0, RESCC,
517: " tstl AR\n",
518:
519: OPLTYPE, FORCC,
520: SANY, TANY,
521: SANY, ANYFIXED,
522: 0, RESCC,
523: " tstZR AR\n",
524:
525: OPLTYPE, FORARG,
526: SANY, TANY,
527: SANY, TWORD,
528: 0, RNULL,
529: " pushl AR\n",
530:
531: OPLTYPE, FORARG,
532: SANY, TANY,
533: SANY, TCHAR|TSHORT,
534: 0, RNULL,
535: " pushZR AR\n",
536:
537: OPLTYPE, FORARG,
538: SANY, TANY,
539: SANY, TUCHAR|TUSHORT,
540: 0, RNULL,
541: " movzZRl AR,-(sp)\n",
542:
543: OPLTYPE, FORARG,
544: SANY, TANY,
545: SZERO, TFLOAT|TDOUBLE,
546: 0, RNULL,
547: " pushl $0\n pushl $0\n",
548:
549: OPLTYPE, FORARG,
550: SANY, TANY,
551: SIREG, TDOUBLE,
552: 0, RNULL,
553: " ldd AR\n pushd\n",
554:
555: OPLTYPE, FORARG,
556: SANY, TANY,
557: SAREG|AWD, TDOUBLE,
558: 0, RNULL,
559: " pushl UR\n pushl AR\n",
560:
561: OPLTYPE, FORARG,
562: SANY, TANY,
563: SAREG|AWD, TFLOAT,
564: 0, RNULL,
565: " pushl $0\n pushl AR\n",
566:
567: UNARY MINUS, INAREG|INTAREG|FORCC,
568: SAREG|AWD, ANYSIGNED|TUNSIGNED,
569: SANY, TANY,
570: NAREG|NASL, RESC1|RESCC,
571: " mnegZL AL,A1\n",
572:
573: UNARY MINUS, INAREG|INTAREG|FORCC,
574: SAREG|AWD, TFLOAT|TDOUBLE,
575: SANY, TANY,
576: NAREG|NASL, RESC1|RESCC,
577: " lnZL AL\n stZL TA1\n",
578:
579: COMPL, INAREG|INTAREG|FORCC,
580: SAREG|AWD, ANYSIGNED|TUNSIGNED,
581: SANY, TANY,
582: NAREG|NASL, RESC1|RESCC,
583: " mcomZL AL,A1\n",
584:
585: COMPL, INAREG|INTAREG|FORCC,
586: SAREG|AWD, ANYFIXED,
587: SANY, TANY,
588: NAREG|NASL, RESC1|RESCC,
589: " cvtZLl AL,A1\n mcoml A1,A1\n",
590:
591: AND, FORCC,
592: SAREG|AWD, TWORD,
593: SAREG|AWD, TWORD,
594: 0, RESCC,
595: " bitl AR,AL\n",
596:
597: AND, FORCC,
598: SAREG|AWD, TSHORT|TUSHORT,
599: SSCON, TWORD,
600: 0, RESCC,
601: " bitw AR,AL\n",
602:
603: AND, FORCC,
604: SAREG|AWD, TSHORT|TUSHORT,
605: SAREG|AWD, TSHORT|TUSHORT,
606: 0, RESCC,
607: " bitw AR,AL\n",
608:
609: AND, FORCC,
610: SAREG|AWD, TCHAR|TUCHAR,
611: SCCON, TWORD,
612: 0, RESCC,
613: " bitb AR,AL\n",
614:
615: AND, FORCC,
616: SAREG|AWD, TCHAR|TUCHAR,
617: SAREG|AWD, TCHAR|TUCHAR,
618: 0, RESCC,
619: " bitb AR,AL\n",
620:
621: ASG DIV, INAREG|FOREFF|FORCC, /* should have been done in mip */
622: SAREG|AWD, ANYFIXED,
623: SONE, TWORD,
624: 0, RLEFT|RESCC,
625: " tstZL AL\n",
626:
627: ASG DIV, INAREG|FOREFF|FORCC,
628: SAREG|AWD, TUCHAR|TUSHORT,
629: SAREG|AWD, TUCHAR|TUSHORT,
630: 2*NAREG, RLEFT|RESC1|RESCC,
631: "ZX OL2 A2,A1\n cvtlZL A1,AL\n",
632:
633: ASG DIV, INAREG|FOREFF|FORCC,
634: SAREG|AWD, TWORD,
635: SAREG|AWD, TUNSIGNED,
636: 3*NAREG|NEVEN, RLEFT|RESCC,
637: "ZM OE AR,A1,A2,A3\n movl A2,AL\n",
638:
639: DIV, INAREG|INTAREG|FORCC,
640: SAREG|AWD, TUCHAR|TUSHORT,
641: SAREG|AWD, TUCHAR|TUSHORT,
642: 2*NAREG, RESC1|RESCC,
643: "ZX OL2 A2,A1\n",
644:
645: DIV, INAREG|INTAREG|FORCC,
646: SAREG|AWD, TWORD,
647: SAREG|AWD, TUNSIGNED,
648: 3*NAREG|NEVEN, RESC2|RESCC,
649: "ZM OE AR,A1,A2,A3\n",
650:
651: ASG MOD, INAREG|FOREFF,
652: SAREG|AWD, ANYFIXED,
653: SONE, TWORD,
654: 0, RLEFT,
655: " clrZL AL\n",
656:
657: MOD, INAREG|INTAREG,
658: STAREG, TWORD,
659: SONE, TWORD,
660: 0, RLEFT,
661: " clrl AL\n",
662:
663: MOD, INAREG|INTAREG,
664: SAREG|AWD, ANYFIXED,
665: SONE, TWORD,
666: 0, RESC1,
667: " clrl A1\n",
668:
669: ASG MOD, INAREG|FOREFF,
670: SAREG|AWD, TWORD,
671: SAREG|AWD, TWORD,
672: 3*NAREG|NEVEN, RLEFT,
673: "ZM OE AR,A1,A2,A3\n movl A3,AL\n",
674:
675: MOD, INAREG|INTAREG,
676: SAREG|AWD, TWORD,
677: SAREG|AWD, TWORD,
678: 3*NAREG|NEVEN, RESC3,
679: "ZM OE AR,A1,A2,A3\n",
680:
681: ASG MUL, INAREG|FOREFF|FORCC,
682: SAREG|AWD, TCHAR|TUCHAR,
683: SAREG|AWD, TCHAR|TUCHAR,
684: 2*NAREG, RLEFT|RESCC,
685: "ZX OL2 A2,A1\n cvtlb A1,AL\n",
686:
687: ASG MUL, INAREG|FOREFF|FORCC,
688: SAREG|AWD, TUNSIGNED,
689: SAREG|AWD, TUNSIGNED|TINT,
690: NAREG|NEVEN, RLEFT|RESCC,
691: " emul AR,AL,$0,A1\n movl U1,AL\n",
692:
693: ASG MUL, INAREG|FOREFF|FORCC,
694: SAREG|AWD, TUNSIGNED|TINT,
695: SAREG|AWD, TUNSIGNED,
696: NAREG|NEVEN, RLEFT|RESCC,
697: " emul AR,AL,$0,A1\n movl U1,AL\n",
698:
699: ASG OPMUL, INAREG|FOREFF|FORCC,
700: SAREG|AWD, TWORD,
701: SAREG|AWD, TWORD,
702: 0, RLEFT|RESCC,
703: " OL2 AR,AL\n",
704:
705: MUL, INAREG|INTAREG|FORCC,
706: STAREG, TUNSIGNED,
707: SAREG|AWD, TUNSIGNED|TINT,
708: NAREG|NEVEN, RLEFT|RESCC,
709: " emul AR,AL,$0,A1\n movl U1,AL\n",
710:
711: MUL, INAREG|INTAREG|FORCC,
712: STAREG, TUNSIGNED|TINT,
713: SAREG|AWD, TUNSIGNED,
714: NAREG|NEVEN, RLEFT|RESCC,
715: " emul AR,AL,$0,A1\n movl U1,AL\n",
716:
717: OPMUL, INAREG|INTAREG|FORCC,
718: STAREG, TWORD,
719: SAREG|AWD, TWORD,
720: 0, RLEFT|RESCC,
721: " OL2 AR,AL\n",
722:
723: MUL, INAREG|INTAREG|FORCC,
724: SAREG|AWD, TCHAR|TUCHAR,
725: SAREG|AWD, TCHAR|TUCHAR,
726: 2*NAREG, RESC1|RESCC,
727: "ZX mull2 A2,A1\n",
728:
729: MUL, INAREG|INTAREG|FORCC,
730: SAREG|AWD, TUNSIGNED,
731: SAREG|AWD, TUNSIGNED|TINT,
732: NAREG|NEVEN, RESC1|RESCC,
733: " emul AR,AL,$0,A1\n movl U1,A1\n",
734:
735: MUL, INAREG|INTAREG|FORCC,
736: SAREG|AWD, TUNSIGNED|TINT,
737: SAREG|AWD, TUNSIGNED,
738: NAREG|NEVEN, RESC1|RESCC,
739: " emul AR,AL,$0,A1\n movl U1,A1\n",
740:
741: OPMUL, INAREG|INTAREG|FORCC,
742: SAREG|AWD, TWORD,
743: SAREG|AWD, TWORD,
744: NAREG|NASL|NASR, RESC1|RESCC,
745: " OL3 AR,AL,A1\n",
746:
747: ASG PLUS, INAREG|FOREFF|FORCC,
748: SAREG, TWORD,
749: SONE, TINT,
750: 0, RLEFT|RESCC,
751: " incZL AL\n",
752:
753: ASG PLUS, INAREG|FOREFF|FORCC,
754: AWD, ANYFIXED,
755: SONE, TINT,
756: 0, RLEFT|RESCC,
757: " incZL AL\n",
758:
759: ASG MINUS, INAREG|FOREFF|FORCC,
760: SAREG, TWORD,
761: SONE, TINT,
762: 0, RLEFT|RESCC,
763: " decZL AL\n",
764:
765: ASG MINUS, INAREG|FOREFF|FORCC,
766: AWD, ANYFIXED,
767: SONE, TINT,
768: 0, RLEFT|RESCC,
769: " decZL AL\n",
770:
771: PLUS, INAREG|INTAREG|FORCC,
772: STAREG, TWORD,
773: SONE, TWORD,
774: 0, RLEFT|RESCC,
775: " incZL AL\n",
776:
777: MINUS, INAREG|INTAREG|FORCC,
778: STAREG, TWORD,
779: SONE, TWORD,
780: 0, RLEFT|RESCC,
781: " decZL AL\n",
782:
783: ASG OPSIMP, INAREG|FOREFF|FORCC,
784: SAREG|AWD, TWORD,
785: SAREG|AWD, TWORD,
786: 0, RLEFT|RESCC,
787: " OL2 AR,AL\n",
788:
789: ASG OPSIMP, INAREG|FOREFF|FORCC,
790: SAREG, TWORD,
791: SAREG, TSHORT|TUSHORT|TCHAR|TUCHAR,
792: 0, RLEFT|RESCC,
793: " OL2 AR,AL\n",
794:
795: ASG OPSIMP, INAREG|FOREFF|FORCC,
796: AWD, TSHORT|TUSHORT,
797: SAREG|AWD, TSHORT|TUSHORT,
798: 0, RLEFT|RESCC,
799: " OW2 AR,AL\n",
800:
801: ASG OPSIMP, INAREG|FOREFF|FORCC,
802: AWD, TSHORT|TUSHORT,
803: SSCON, TWORD,
804: 0, RLEFT|RESCC,
805: " OW2 AR,AL\n",
806:
807: ASG OPSIMP, INAREG|FOREFF|FORCC,
808: AWD, TCHAR|TUCHAR,
809: SAREG|AWD, TCHAR|TUCHAR,
810: 0, RLEFT|RESCC,
811: " OB2 AR,AL\n",
812:
813: ASG OPSIMP, INAREG|FOREFF|FORCC,
814: AWD, TCHAR|TUCHAR,
815: SCCON, TWORD,
816: 0, RLEFT|RESCC,
817: " OB2 AR,AL\n",
818:
819: OPSIMP, INAREG|INTAREG|FORCC,
820: STAREG, ANYFIXED,
821: SAREG|AWD, TWORD,
822: 0, RLEFT|RESCC,
823: " OL2 AR,AL\n",
824:
825: OPSIMP, INAREG|INTAREG|FORCC,
826: SAREG|AWD, TWORD,
827: SAREG|AWD, TWORD,
828: NAREG|NASL|NASR, RESC1|RESCC,
829: " OL3 AR,AL,A1\n",
830:
831: ASG OPSIMP, INAREG|FOREFF,
832: SAREG|AWD, TFLOAT|TDOUBLE,
833: SZERO, TANY,
834: 0, RLEFT,
835: "",
836:
837: ASG MUL, INAREG|FOREFF|FORCC,
838: SIREG, TDOUBLE,
839: SZERO, TANY,
840: 0, RLEFT|RESCC,
841: " cvld $0\n std AL\n",
842:
843: ASG MUL, INAREG|FOREFF|FORCC,
844: SAREG|SNAME|SOREG, TDOUBLE,
845: SZERO, TANY,
846: 0, RLEFT|RESCC,
847: " clrl UL\n clrl AL\n",
848:
849: ASG MUL, INAREG|FOREFF|FORCC,
850: SAREG|AWD, TFLOAT,
851: SZERO, TANY,
852: 0, RLEFT|RESCC,
853: " clrl TAL\n",
854:
855: ASG OPFLOAT, INAREG|FOREFF|FORCC,
856: SAREG|AWD, TFLOAT,
857: SAREG|AWD, TFLOAT,
858: 0, RLEFT|RESCC,
859: " ldf AL\n OF AR\n stf TAL\n",
860:
861: ASG OPFLOAT, INAREG|FOREFF|FORCC,
862: SAREG|AWD, TDOUBLE,
863: SAREG|AWD, TDOUBLE,
864: 0, RLEFT|RESCC,
865: " ldd AL\n OD AR\n std AL\n",
866:
867: OPSIMP, INAREG|INTAREG,
868: SAREG, TFLOAT|TDOUBLE,
869: SZERO, TANY,
870: 0, RLEFT,
871: "T",
872:
873: OPSIMP, INAREG|INTAREG|FORCC,
874: AWD, TFLOAT,
875: SZERO, TANY,
876: NAREG, RESC1|RESCC,
877: " movl AL,A1\n",
878:
879: OPSIMP, INAREG|INTAREG|FORCC,
880: AWD, TDOUBLE,
881: SZERO, TANY,
882: NAREG, RESC1|RESCC,
883: " movl UL,U1\n movl AL,A1\n",
884:
885: MUL, INAREG|INTAREG|FORCC,
886: SAREG|AWD, TDOUBLE,
887: SZERO, TANY,
888: NAREG|NASR, RESC1|RESCC,
889: " clrl U1\n clrl A1\n",
890:
891: MUL, INAREG|INTAREG|FORCC,
892: SAREG|AWD, TFLOAT,
893: SZERO, TANY,
894: NAREG|NASR, RESC1|RESCC,
895: " clrl TA1\n",
896:
897: OPFLOAT, INAREG|INTAREG|FORCC,
898: SAREG|AWD, TFLOAT,
899: SAREG|AWD, TFLOAT,
900: NAREG|NASL|NASR, RESC1|RESCC,
901: " ldf AL\n OF AR\n stf TA1\n",
902:
903: OPFLOAT, INAREG|INTAREG|FORCC,
904: SAREG|AWD, TDOUBLE,
905: SAREG|AWD, TDOUBLE,
906: NAREG|NASL|NASR, RESC1|RESCC,
907: " ldd AL\n OD AR\n std A1\n",
908:
909: /* Default actions for hard trees ... */
910:
911: # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
912:
913: UNARY MUL, DF( UNARY MUL ),
914:
915: INCR, DF(INCR),
916:
917: DECR, DF(INCR),
918:
919: ASSIGN, DF(ASSIGN),
920:
921: STASG, DF(STASG),
922:
923: FLD, DF(FLD),
924:
925: OPLEAF, DF(NAME),
926:
927: OPLOG, FORCC,
928: SANY, TANY,
929: SANY, TANY,
930: REWRITE, BITYPE,
931: "",
932:
933: OPLOG, DF(NOT),
934:
935: COMOP, DF(COMOP),
936:
937: INIT, DF(INIT),
938:
939: OPUNARY, DF(UNARY MINUS),
940:
941:
942: ASG OPANY, DF(ASG PLUS),
943:
944: OPANY, DF(BITYPE),
945:
946: FREE, FREE, FREE, FREE, FREE, FREE, FREE, FREE, "help; I'm in trouble\n" };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.