|
|
1.1 root 1: %{
2: /*
3: * c code tables-- compile to register
4: */
5:
6: struct table regtab[] = {
7: {106,cr106},
8: {30,cr70},
9: {31,cr70},
10: {32,cr32},
11: {33,cr32},
12: {37,cr37},
13: {38,cr37},
14: {98,cr100},
15: {99,cr100},
16: {80,cr80},
17: {40,cr40},
18: {41,cr40 /* - like + */},
19: {42,cr42},
20: {43,cr43},
21: {14,cr14},
22: {44,cr43},
23: {45,cr45},
24: {46,cr40},
25: {55,cr40},
26: {48,cr40},
27: {49,cr49},
28: {70,cr70},
29: {71,cr70},
30: {72,cr72},
31: {73,cr73},
32: {74,cr74},
33: {75,cr75},
34: {76,cr72},
35: {78,cr70},
36: {85,cr70},
37: {79,cr79},
38: {102,cr102},
39: {51,cr51},
40: {52,cr52},
41: {56,cr56},
42: {57,cr57},
43: {58,cr58},
44: {59,cr59},
45: {91,cr91},
46: {82,cr82},
47: {83,cr82},
48: {84,cr82},
49: {86,cr86},
50: {87,cr86},
51: {88,cr86},
52: {16,cr16},
53: {92,cr92},
54: {17,cr43},
55: {18,cr74},
56: {109,cr109},
57: {117,cr117},
58: {118,cr117},
59: {119,cr119},
60: {120,cr119},
61: {107,cr107},
62: {0}
63: };
64: %}
65:
66: /* goto */
67: cr102:
68: %a,n
69: jmp A1
70:
71: %n*,n
72: F*
73: jmp #1(R)
74:
75: /* call */
76: cr100:
77: %a,n
78: jsr pc,IA1
79:
80: %n*,n
81: F*
82: jsr pc,#1(R)
83:
84: %n,n
85: F
86: jsr pc,(R)
87:
88: /* addressible */
89: cr106:
90: %z,n
91: clr R
92:
93: %zf,n
94: clrf R
95:
96: %aub,n
97: movb A1,R
98: bic $!377,R
99:
100: %a,n
101: %ad,n
102: movB1 A1,R
103:
104: %af,n
105: movof A1,R
106:
107: %nub*,n
108: F*
109: movb #1(R),R
110: bic $!377,R
111:
112: %n*,n
113: %nd*,n
114: F*
115: movB1 #1(R),R
116:
117: %nf*,n
118: F*
119: movof #1(R),R
120:
121: %al,n
122: mov A1+,R+
123: mov A1,R
124:
125: %nl*,n
126: F*
127: mov #1+2(R),R+
128: mov #1(R),R
129:
130: %n,n
131: F
132:
133: /* ++,-- postfix */
134: cr32:
135: %a,1
136: movB1 A1',R
137: I'B1 A1''
138:
139: %aw,n
140: mov A1',R
141: I A2,A1''
142:
143: %aub,n
144: clr R
145: bisb A1',R
146: I'b A1''
147:
148: %e*,1
149: F1*
150: movB1 #1(R1),R
151: I'B1 #1(R1)
152:
153: %n*,1
154: F*
155: movB1 #1(R),-(sp)
156: I'B1 #1(R)
157: movB1 (sp)+,R
158:
159: %ew*,n
160: F1*
161: mov #1(R1),R
162: I A2,#1(R1)
163:
164: %eub*,n
165: F1*
166: clr R
167: bisb #1(R1),R
168: I'b #1(R1)
169:
170: %nw*,n
171: F*
172: mov #1(R),-(sp)
173: I A2,#1(R)
174: mov (sp)+,R
175:
176: %nub*,n
177: F*
178: movb (R),-(sp)
179: I'b (R)
180: clr R
181: bisb (sp)+,R
182:
183: %al,1
184: F
185: I $1,A1+
186: V A1
187:
188: %el*,1
189: F1*
190: mov #1+2(R1),R+
191: mov #1(R1),R
192: I $1,#1+2(R1)
193: V #1(R1)
194:
195: %nl*,1
196: F*
197: mov #1+2(R),-(sp)
198: mov #1(R),-(sp)
199: I $1,#1+2(R)
200: V #1(R)
201: mov (sp)+,R
202: mov (sp)+,R+
203:
204: /* - unary, ~ */
205: cr37:
206: %n,n
207: %nf,n
208: F
209: IBF R
210:
211: %nl,n
212: F
213: I R
214: I R+
215: V R
216:
217: /* = */
218: cr80:
219: %a,n
220: %ad,nf
221: S
222: movB1 R,A1
223:
224: %aub,n
225: S
226: movB1 R,A1
227: bic $!377,R
228:
229: %af,nf
230: S
231: movfo R,A1
232:
233: %nd*,af
234: F*
235: S
236: movf R,#1(R)
237:
238: %n*,aw
239: F*
240: movB1 A2,#1(R)
241: movB1 #1(R),R
242:
243: %nf*,af
244: F*
245: S
246: movfo R,#1(R)
247:
248: %n*,e
249: F*
250: S1
251: movB1 R1,#1(R)
252: movB1 R1,R
253:
254: %nub*,e
255: F*
256: S1
257: movB1 R1,#1(R)
258: mov R1,R
259: bic $!377,R
260:
261: %ed*,nf
262: S
263: F1*
264: movf R,#1(R1)
265:
266: %ef*,nf
267: S
268: F1*
269: movfo R,#1(R1)
270:
271: %n*,n
272: %nd*,nf
273: FS*
274: S
275: movB1 R,*(sp)+
276:
277: %nub*,n
278: FS*
279: S
280: movB1 R,*(sp)+
281: bic $!377,R
282:
283: %nf*,nf
284: FS*
285: S
286: movfo R,*(sp)+
287:
288: %al,nl
289: S
290: mov R+,A1+
291: mov R,A1
292:
293: %el*,nl
294: S
295: F1*
296: mov R+,2+#1(R1)
297: mov R,#1(R1)
298:
299: %nl*,nl
300: FS*
301: S
302: mov R,*(sp)
303: add $2,(sp)
304: mov R+,*(sp)+
305:
306: /* field assign, value in reg. */
307: cr16:
308: %a,n
309: S
310: bicB1 Z,A1'
311: bisB1 R,A1''
312:
313: %e*,n
314: % [fas1]
315:
316: %n*,n
317: SS
318: F*
319: bicB1 Z,#1(R)
320: bisB1 (sp),#1(R)
321: mov (sp)+,R
322:
323: /* +, -, |, &~, << */
324: cr40:
325: %n,z
326: F
327:
328: %n,1
329: F
330: I' R
331:
332: %[add1:]
333: %n,aw
334: %nf,ad
335: F
336: IB2 A2,R
337:
338: %[add2:]
339: %n,ew*
340: %nf,ed*
341: F
342: S1*
343: IB2 #2(R1),R
344:
345: %[add3:]
346: %n,e
347: %nf,ef
348: F
349: S1
350: IBF R1,R
351:
352: %[add4:]
353: %n,nw*
354: %nf,nd*
355: SS*
356: F
357: IB2 *(sp)+,R
358:
359: %[add5:]
360: %n,n
361: %nf,nf
362: SS
363: F
364: IBF (sp)+,R
365:
366: %nl,c
367: %nl,au
368: F
369: I A2,R+
370: V R
371:
372: %nl,eu
373: F
374: S1
375: I R1,R+
376: V R
377:
378: %nl,al
379: F
380: I A2,R
381: I A2+,R+
382: V R
383:
384: %[addl1:]
385: %nl,el
386: F
387: S1
388: I R1+,R+
389: V R
390: I R1,R
391:
392: %[addl2:]
393: %nl,nl
394: SS
395: F
396: I (sp)+,R
397: I (sp)+,R+
398: V R
399:
400: /* ^ -- xor */
401: cr49:
402: %n,e
403: % [add3]
404:
405: %n,n
406: FS
407: S
408: xor R,(sp)
409: mov (sp)+,R
410:
411: %nl,el
412: % [addl1]
413:
414: %nl,nl
415: SS
416: F
417: I R,(sp)
418: mov (sp)+,R
419: I R+,(sp)
420: mov (sp)+,R+
421:
422: /* >> (all complicated cases taken care of by << -) */
423: cr45:
424: %n,1
425: F
426: asr R
427:
428: /* * -- R must be odd on integers */
429: cr42:
430: %n,aw
431: %nf,ad
432: % [add1]
433:
434: %n,ew*
435: %nf,ed*
436: % [add2]
437:
438: %n,e
439: %nf,ef
440: % [add3]
441:
442: %n,n
443: %nf,nf
444: % [add5]
445:
446: /* / R must be odd on integers */
447: cr43:
448: %n,aw
449: F
450: T
451: I A2,R-
452:
453: %n,ew*
454: F
455: T
456: S1*
457: I #2(R1),R-
458:
459: %n,e
460: F
461: T
462: S1
463: I R1,R-
464:
465: %n,n
466: SS
467: F
468: T
469: I (sp)+,R-
470:
471: %nf,ad
472: % [add1]
473:
474: %nf,ed*
475: % [add2]
476:
477: %nf,ef
478: % [add3]
479:
480: %nf,nf
481: % [add5]
482:
483: /* PTOI */
484: cr14:
485: %nl,a
486: F!
487: div A2,R
488:
489: /* =+, =-, =|, =&~ */
490: cr70:
491: %[addq1:]
492: %aw,aw
493: I A2,A1'
494: mov A1'',R
495:
496: %[addq20:]
497: %aub,aw
498: clr R
499: bisb A1',R
500: I A2,R
501: movb R,A1''
502: bic $!377,R
503:
504: %[addq1a:]
505: %a,aw
506: %ad,ad
507: movB1 A1',R
508: IBF A2,R
509: movB1 R,A1''
510:
511: %[addq2:]
512: %aw,nw*
513: S*
514: I #2(R),A1'
515: mov A1'',R
516:
517: %[addq3:]
518: %aw,n
519: S
520: I R,A1'
521: mov A1'',R
522:
523: %[addq21:]
524: %aub,n
525: SS
526: clr R
527: bisb A1',R
528: I (sp)+,R
529: movb R,A1''
530: bic $!377,R
531:
532: %[addq4:]
533: %ew*,nw*
534: S*
535: F1*
536: I #2(R),#1(R1)
537: mov #1(R1),R
538:
539: %[addq4a:]
540: %ad,ef
541: movf A1',R
542: S1
543: IBF R1,R
544: movf R,A1''
545:
546: %[addq5:]
547: %a,n
548: %ad,nf
549: SS
550: movB1 A1',R
551: IBF (sp)+,R
552: movB1 R,A1''
553:
554: %[addq6:]
555: %af,nf
556: SS
557: movof A1',R
558: IBF (sp)+,R
559: movfo R,A1''
560:
561: %[addq7:]
562: %ew*,n
563: S
564: F1*
565: I R,#1(R1)
566: mov #1(R1),R
567:
568: %[addq8:]
569: %nw*,n
570: SS
571: F*
572: I (sp)+,#1(R)
573: mov #1(R),R
574:
575: %[addq9:]
576: %n*,n
577: FS*
578: SS
579: movB1 *2(sp),R
580: IBF (sp)+,R
581: movB1 R,*(sp)+
582:
583: %[addq22:]
584: %nub*,n
585: FS*
586: SS
587: clr R
588: bisb *2(sp),R
589: I (sp)+,R
590: movb R,*(sp)+
591: bic $!377,R
592:
593: %[addq9a:]
594: %nd*,nf
595: SS
596: F*
597: movB1 #1(R),R
598: IBF (sp)+,R
599: movB1 R,#1(R)
600:
601: %[addq10:]
602: %nf*,nf
603: SS
604: F*
605: movof #1(R),R1
606: IBF (sp)+,R1
607: movfo R1,#1(R)
608: movf R1,R
609:
610: %al,c
611: I A2,A1+
612: V A1
613: F
614:
615: %al,al
616: I A2+,A1+
617: V A1
618: I A2,A1
619: F
620:
621: %al,nl
622: S
623: I R+,A1+
624: V A1
625: I R,A1
626: F
627:
628: %nl*,c
629: F*
630: I A2,#1+2(R)
631: V #1(R)
632: mov #1+2(R),R+
633: mov #1(R),R
634:
635: %nl*,al
636: F*
637: I A2+,#1+2(R)
638: V #1(R)
639: I A2,#1(R)
640: mov #1+2(R),R+
641: mov #1(R),R
642:
643: %nl*,nl
644: SS
645: F*
646: I (sp)+,#1(R)
647: I (sp)+,#1+2(R)
648: V #1(R)
649: mov #1+2(R),R+
650: mov #1(R),R
651:
652: /* =*, =<< (for integer multiply, R must be odd) */
653: cr72:
654: %a,aw
655: %ad,ad
656: % [addq1a]
657:
658: %ad,ef
659: % [addq4a]
660:
661: %a,n
662: %ad,nf
663: % [addq5]
664:
665: %af,nf
666: % [addq6]
667:
668: %aub,aw
669: % [addq20]
670:
671: %aub,n
672: % [addq21]
673:
674: %n*,n
675: % [addq9]
676:
677: %nub*,n
678: % [addq22]
679:
680: %nd*,nf
681: % [addq9a]
682:
683: %nf*,nf
684: % [addq10]
685:
686: /* =/ ; R must be odd on integers */
687: cr73:
688: %a,aw
689: movB1 A1',R
690: V R-
691: IBF A2,R-
692: movB1 R-,A1''
693:
694: %a,n
695: SS
696: movB1 A1',R
697: V R-
698: I (sp)+,R-
699: movB1 R-,A1''
700:
701: %aub,n
702: SS
703: clr R
704: bisB1 A1',R
705: V R-
706: I (sp)+,R-
707: movB1 R-,A1''
708: bic $!377,R-
709:
710: %e*,n
711: SS
712: F1*
713: movB1 #1(R1),R
714: V R-
715: I (sp)+,R-
716: movB1 R-,#1(R1)
717:
718: %n*,n
719: FS*
720: SS
721: movB1 *2(sp),R
722: V R-
723: I (sp)+,R-
724: movB1 R-,*(sp)+
725:
726: %nub*,n
727: FS*
728: SS
729: clr R
730: bisB1 *2(sp),R
731: V R-
732: I (sp)+,R-
733: movB1 R-,*(sp)+
734: bic $!377,R-
735:
736: %ad,ad
737: % [addq1a]
738:
739: %ad,ef
740: % [addq4a]
741:
742: %ad,nf
743: % [addq5]
744:
745: %af,nf
746: % [addq6]
747:
748: %nd*,nf
749: % [addq9a]
750:
751: %nf*,nf
752: % [addq10]
753:
754: /* =mod; R must be odd on integers */
755: cr74:
756: %a,aw
757: movB1 A1',R
758: V R-
759: I A2,R-
760: movB1 R,A1''
761:
762: %a,n
763: SS
764: movB1 A1',R
765: V R-
766: I (sp)+,R-
767: movB1 R,A1''
768:
769: %aub,n
770: SS
771: clr R
772: bisB1 A1',R
773: V R-
774: I (sp)+,R-
775: movB1 R,A1''
776: bic $!377,R
777:
778: %e*,n
779: SS
780: F1*
781: movB1 #1(R1),R
782: V R-
783: I (sp)+,R-
784: movB1 R,#1(R1)
785:
786: %n*,n
787: FS*
788: SS
789: movB1 *2(sp),R
790: V R-
791: I (sp)+,R-
792: movB1 R,*(sp)+
793:
794: %nub*,n
795: FS*
796: SS
797: clr R
798: bisB1 *2(sp),R
799: V R-
800: I (sp)+,R-
801: movB1 R,*(sp)+
802: bic $!377,R
803:
804: /* =^ -- =xor */
805: cr79:
806: %aw,n
807: % [addq3]
808:
809: %ab,n
810: SS
811: movb A1',R
812: xor R,(sp)
813: mov (sp)+,R
814: movb R,A1''
815:
816: %aub,n
817: SS
818: clr R
819: bisb A1',R
820: xor R,(sp)
821: mov (sp)+,R
822: movb R,A1''
823: bic $!377,R
824:
825: %n*,n
826: FS*
827: movB1 *(sp),-(sp)
828: S
829: xor R,(sp)
830: movB1 (sp)+,R
831: movB1 R,*(sp)+
832:
833: %nub*,n
834: FS*
835: clr -(sp)
836: bisb *2(sp),(sp)
837: S
838: xor R,(sp)
839: mov (sp)+,R
840: movb R,*(sp)+
841: bic $!377,R
842:
843: /* =>> (all complicated cases done by =<< -) */
844: cr75:
845: %a,1
846: asrB1 A1'
847: movB1 A1'',R
848:
849: %n*,1
850: F*
851: asrB1 #1(R)
852: movB1 #1(R),R
853:
854: /* << for longs */
855: cr91:
856: %nl,aw
857: % [add1]
858:
859: %nl,ew*
860: % [add2]
861:
862: %nl,e
863: % [add3]
864:
865: %nl,nw*
866: % [add4]
867:
868: %nl,n
869: % [add5]
870:
871: /* int -> float */
872: cr51:
873: %aw,n
874: movif A1,R
875:
876: %nw*,n
877: F*
878: movif #1(R),R
879:
880: %n,n
881: F
882: movif R,R
883:
884: /* float, double -> int */
885: cr52:
886: %nf,n
887: F
888: movfi R,R
889:
890: /* double (float) to long */
891: cr56:
892: %nf,n
893: F
894: setl
895: movfi R,-(sp)
896: mov (sp)+,R
897: mov (sp)+,R+
898: seti
899:
900: /* long to double */
901: cr57:
902: %al,n
903: setl
904: movif A1,R
905: seti
906:
907: %nl*,n
908: F*
909: setl
910: movif #1(R),R
911: seti
912:
913: %nl,n
914: FS
915: setl
916: movif (sp)+,R
917: seti
918:
919: /* integer to long */
920: cr58:
921: %eu,n
922: F1!
923: clr R
924:
925: %nu,n
926: F
927: mov R,R1
928: clr R
929:
930: %e,n
931: F1!
932: sxt R
933:
934: %n,n
935: F
936: mov R,R1
937: sxt R
938:
939: /* long to integer */
940: cr59:
941: %al,n
942: mov A1+,R
943:
944: %nl*,n
945: F*
946: mov #1+2(R),R
947:
948: /* *, /, remainder for longs. */
949: cr82:
950: %nl,nl
951: SS
952: FS
953: jsr pc,I
954: add $10,sp
955:
956: /* =*, =/, =rem for longs */
957: /* Operands of the form &x op y, so stack space is known. */
958: cr86:
959: %n,nl
960: SS
961: FS
962: jsr pc,I
963: add $6,sp
964:
965: /* convert integer to character (sign extend) */
966: cr109:
967: %n,n
968: F
969: movb R,R
970:
971: /* divide, remainder for unsigned */
972: cr117:
973: %n,e
974: F!
975: S1!
976: jsr pc,I
977:
978: %n,n
979: SS
980: F!
981: mov (sp)+,R1
982: jsr pc,I
983:
984: /* /= mod for unsigned */
985: cr119:
986: %aw,e
987: %ab,e
988: movB1 A1',R
989: S1!
990: jsr pc,I
991: movB1 R,A1''
992:
993: %aub,e
994: clr R
995: bisB1 A1',R
996: S1!
997: jsr pc,I
998: movb R,A1''
999: bic $!377,R
1000:
1001: %aw,n
1002: %ab,n
1003: SS
1004: movB1 A1',R
1005: mov (sp)+,R1
1006: jsr pc,I
1007: movB1 R,A1''
1008:
1009: %nw*,n
1010: %nb*,n
1011: FS*
1012: S!
1013: mov R,R1
1014: movB1 *(sp),R
1015: jsr pc,I
1016: movB1 R,*(sp)+
1017:
1018: %aub,n
1019: SS
1020: clr R
1021: bisB1 A1',R
1022: mov (sp)+,R1
1023: jsr pc,I
1024: movB1 R,A1''
1025: bic $!377,R
1026:
1027: %nub*,n
1028: FS*
1029: S!
1030: mov R,R1
1031: clr R
1032: bisb *(sp),R
1033: jsr pc,I
1034: movB1 R,*(sp)+
1035: bic $!377,R
1036:
1037: /* (int *) - (int *) */
1038: cr107:
1039: %n,n
1040: F?
1041: ror R
1042:
1043: %{
1044: /*
1045: * c code tables -- compile for side effects.
1046: * Also set condition codes properly (except for ++, --)
1047: */
1048:
1049: struct table efftab[] = {
1050: {30,ci70},
1051: {31,ci70},
1052: {32,ci70},
1053: {33,ci70},
1054: {80,ci80},
1055: {70,ci70},
1056: {71,ci70 /* - like + */},
1057: {78,ci78},
1058: {79,ci79},
1059: {85,ci78},
1060: {75,ci75},
1061: {76,ci76},
1062: {16,ci16},
1063: {116,ci116},
1064: {0}
1065: };
1066: %}
1067:
1068: /* = */
1069: ci80:
1070: %[move1:]
1071: %a,z
1072: %ad,zf
1073: %aub,z
1074: I'B1 A1
1075:
1076: %[move2:]
1077: %n*,z
1078: %nd*,zf
1079: %nub*,z
1080: F*
1081: I'B1 #1(R)
1082:
1083: %[move3:]
1084: %a,aw
1085: %ab,a
1086: %aub,a
1087: IBE A2,A1
1088:
1089: %[move4:]
1090: %ab,n*
1091: %a,nw*
1092: %aub,n*
1093: S*
1094: IBE #2(R),A1
1095:
1096: %[move5:]
1097: %a,n
1098: %aub,n
1099: S
1100: IB1 R,A1
1101:
1102: %[move6:]
1103: %n*,aw
1104: %nb*,a
1105: %nub*,a
1106: F*
1107: IBE A2,#1(R)
1108:
1109: %[move7:]
1110: %n*,ew*
1111: %nb*,e*
1112: %nub*,e*
1113: F*
1114: S1*
1115: IBE #2(R1),#1(R)
1116:
1117: %[move8:]
1118: %n*,e
1119: %nub*,e
1120: F*
1121: S1
1122: IB1 R1,#1(R)
1123:
1124: %[move9:]
1125: %e*,nw*
1126: %eb*,n*
1127: %eub*,n*
1128: S*
1129: F1*
1130: IBE #2(R),#1(R1)
1131:
1132: %[move10:]
1133: %e*,n
1134: %eub*,n
1135: S
1136: F1*
1137: IB1 R,#1(R1)
1138:
1139: %[move11:]
1140: %n*,nw*
1141: %nb*,n*
1142: %nub*,n*
1143: FS*
1144: S*
1145: IBE #2(R),*(sp)+
1146:
1147: %[move12:]
1148: %n*,n
1149: %nub*,n
1150: FS*
1151: S
1152: IB1 R,*(sp)+
1153:
1154: %aw,nf
1155: S
1156: movfi R,A1
1157:
1158: %ew*,nf
1159: S
1160: F1*
1161: movfi R,#1(R1)
1162:
1163: %al,z
1164: clr A1
1165: clr A1+
1166:
1167: %nl*,z
1168: F*
1169: clr #1(R)
1170: clr 2+#1(R)
1171:
1172: %[move13a:]
1173: %al,aw
1174: I A2,A1+
1175: V A1
1176:
1177: %al,nw*
1178: S*
1179: mov #2(R),A1+
1180: V A1
1181:
1182: %al,n
1183: S
1184: mov R,A1+
1185: V A1
1186:
1187: %al,nf
1188: S
1189: setl
1190: movfi R,A1
1191: seti
1192:
1193: %el*,nf
1194: S
1195: F1*
1196: setl
1197: movfi R,#1(R1)
1198: seti
1199:
1200: %[move13:]
1201: %al,al
1202: I A2,A1
1203: I A2+,A1+
1204: V A1
1205:
1206: %[move14:]
1207: %al,nl*
1208: S*
1209: I #2(R),A1
1210: I #2+2(R),A1+
1211: V A1
1212:
1213: %[move15:]
1214: %al,nl
1215: S
1216: I R,A1
1217: I R+,A1+
1218: V A1
1219:
1220: %[move14a:]
1221: %nl*,aw
1222: F*
1223: I A2,#1+2(R)
1224: V #1(R)
1225:
1226: %[move16a:]
1227: %nl*,al
1228: F*
1229: I A2+,#1+2(R)
1230: V #1(R)
1231: I A2,#1(R)
1232:
1233: %[move16:]
1234: %el*,nl
1235: S
1236: F1*
1237: I R+,#1+2(R1)
1238: V #1(R1)
1239: I R,#1(R1)
1240:
1241: %nl*,n
1242: SS
1243: F*
1244: mov (sp)+,#1+2(R)
1245: V #1(R)
1246:
1247: %[move17:]
1248: %nl*,nl
1249: SS
1250: F*
1251: I (sp)+,#1(R)
1252: I (sp)+,#1+2(R)
1253: V #1(R)
1254:
1255: /* =| and =& ~ */
1256: ci78:
1257: %a,aw
1258: %ab,a
1259: %aub,ab
1260: % [move3]
1261:
1262: %a,n
1263: % [move5]
1264:
1265: %n*,aw
1266: %nb*,a
1267: %nub*,a
1268: % [move6]
1269:
1270: %n*,ew*
1271: %nb*,e*
1272: %nub*,e*
1273: % [move7]
1274:
1275: %n*,e
1276: % [move8]
1277:
1278: %e*,nw*
1279: %eb*,n*
1280: %eub*,n*
1281: % [move9]
1282:
1283: %e*,n
1284: % [move10]
1285:
1286: %n*,nw*
1287: %nb*,n*
1288: %nub*,n*
1289: % [move11]
1290:
1291: %n*,n
1292: % [move12]
1293:
1294: %al,c
1295: %al,au
1296: % [move13a]
1297:
1298: %al,al
1299: % [move13]
1300:
1301: %al,nl*
1302: % [move14]
1303:
1304: %al,nl
1305: % [move15]
1306:
1307: %nl*,c
1308: % [move14a]
1309:
1310: %nl*,al
1311: % [move16a]
1312:
1313: %el*,nl
1314: % [move16]
1315:
1316: %nl*,nl
1317: % [move17]
1318:
1319: /* =^ */
1320: ci79:
1321: %al,nl
1322: % [move15]
1323:
1324: %el*,nl
1325: % [move16]
1326:
1327: %nl*,nl
1328: FS*
1329: S
1330: I R,*(sp)
1331: mov (sp)+,R
1332: I R+,2(R)
1333:
1334: /* =+ */
1335: ci70:
1336: %n*,z
1337: %a,z
1338: %aub,1
1339: %a,1
1340: I'B1 A1
1341:
1342: %aw,aw
1343: % [move3]
1344:
1345: %aw,nw*
1346: % [move4]
1347:
1348: %aw,n
1349: % [move5]
1350:
1351: %n*,1
1352: %nub*,1
1353: % [move2]
1354:
1355: %ew*,nw*
1356: % [move9]
1357:
1358: %a,ew*
1359: S*
1360: movB1 A1',R1
1361: I #2(R),R1
1362: movB1 R1,A1''
1363:
1364: %a,n
1365: S
1366: movB1 A1',R1
1367: I R,R1
1368: movB1 R1,A1''
1369:
1370: %aub,n
1371: S
1372: clr R1
1373: bisB1 A1',R1
1374: I R,R1
1375: movB1 R1,A1''
1376:
1377: %ew*,n
1378: % [move10]
1379:
1380: %nw*,n
1381: % [move12]
1382:
1383: %n*,n
1384: SS
1385: F*
1386: movB1 #1(R),R1
1387: I (sp)+,R1
1388: movB1 R1,#1(R)
1389:
1390: %nub*,n
1391: SS
1392: F*
1393: clr R1
1394: bisB1 #1(R),R1
1395: I (sp)+,R1
1396: movB1 R1,#1(R)
1397:
1398: %al,c
1399: %al,au
1400: % [move13a]
1401:
1402: %al,al
1403: % [move13]
1404:
1405: %al,nl*
1406: % [move14]
1407:
1408: %al,nl
1409: % [move15]
1410:
1411: %nl*,c
1412: %nl*,au
1413: % [move14a]
1414:
1415: %nl*,al
1416: % [move16a]
1417:
1418: %el*,nl
1419: % [move16]
1420:
1421: %nl*,nl
1422: % [move17]
1423:
1424: /* =>> (all harder cases handled by =<< -) */
1425: ci75:
1426: %a,1
1427: asrB1 A1
1428:
1429: %aub,1
1430: clc
1431: rorB1 A1
1432:
1433: %n*,1
1434: F*
1435: asrB1 #1(R)
1436:
1437: %nub*,1
1438: F*
1439: clc
1440: rorB1 #1(R)
1441:
1442: /* =<< */
1443: ci76:
1444: %a,1
1445: %aub,1
1446: aslB1 A1
1447:
1448: %n*,1
1449: %nub*,1
1450: F*
1451: aslB1 #1(R)
1452:
1453: %r,aw
1454: ash A2,A1
1455:
1456: %r,nw*
1457: S*
1458: ash #2(R),A1
1459:
1460: %r,n
1461: S
1462: ash R,A1
1463:
1464: /* =<< for longs */
1465: cr92:
1466: %al,aw
1467: F
1468: ashc A2,R
1469: mov R,A1
1470: mov R+,A1+
1471:
1472: %al,n
1473: SS
1474: F
1475: ashc (sp)+,R
1476: mov R,A1
1477: mov R+,A1+
1478:
1479: %nl*,n
1480: FS*
1481: SS
1482: mov 2(sp),R
1483: mov 2(R),R+
1484: mov (R),R
1485: ashc (sp)+,R
1486: mov R,*(sp)
1487: add $2,(sp)
1488: mov R+,*(sp)+
1489:
1490: /* field = ... */
1491: ci16:
1492: %a,a
1493: bicB1 Z,A1'
1494: bisB1 A2,A1''
1495:
1496: %a,n
1497: S
1498: bicB1 Z,A1'
1499: bisB1 R,A1''
1500:
1501: %n*,a
1502: F*
1503: bicB1 Z,#1(R)
1504: bisB1 A2,#1(R)
1505:
1506: %[fas1:]
1507: %e*,n
1508: S
1509: F1*
1510: bicB1 Z,#1(R1)
1511: bisB1 R,#1(R1)
1512:
1513: %n*,e
1514: F*
1515: S1
1516: bicB1 Z,#1(R)
1517: bisB1 R1,#1(R)
1518:
1519: %n*,n
1520: SS
1521: F*
1522: bicB1 Z,#1(R)
1523: bisB1 (sp)+,#1(R)
1524:
1525: %{
1526: /*
1527: * c code tables-- set condition codes
1528: */
1529:
1530: struct table cctab[] = {
1531: {106,cc60},
1532: {28,rest},
1533: {55,rest},
1534: {34,rest},
1535: {35,rest},
1536: {36,rest},
1537: {37,rest},
1538: {40,rest},
1539: {41,rest},
1540: {43,rest},
1541: {81,cc81 /* & as in "if ((a&b)==0)" */},
1542: {48,rest},
1543: {60,cc60},
1544: {61,cc60},
1545: {62,cc60},
1546: {63,cc60},
1547: {64,cc60},
1548: {65,cc60},
1549: {66,cc60},
1550: {67,cc60},
1551: {68,cc60},
1552: {69,cc60},
1553: {72,rest},
1554: {73,rest},
1555: {79,rest},
1556: {0}
1557: };
1558: %}
1559:
1560: /* relationals */
1561: cc60:
1562: %a,z
1563: %ad,zf
1564: % [move1]
1565:
1566: %aub,z
1567: movb A1,R
1568: bic $!377,R
1569:
1570: %af,z
1571: movof A1,R
1572:
1573: %n*,z
1574: %nd*,zf
1575: % [move2]
1576:
1577: %nub*,z
1578: F*
1579: movB1 #1(R),R
1580: bic $!377,R
1581:
1582: %nf*,z
1583: F*
1584: movof #1(R),R
1585:
1586: %n,z
1587: %nf,zf
1588: FC
1589:
1590: %aw,aw
1591: %ab,ab
1592: %aub,aub
1593: % [move3]
1594:
1595: %nw*,aw
1596: %nb*,ab
1597: %nub*,aub
1598: % [move6]
1599:
1600: %n,aw
1601: %nf,ad
1602: % [add1]
1603:
1604: %nw*,ew*
1605: %nb*,eb*
1606: %nub*,eub*
1607: % [move7]
1608:
1609: %nw*,e
1610: % [move8]
1611:
1612: %n,ew*
1613: %nf,ed*
1614: % [add2]
1615:
1616: %n,e
1617: %nf,ef
1618: % [add3]
1619:
1620: %nw*,nw*
1621: %nb*,nb*
1622: %nub*,nub*
1623: % [move11]
1624:
1625: %nw*,n
1626: % [move12]
1627:
1628: %n,n
1629: %nf,nf
1630: % [add5]
1631:
1632: %al,z
1633: tst A1
1634: X0
1635: tst A1+
1636: X1
1637:
1638: %al,c
1639: %al,au
1640: tst A1
1641: X0
1642: cmp A1+,A2
1643: X1
1644:
1645: %[lcmp1:]
1646: %al,al
1647: I A1,A2
1648: X0
1649: I A1+,A2+
1650: X1
1651:
1652: %nl*,z
1653: F*
1654: tst #1(R)
1655: X0
1656: tst #1+2(R)
1657: X1
1658:
1659: %nl*,c
1660: %nl*,au
1661: F*
1662: tst #1(R)
1663: X0
1664: cmp #1+2(R),A2
1665: X1
1666:
1667: %[lcmp2:]
1668: %nl*,al
1669: F*
1670: I #1(R),A2
1671: X0
1672: I #1+2(R),A2+
1673: X1
1674:
1675: %nl,z
1676: F
1677: tst R
1678: X0
1679: tst R+
1680: X1
1681:
1682: %nl,c
1683: %nl,au
1684: F
1685: tst R
1686: X0
1687: cmp R+,A2
1688: X1
1689:
1690: %[lcmp3:]
1691: %nl,al
1692: F
1693: I R,A2
1694: X0
1695: I R+,A2+
1696: X1
1697:
1698: %[lcmp4:]
1699: %nl*,el*
1700: F*
1701: S1*
1702: I #1(R),#2(R1)
1703: X0
1704: I #1+2(R),#2+2(R1)
1705: X1
1706:
1707: %[lcmp5:]
1708: %nl,el*
1709: F
1710: S1*
1711: I R,#2(R1)
1712: X0
1713: I R+,#2+2(R1)
1714: X1
1715:
1716: %[lcmp6:]
1717: %nl,nl
1718: FS
1719: S
1720: mov R,-(sp)
1721: mov 4(sp),R
1722: mov (sp)+,2(sp)
1723: I (sp)+,(sp)+
1724: X0
1725: I R,R+
1726: X1
1727:
1728: /* & as in "if ((a&b) ==0)" */
1729: cc81:
1730: %a,a
1731: % [move3]
1732:
1733: %n*,a
1734: % [move6]
1735:
1736: %n,a
1737: % [add1]
1738:
1739: %n,e
1740: % [add3]
1741:
1742: %n,n
1743: % [add5]
1744:
1745: %al,c
1746: %al,au
1747: bit A2,A1+
1748: X1
1749:
1750: %nl*,c
1751: %nl*,au
1752: F*
1753: bit A2,#2+2(R)
1754: X1
1755:
1756: %al,al
1757: % [lcmp1]
1758:
1759: %nl*,al
1760: % [lcmp2]
1761:
1762: %nl,al
1763: % [lcmp3]
1764:
1765: %nl*,el*
1766: % [lcmp4]
1767:
1768: %nl,el*
1769: % [lcmp5]
1770:
1771: %nl,nl
1772: % [lcmp6]
1773:
1774: %nl,c
1775: %nl,au
1776: F
1777: bit A2,R+
1778: X1
1779:
1780: /* set codes right */
1781: rest:
1782: %n,n
1783: %nf,nf
1784: H
1785:
1786: %{
1787: /*
1788: * c code tables-- expression to -(sp)
1789: */
1790:
1791: struct table sptab[] = {
1792: {106,cs106},
1793: {40,cs40},
1794: {41,cs40},
1795: {55,cs40},
1796: {48,cs40},
1797: {58,cs58},
1798: {56,cs56},
1799: {0}
1800: };
1801: %}
1802:
1803: /* name */
1804: cs106:
1805: %z,n
1806: %zf,n
1807: clrB1 -(sp)
1808:
1809: %aw,n
1810: mov A1,-(sp)
1811:
1812: %aub,n
1813: clr -(sp)
1814: bisb A1,(sp)
1815:
1816: %nw*,n
1817: F*
1818: mov #1(R),-(sp)
1819:
1820: %al,n
1821: mov A1+,-(sp)
1822: mov A1,-(sp)
1823:
1824: /* +, -, |, &~ */
1825: cs40:
1826: %a,1
1827: FS
1828: I' (sp)
1829:
1830: %a,aw
1831: FS
1832: I A2,(sp)
1833:
1834: %a,nw*
1835: FS
1836: S*
1837: I #2(R),(sp)
1838:
1839: %a,n
1840: FS
1841: S
1842: I R,(sp)
1843:
1844: /* integer to long */
1845: cs58:
1846: %nu,n
1847: FS
1848: clr -(sp)
1849:
1850: %aw,n
1851: mov A1,-(sp)
1852: sxt -(sp)
1853:
1854: /* float to long */
1855: cs56:
1856: %nf,n
1857: F
1858: setl
1859: movfi R,-(sp)
1860: seti
1861:
1862: /* setup for structure assign */
1863: ci116:
1864: %n,e
1865: F!
1866: S1!
1867:
1868: %n,n
1869: SS
1870: F!
1871: mov (sp)+,r1
1872:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.