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