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