1: / 2: / c code tables-- compile to register 3: / 4: 5: .globl _regtab 6: 7: .data 8: _regtab=. 9: 106.; cr106 10: 30.; cr70 11: 31.; cr70 12: 32.; cr32 13: 33.; cr32 14: 37.; cr37 15: 38.; cr37 16: 98.; cr100 17: 99.; cr100 18: 80.; cr80 19: 40.; cr40 20: 41.; cr40 / - like + 21: 42.; cr42 22: 43.; cr43 23: 44.; cr43 24: 45.; cr45 25: 46.; cr40 26: 55.; cr40 27: 48.; cr40 28: 49.; cr49 29: 70.; cr70 30: 71.; cr70 31: 72.; cr72 32: 73.; cr73 33: 74.; cr74 34: 75.; cr75 35: 76.; cr72 36: 78.; cr70 37: 85.; cr70 38: 79.; cr79 39: 102.; cr102 40: 51.; cr51 41: 52.; cr52 42: 56.; cr56 43: 57.; cr57 44: 58.; cr58 45: 59.; cr59 46: 91.; cr91 47: 82.; cr82 48: 83.; cr82 49: 84.; cr82 50: 86.; cr86 51: 87.; cr86 52: 88.; cr86 53: 0 54: .text 55: 56: / goto 57: cr102: 58: %a,n 59: jmp A1 60: 61: %n*,n 62: F* 63: jmp #1(R) 64: 65: / call 66: cr100: 67: %a,n 68: jsr pc,IA1 69: 70: %n*,n 71: F* 72: jsr pc,#1(R) 73: 74: %n,n 75: F 76: jsr pc,(R) 77: 78: / addressible 79: cr106: 80: %z,n 81: clr R 82: 83: %zf,n 84: clrf R 85: 86: %a,n 87: %ad,n 88: movB1 A1,R 89: 90: %af,n 91: movof A1,R 92: 93: %n*,n 94: %nd*,n 95: F* 96: movB1 #1(R),R 97: 98: %nf*,n 99: F* 100: movof #1(R),R 101: 102: %al,n 103: mov A1+,R+ 104: mov A1,R 105: 106: %nl*,n 107: F* 108: mov #1+2(R),R+ 109: mov #1(R),R 110: 111: / ++,-- postfix 112: cr32: 113: %a,1 114: movB1 A1',R 115: I'B1 A1 116: 117: %aw,n 118: mov A1',R 119: I A2,A1 120: 121: %e*,1 122: F1* 123: movB1 #1(R1),R 124: I'B1 #1(R1) 125: 126: %n*,1 127: F* 128: movB1 #1(R),-(sp) 129: I'B1 #1(R) 130: movB1 (sp)+,R 131: 132: %ew*,n 133: F1* 134: mov #1(R1),R 135: I A2,#1(R1) 136: 137: %nw*,n 138: F* 139: mov #1(R),-(sp) 140: I A2,#1(R) 141: mov (sp)+,R 142: 143: %al,1 144: F 145: I $1,A1+ 146: V A1 147: 148: %el*,1 149: F1* 150: mov #1+2(R1),R+ 151: mov #1(R1),R 152: I $1,#1+2(R1) 153: V #1(R1) 154: 155: %nl*,1 156: F* 157: mov #1+2(R),-(sp) 158: mov #1(R),-(sp) 159: add $1,#1+2(R) 160: V #1(R) 161: mov (sp)+,R 162: mov (sp)+,R+ 163: 164: / - unary, ~ 165: cr37: 166: %n,n 167: %nf,n 168: F 169: IBF R 170: 171: %nl,n 172: F 173: I R 174: I R+ 175: V R 176: 177: / = 178: cr80: 179: %a,n 180: %ad,nf 181: S 182: movB1 R,A1 183: 184: %af,nf 185: S 186: movfo R,A1 187: 188: %nd*,af 189: F* 190: S 191: movf R,#1(R) 192: 193: %n*,a 194: F* 195: movB1 A2,#1(R) 196: movB1 #1(R),R 197: 198: %nf*,af 199: F* 200: S 201: movfo R,#1(R) 202: 203: %n*,e 204: F* 205: S1 206: movB1 R1,#1(R) 207: movB1 R1,R 208: 209: %ed*,nf 210: S 211: F1* 212: movf R,#1(R1) 213: 214: %ef*,nf 215: S 216: F1* 217: movfo R,#1(R1) 218: 219: %n*,n 220: %nd*,nf 221: FS* 222: S 223: movB1 R,*(sp)+ 224: 225: %nf*,nf 226: FS* 227: S 228: movfo R,*(sp)+ 229: 230: / +, -, |, &~, << 231: cr40: 232: %n,z 233: F 234: 235: %n,1 236: F 237: I' R 238: 239: %[add1:] 240: %n,aw 241: %nf,ad 242: F 243: IB2 A2,R 244: 245: %[add2:] 246: %n,ew* 247: %nf,ed* 248: F 249: S1* 250: IB2 #2(R1),R 251: 252: %[add3:] 253: %n,e 254: %nf,ef 255: F 256: S1 257: IBF R1,R 258: 259: %[add4:] 260: %n,nw* 261: %nf,nd* 262: SS* 263: F 264: IB2 *(sp)+,R 265: 266: %[add5:] 267: %n,n 268: %nf,nf 269: SS 270: F 271: IBF (sp)+,R 272: 273: %nl,c 274: F 275: I A2,R+ 276: V R 277: 278: %nl,al 279: F 280: I A2,R 281: I A2+,R+ 282: V R 283: 284: %nl,el 285: F 286: S1 287: I R1+,R+ 288: V R 289: I R1,R 290: 291: %nl,nl 292: SS 293: F 294: I (sp)+,R 295: I (sp)+,R+ 296: V R 297: 298: / ^ -- xor 299: cr49: 300: %n,e 301: % [add3] 302: 303: %n,n 304: FS 305: S 306: xor R,(sp) 307: mov (sp)+,R 308: 309: / >> (all complicated cases taken care of by << -) 310: cr45: 311: %n,1 312: F 313: asr R 314: 315: / * -- R must be odd on integers 316: cr42: 317: %n,aw 318: %nf,ad 319: % [add1] 320: 321: %n,ew* 322: %nf,ed* 323: % [add2] 324: 325: %n,e 326: %nf,ef 327: % [add3] 328: 329: %n,n 330: %nf,nf 331: % [add5] 332: 333: / / R must be odd on integers 334: cr43: 335: %n,aw 336: F 337: T 338: sxt R- 339: div A2,R- 340: 341: %n,ew* 342: F 343: T 344: sxt R- 345: S1* 346: div #2(R1),R- 347: 348: %n,e 349: F 350: T 351: sxt R- 352: S1 353: div R1,R- 354: 355: %n,n 356: SS 357: F 358: T 359: sxt R- 360: div (sp)+,R- 361: 362: %nf,ad 363: % [add1] 364: 365: %nf,ed* 366: % [add2] 367: 368: %nf,ef 369: % [add3] 370: 371: %nf,nf 372: % [add5] 373: 374: / =+, =-, =|, =&~ 375: cr70: 376: %[addq1:] 377: %aw,aw 378: I A2,A1' 379: mov A1,R 380: 381: %[addq1a:] 382: %a,aw 383: %ad,ad 384: movB1 A1',R 385: IBF A2,R 386: movB1 R,A1 387: 388: %[addq2:] 389: %aw,nw* 390: S* 391: I #2(R),A1' 392: mov A1,R 393: 394: %[addq3:] 395: %aw,n 396: S 397: I R,A1' 398: mov A1,R 399: 400: %[addq4:] 401: %ew*,nw* 402: S* 403: F1* 404: I #2(R),#1(R1) 405: mov #1(R1),R 406: 407: %[addq4a:] 408: %ad,ef 409: movf A1',R 410: S1 411: IBF R1,R 412: movf R,A1 413: 414: %[addq5:] 415: %a,n 416: %ad,nf 417: SS 418: movB1 A1',R 419: IBF (sp)+,R 420: movB1 R,A1 421: 422: %[addq6:] 423: %af,nf 424: SS 425: movof A1',R 426: IBF (sp)+,R 427: movfo R,A1 428: 429: %[addq7:] 430: %ew*,n 431: S 432: F1* 433: I R,#1(R1) 434: mov #1(R1),R 435: 436: %[addq8:] 437: %nw*,n 438: SS 439: F* 440: I (sp)+,#1(R) 441: mov #1(R),R 442: 443: %[addq9:] 444: %n*,n 445: FS* 446: SS 447: movB1 *2(sp),R 448: IBF (sp)+,R 449: movB1 R,*(sp)+ 450: 451: %[addq9a:] 452: %nd*,nf 453: SS 454: F* 455: movB1 #1(R),R 456: IBF (sp)+,R 457: movB1 R,#1(R) 458: 459: %[addq10:] 460: %nf*,nf 461: SS 462: F* 463: movof #1(R),R1 464: IBF (sp)+,R1 465: movfo R1,#1(R) 466: movf R1,R 467: 468: / =*, =<< (for integer multiply, R must be odd) 469: cr72: 470: %a,aw 471: %ad,ad 472: % [addq1a] 473: 474: %af,nf 475: % [addq6] 476: 477: %ad,ef 478: % [addq4a] 479: 480: %a,n 481: %ad,nf 482: % [addq5] 483: 484: %n*,n 485: % [addq9] 486: 487: %nd*,nf 488: % [addq9a] 489: 490: %nf*,nf 491: % [addq10] 492: 493: / =/ ; R must be odd on integers 494: cr73: 495: %a,aw 496: movB1 A1',R 497: sxt R- 498: divBF A2,R- 499: movB1 R-,A1 500: 501: %a,n 502: SS 503: movB1 A1',R 504: sxt R- 505: div (sp)+,R- 506: movB1 R-,A1 507: 508: %e*,n 509: SS 510: F1* 511: movB1 #1(R1),R 512: sxt R- 513: div (sp)+,R- 514: movB1 R-,#1(R1) 515: 516: %n*,n 517: FS* 518: SS 519: movB1 *2(sp),R 520: sxt R- 521: div (sp)+,R- 522: movB1 R-,*(sp)+ 523: 524: %ad,ad 525: % [addq1a] 526: 527: %ad,ef 528: % [addq4a] 529: 530: %ad,nf 531: % [addq5] 532: 533: %af,nf 534: % [addq6] 535: 536: %nd*,nf 537: % [addq9a] 538: 539: %nf*,nf 540: % [addq10] 541: 542: / =mod; R must be odd on integers 543: cr74: 544: %a,aw 545: movB1 A1',R 546: sxt R- 547: div A2,R- 548: movB1 R,A1 549: 550: %a,n 551: SS 552: movB1 A1',R 553: sxt R- 554: div (sp)+,R- 555: movB1 R,A1 556: 557: %e*,n 558: SS 559: F1* 560: movB1 #1(R1),R 561: sxt R- 562: div (sp)+,R- 563: movB1 R,#1(R1) 564: 565: %n*,n 566: FS* 567: SS 568: movB1 *2(sp),R 569: sxt R- 570: div (sp)+,R- 571: mov R,*(sp)+ 572: 573: / =^ -- =xor 574: cr79: 575: %aw,n 576: % [addq3] 577: 578: %ab,n 579: SS 580: movb A1',R 581: xor R,(sp) 582: mov (sp)+,R 583: movb R,A1 584: 585: %n*,n 586: FS* 587: movB1 *(sp),-(sp) 588: S 589: xor R,(sp) 590: movB1 (sp)+,R 591: movB1 R,*(sp)+ 592: 593: / =>> (all complicated cases done by =<< -) 594: cr75: 595: %a,1 596: asrB1 A1' 597: movB1 A1,R 598: 599: %n*,1 600: F* 601: asrB1 #1(R) 602: movB1 #1(R),R 603: 604: / << for longs 605: cr91: 606: %nl,aw 607: % [add1] 608: 609: %nl,ew* 610: % [add2] 611: 612: %nl,e 613: % [add3] 614: 615: %nl,nw* 616: % [add4] 617: 618: %nl,n 619: % [add5] 620: 621: / int -> float 622: cr51: 623: %aw,n 624: movif A1,R 625: 626: %nw*,n 627: F* 628: movif #1(R),R 629: 630: %n,n 631: F 632: movif R,R 633: 634: / float, double -> int 635: cr52: 636: %nf,n 637: F 638: movfi R,R 639: 640: / double (float) to long 641: cr56: 642: %nf,n 643: F 644: setl 645: movfi R,-(sp) 646: mov (sp)+,R 647: mov (sp)+,R+ 648: seti 649: 650: / long to double 651: cr57: 652: %al,n 653: setl 654: movif A1,R 655: seti 656: 657: %nl*,n 658: F* 659: setl 660: movif #1(R),R 661: seti 662: 663: %nl,n 664: FS 665: setl 666: movif (sp)+,R 667: seti 668: 669: / integer to long 670: cr58: 671: %n,n 672: F1! 673: sxt R 674: 675: / long to integer 676: cr59: 677: %al,n 678: mov A1+,R 679: 680: %nl*,n 681: F* 682: mov #1+2(R),R 683: 684: %nl,n 685: F 686: mov R+,R 687: 688: / *, /, remainder for longs. 689: cr82: 690: %nl,nl 691: SS 692: FS 693: jsr pc,I 694: add $10,sp 695: 696: / =*, =/, =rem for longs 697: / Operands of the form &x op y, so stack space is known. 698: cr86: 699: %n,nl 700: SS 701: FS 702: jsr pc,I 703: add $6,sp 704: 705: / 706: / c code tables -- compile for side effects. 707: / Also set condition codes properly (except for ++, --) 708: / 709: 710: .globl _efftab 711: 712: .data 713: _efftab=. 714: 30.; ci70 715: 31.; ci70 716: 32.; ci70 717: 33.; ci70 718: 80.; ci80 719: 70.; ci70 720: 71.; ci70 / - like + 721: 78.; ci78 722: 85.; ci78 723: 75.; ci75 724: 76.; ci76 725: 92.; ci92 726: 0 727: .text 728: 729: / = 730: ci80: 731: %[move1:] 732: %a,z 733: %ad,zf 734: I'B1 A1 735: 736: %[move2:] 737: %n*,z 738: %nd*,zf 739: F* 740: I'B1 #1(R) 741: 742: %[move3:] 743: %a,aw 744: %ab,a 745: IBE A2,A1 746: 747: %[move4:] 748: %ab,n* 749: %a,nw* 750: S* 751: IBE #2(R),A1 752: 753: %[move5:] 754: %a,n 755: S 756: IB1 R,A1 757: 758: %[move6:] 759: %n*,aw 760: %nb*,a 761: F* 762: IBE A2,#1(R) 763: 764: %[move7:] 765: %n*,ew* 766: %nb*,e* 767: F* 768: S1* 769: IBE #2(R1),#1(R) 770: 771: %[move8:] 772: %n*,e 773: F* 774: S1 775: IB1 R1,#1(R) 776: 777: %[move9:] 778: %e*,nw* 779: %eb*,n* 780: S* 781: F1* 782: IBE #2(R),#1(R1) 783: 784: %[move10:] 785: %e*,n 786: S 787: F1* 788: IB1 R,#1(R1) 789: 790: %[move11:] 791: %n*,nw* 792: %nb*,n* 793: FS* 794: S* 795: IBE #2(R),*(sp)+ 796: 797: %[move12:] 798: %n*,n 799: FS* 800: S 801: IB1 R,*(sp)+ 802: 803: %al,z 804: clr A1 805: clr A1+ 806: 807: %al,aw 808: mov A2,A1+ 809: sxt A1 810: 811: %al,nw* 812: mov #2(R),A1+ 813: sxt A1 814: 815: %al,n 816: S 817: mov R,A1+ 818: sxt A1 819: 820: %al,nf 821: S 822: setl 823: movfi R,A1 824: seti 825: 826: %el*,nf 827: S 828: F1* 829: setl 830: movfi R,#1(R1) 831: seti 832: 833: %[move13a:] 834: %al,c 835: I A2,A1+ 836: V A1 837: 838: %[move13:] 839: %al,al 840: I A2,A1 841: I A2+,A1+ 842: V A1 843: 844: %[move14:] 845: %al,nl* 846: S* 847: I #2(R),A1 848: I #2+2(R),A1+ 849: V A1 850: 851: %[move14a:] 852: %nl*,c 853: F* 854: I A2,2+#1(R) 855: V #1(R) 856: 857: %[move15:] 858: %al,nl 859: S 860: I R,A1 861: I R+,A1+ 862: V A1 863: 864: %nl*,aw 865: F* 866: mov A2,#1+2(R) 867: sxt #1(R) 868: 869: %[move16:] 870: %el*,nl 871: S 872: F1* 873: I R+,#1+2(R1) 874: V #1(R1) 875: I R,#1(R1) 876: 877: %nl*,n 878: SS 879: F* 880: mov (sp)+,#1+2(R) 881: sxt #1(R) 882: 883: %[move17:] 884: %nl*,nl 885: SS 886: F* 887: I (sp)+,#1(R) 888: I (sp)+,#1+2(R) 889: V #1(R) 890: 891: / =| and =& ~ 892: ci78: 893: %a,a 894: % [move3] 895: 896: %a,n 897: % [move5] 898: 899: %n*,a 900: % [move6] 901: 902: %n*,e* 903: % [move7] 904: 905: %n*,e 906: % [move8] 907: 908: %e*,n* 909: % [move9] 910: 911: %e*,n 912: % [move10] 913: 914: %n*,n* 915: % [move11] 916: 917: %n*,n 918: % [move12] 919: 920: %al,c 921: % [move13a] 922: 923: %al,al 924: % [move13] 925: 926: %al,nl* 927: % [move14] 928: 929: %al,nl 930: % [move15] 931: 932: %nl*,c 933: % [move14a] 934: 935: %el*,nl 936: % [move16] 937: 938: %nl*,nl 939: % [move17] 940: 941: / =+ 942: ci70: 943: %n*,z 944: %a,z 945: 946: %a,1 947: I'B1 A1 948: 949: %aw,aw 950: % [move3] 951: 952: %aw,nw* 953: % [move4] 954: 955: %aw,n 956: % [move5] 957: 958: %n*,1 959: % [move2] 960: 961: %ew*,nw* 962: % [move9] 963: 964: %a,nw* 965: S* 966: movB1 A1',R1 967: I #2(R),R1 968: movB1 R1,A1 969: 970: %a,n 971: S 972: movB1 A1',R1 973: I R,R1 974: movB1 R1,A1 975: 976: %ew*,n 977: % [move10] 978: 979: %nw*,n 980: % [move12] 981: 982: %n*,n 983: SS 984: F* 985: movB1 #1(R),R1 986: I (sp)+,R1 987: movB1 R1,#1(R) 988: 989: %al,c 990: % [move13a] 991: 992: %al,al 993: % [move13] 994: 995: %al,nl* 996: % [move14] 997: 998: %al,nl 999: % [move15] 1000: 1001: %nl*,c 1002: % [move14a] 1003: 1004: %el*,nl 1005: % [move16] 1006: 1007: %nl*,nl 1008: % [move17] 1009: 1010: / =>> (all harder cases handled by =<< -) 1011: ci75: 1012: %a,1 1013: asrB1 A1 1014: 1015: %n*,1 1016: F* 1017: asrB1 #1(R) 1018: 1019: / =<< 1020: ci76: 1021: %a,1 1022: aslB1 A1 1023: 1024: %n*,1 1025: F* 1026: aslB1 #1(R) 1027: 1028: %r,aw 1029: ash A2,A1 1030: 1031: %r,nw* 1032: S* 1033: ash #2(R),A1 1034: 1035: %r,n 1036: S 1037: ash R,A1 1038: 1039: / =<< for longs 1040: ci92: 1041: %al,aw 1042: F 1043: ashc A2,R 1044: mov R,A1 1045: mov R+,A1+ 1046: 1047: %al,n 1048: SS 1049: F 1050: ashc (sp)+,R 1051: mov R,A1 1052: mov R+,A1+ 1053: 1054: %nl*,n 1055: FS* 1056: SS 1057: mov 2(sp),R 1058: mov 2(R),R+ 1059: mov (R),R 1060: ashc (sp)+,R 1061: mov R,*(sp) 1062: mov (sp)+,R 1063: mov R+,2(R) 1064: 1065: / 1066: / c code tables-- set condition codes 1067: / 1068: 1069: .globl _cctab 1070: 1071: .data 1072: _cctab=. 1073: 106.; cc60 1074: 28.; rest 1075: 55.; rest 1076: 34.; rest 1077: 35.; rest 1078: 36.; rest 1079: 37.; rest 1080: 40.; rest 1081: 41.; rest 1082: 42.; rest 1083: 43.; rest 1084: 45.; rest 1085: 46.; rest 1086: 81.; cc81 / & as in "if ((a&b)==0)" 1087: 48.; rest 1088: 60.; cc60 1089: 61.; cc60 1090: 62.; cc60 1091: 63.; cc60 1092: 64.; cc60 1093: 65.; cc60 1094: 66.; cc60 1095: 67.; cc60 1096: 68.; cc60 1097: 69.; cc60 1098: 72.; rest 1099: 73.; rest 1100: 79.; rest 1101: 0 1102: .text 1103: 1104: / relationals 1105: cc60: 1106: %a,z 1107: %ad,zf 1108: % [move1] 1109: 1110: %af,z 1111: movof A1,R 1112: 1113: %n*,z 1114: %nd*,zf 1115: % [move2] 1116: 1117: %nf*,z 1118: F* 1119: movof #1(R),R 1120: 1121: %n,z 1122: %nf,zf 1123: FC 1124: 1125: %aw,aw 1126: %ab,ab 1127: % [move3] 1128: 1129: %nw*,aw 1130: %nb*,ab 1131: % [move6] 1132: 1133: %n,aw 1134: %nf,ad 1135: % [add1] 1136: 1137: %nw*,ew* 1138: %nb*,eb* 1139: % [move7] 1140: 1141: %nw*,e 1142: % [move8] 1143: 1144: %n,ew* 1145: %nf,ed* 1146: % [add2] 1147: 1148: %n,e 1149: %nf,ef 1150: % [add3] 1151: 1152: %nw*,nw* 1153: %nb*,nb* 1154: % [move11] 1155: 1156: %nw*,n 1157: % [move12] 1158: 1159: %n,n 1160: %nf,nf 1161: % [add5] 1162: 1163: / & as in "if ((a&b) ==0)" 1164: cc81: 1165: %a,a 1166: % [move3] 1167: 1168: %n*,a 1169: % [move6] 1170: 1171: %n,a 1172: % [add1] 1173: 1174: %n,e 1175: % [add3] 1176: 1177: %n,n 1178: % [add5] 1179: 1180: / set codes right 1181: rest: 1182: %n,n 1183: %nf,nf 1184: H 1185: 1186: / 1187: / c code tables-- expression to -(sp) 1188: / 1189: 1190: .globl _sptab 1191: 1192: .data 1193: _sptab=. 1194: 106.; cs106 1195: 40.; cs40 1196: 41.; cs40 1197: 55.; cs40 1198: 48.; cs40 1199: 58.; cs58 1200: 56.; cs56 1201: 0 1202: .text 1203: 1204: 1205: / name 1206: cs106: 1207: %z,n 1208: %zf,n 1209: clrB1 -(sp) 1210: 1211: %aw,n 1212: mov A1,-(sp) 1213: 1214: %nw*,n 1215: F* 1216: mov #1(R),-(sp) 1217: 1218: %al,n 1219: mov A1+,-(sp) 1220: mov A1,-(sp) 1221: 1222: / +, -, |, &~ 1223: cs40: 1224: %n,1 1225: FS 1226: I' (sp) 1227: 1228: %n,aw 1229: FS 1230: I A2,(sp) 1231: 1232: %n,nw* 1233: FS 1234: S* 1235: I #2(R),(sp) 1236: 1237: %n,n 1238: FS 1239: S 1240: I R,(sp) 1241: 1242: / integer to long 1243: cs58: 1244: %n,n 1245: FS 1246: sxt -(sp) 1247: 1248: / float to long 1249: cs56: 1250: %nf,n 1251: F 1252: setl 1253: movfi R,-(sp) 1254: seti