|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)table.c 1.24 (Berkeley) 7/14/88"; ! 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: #ifdef REG_CHAR ! 18: PCONV, INAREG|INTAREG, ! 19: SAREG|AWD, TCHAR|TSHORT, ! 20: SANY, TPOINT, ! 21: NAREG|NASL, RESC1, ! 22: " cvtZLl AL,A1\n", ! 23: ! 24: PCONV, INAREG|INTAREG, ! 25: SAREG|AWD, TUCHAR|TUSHORT, ! 26: SANY, TPOINT, ! 27: NAREG|NASL, RESC1, ! 28: " movzZLl AL,A1\n", ! 29: #endif ! 30: ! 31: /* the following entry is to fix a problem with ! 32: the manner that the first pass handles the ! 33: type of a shift expression */ ! 34: PCONV, INAREG|INTAREG, ! 35: SAREG|AWD, TINT|TUNSIGNED, ! 36: SANY, TPOINT, ! 37: NAREG|NASL, RLEFT, ! 38: "", ! 39: ! 40: /* take care of redundant conversions introduced by reclaim() */ ! 41: SCONV, INAREG|INTAREG, ! 42: STAREG, TWORD, ! 43: SANY, TWORD, ! 44: 0, RLEFT, ! 45: "", ! 46: ! 47: SCONV, INAREG|INTAREG, ! 48: SAREG|AWD, ANYFIXED, ! 49: SANY, ANYFIXED, ! 50: NAREG|NASL, RESC1, ! 51: " ZU\n", ! 52: ! 53: SCONV, FORCC, ! 54: SAREG|AWD, ANYFIXED, ! 55: SANY, ANYFIXED, ! 56: NAREG|NASL, RESCC, ! 57: " ZV\n", ! 58: ! 59: SCONV, INAREG|INTAREG|FORCC, ! 60: SAREG|AWD, TDOUBLE, ! 61: SANY, TFLOAT, ! 62: NAREG|NASL, RESC1|RESCC, ! 63: " ldd AL\n cvdf\n stf TA1\n", ! 64: ! 65: SCONV, INAREG|INTAREG|FORCC, ! 66: SAREG|AWD, TFLOAT, ! 67: SANY, TDOUBLE, ! 68: NAREG|NASL, RESC1|RESCC, ! 69: " ldfd AL\n std A1\n", ! 70: ! 71: SCONV, INAREG|INTAREG|FORCC, ! 72: SAREG|AWD, TINT, ! 73: SANY, TFLOAT|TDOUBLE, ! 74: NAREG|NASL, RESC1|RESCC, ! 75: " cvlZR AL\n stZR TA1\n", ! 76: ! 77: /* the hard stuff */ ! 78: /* XXX how about TUCHAR|TUSHORT to TFLOAT|TDOUBLE? */ ! 79: SCONV, INAREG|INTAREG|FORCC, ! 80: SAREG|AWD, TUNSIGNED, ! 81: SANY, TFLOAT|TDOUBLE, ! 82: NAREG|NASL, RESC1|RESCC, ! 83: " ZY\n", ! 84: ! 85: SCONV, INAREG|INTAREG|FORCC, ! 86: SAREG|AWD, TFLOAT|TDOUBLE, ! 87: SANY, ANYUSIGNED, ! 88: NAREG|NASL, RESC1|RESCC, ! 89: " ZW\n", ! 90: ! 91: /* XXX need to trim significance here? */ ! 92: SCONV, INAREG|INTAREG|FORCC, ! 93: SAREG|AWD, TFLOAT|TDOUBLE, ! 94: SANY, ANYSIGNED, ! 95: NAREG|NASL, RESC1|RESCC, ! 96: " ldZL AL\n cvZLl A1\n", ! 97: ! 98: INIT, FOREFF, ! 99: SCON, TANY, ! 100: SANY, TWORD, ! 101: 0, RNOP, ! 102: " .long CL\n", ! 103: ! 104: INIT, FOREFF, ! 105: SCON, TANY, ! 106: SANY, TSHORT|TUSHORT, ! 107: 0, RNOP, ! 108: " .word CL\n", ! 109: ! 110: INIT, FOREFF, ! 111: SCON, TANY, ! 112: SANY, TCHAR|TUCHAR, ! 113: 0, RNOP, ! 114: " .byte CL\n", ! 115: ! 116: #ifdef FORT ! 117: /* for the use of fortran only */ ! 118: ! 119: GOTO, FOREFF, ! 120: SCON, TANY, ! 121: SANY, TANY, ! 122: 0, RNOP, ! 123: " jbr CL\n", ! 124: #endif ! 125: ! 126: GOTO, FOREFF, ! 127: AWD, TANY, ! 128: SANY, TANY, ! 129: 0, RNOP, ! 130: " jmp *AL\n", ! 131: ! 132: GOTO, FOREFF, ! 133: SAREG, TANY, ! 134: SANY, TANY, ! 135: 0, RNOP, ! 136: " jmp (AL)\n", ! 137: ! 138: STARG, FORARG, ! 139: SCON|SOREG, TANY, ! 140: SANY, TANY, ! 141: NTEMP+2*NAREG, RESC3, ! 142: "ZS", ! 143: ! 144: STASG, FORARG, ! 145: SNAME|SOREG, TANY, ! 146: SCON|SAREG, TANY, ! 147: 0, RNULL, ! 148: " ZT\nZS", ! 149: ! 150: STASG, FOREFF, ! 151: SNAME|SOREG, TANY, ! 152: SCON|SAREG, TANY, ! 153: 0, RNOP, ! 154: "ZS", ! 155: ! 156: STASG, INAREG, ! 157: SNAME|SOREG, TANY, ! 158: SCON, TANY, ! 159: NAREG, RESC1, ! 160: "ZS movl AR,A1\n", ! 161: ! 162: STASG, INAREG, ! 163: SNAME|SOREG, TANY, ! 164: SAREG, TANY, ! 165: 0, RRIGHT, ! 166: " pushl AR\nZS movl (sp)+,AR\n", ! 167: ! 168: OPLOG, FORCC, ! 169: SAREG|AWD, TWORD, ! 170: SAREG|AWD, TWORD, ! 171: 0, RESCC, ! 172: " cmpl AL,AR\nZP", ! 173: ! 174: /* more grot: constants in unsigned char/short comparisons sign-extend */ ! 175: /* optim2() ensures that SCCON/SSCON iff high bit is not set */ ! 176: OPLOG, FORCC, ! 177: SAREG|AWD, TUCHAR, ! 178: SCCON, TANY, ! 179: 0, RESCC, ! 180: " cmpZL AL,AR\nZP", ! 181: ! 182: OPLOG, FORCC, ! 183: AWD, TUCHAR, ! 184: SCON, TANY, ! 185: NAREG, RESCC, ! 186: " movzZLl AL,A1\n cmpl A1,AR\nZP", ! 187: ! 188: OPLOG, FORCC, ! 189: SAREG|AWD, TUSHORT, ! 190: SSCON, TANY, ! 191: 0, RESCC, ! 192: " cmpZL AL,AR\nZP", ! 193: ! 194: OPLOG, FORCC, ! 195: AWD, TUSHORT, ! 196: SCON, TANY, ! 197: NAREG, RESCC, ! 198: " movzZLl AL,A1\n cmpl A1,AR\nZP", ! 199: ! 200: /* optim2() handles degenerate comparisons with constants */ ! 201: OPLOG, FORCC, ! 202: SAREG|AWD, TCHAR|TSHORT, ! 203: SCON, TANY, ! 204: 0, RESCC, ! 205: " cmpZL AL,AR\nZP", ! 206: ! 207: OPLOG, FORCC, ! 208: SAREG|AWD, TSHORT, ! 209: SAREG|AWD, TSHORT, ! 210: 0, RESCC, ! 211: " cmpw AL,AR\nZP", ! 212: ! 213: OPLOG, FORCC, ! 214: SAREG|AWD, TUSHORT, ! 215: SAREG|AWD, TUSHORT, ! 216: 0, RESCC, ! 217: " cmpw AL,AR\nZP", ! 218: ! 219: OPLOG, FORCC, ! 220: SAREG|AWD, TCHAR, ! 221: SAREG|AWD, TCHAR, ! 222: 0, RESCC, ! 223: " cmpb AL,AR\nZP", ! 224: ! 225: OPLOG, FORCC, ! 226: SAREG|AWD, TUCHAR, ! 227: SAREG|AWD, TUCHAR, ! 228: 0, RESCC, ! 229: " cmpb AL,AR\nZP", ! 230: ! 231: OPLOG, FORCC, ! 232: SAREG|AWD, TFLOAT, ! 233: SAREG|AWD, TFLOAT, ! 234: 0, RESCC, ! 235: " cmpZL2 AL,AR\nZP", ! 236: ! 237: OPLOG, FORCC, ! 238: SZERO, TDOUBLE, ! 239: SAREG|AWD, TDOUBLE, ! 240: 0, RESCC, ! 241: " cmpf2 AL,AR\nZP", ! 242: ! 243: OPLOG, FORCC, ! 244: SAREG|AWD, TDOUBLE, ! 245: SAREG|AWD, TDOUBLE, ! 246: 0, RESCC, ! 247: " cmpZL2 AL,AR\nZP", ! 248: ! 249: #ifdef FORT ! 250: /* some implicit conversions made explicit to help f77 out (sigh) */ ! 251: OPLOG, FORCC, ! 252: SAREG|AWD, TFLOAT, ! 253: SAREG|AWD, TDOUBLE, ! 254: 0, RESCC, ! 255: " ldfd AL\n cmpd AR\nZP", ! 256: ! 257: /* ought to flip this comparison, save an instruction */ ! 258: OPLOG, FORCC, ! 259: SAREG|AWD, TDOUBLE, ! 260: SAREG|AWD, TFLOAT, ! 261: NAREG|NEVEN|NASR, RESCC, ! 262: " ldfd AR\n std A1\n cmpd2 AL,A1\nZP", ! 263: #endif ! 264: ! 265: CCODES, INAREG|INTAREG, ! 266: SANY, TANY, ! 267: SANY, TANY, ! 268: NAREG, RESC1, ! 269: " movl $1,A1\nZN", ! 270: ! 271: UNARY CALL, INAREG|INTAREG, ! 272: SCON, TANY, ! 273: SANY, TANY, ! 274: NAREG|NASL, RESC1, /* should be register 0 */ ! 275: " ZC,CL\n", ! 276: ! 277: UNARY CALL, INAREG|INTAREG, ! 278: SAREG, TANY, ! 279: SANY, TANY, ! 280: NAREG|NASL, RESC1, /* should be 0 */ ! 281: " ZC,(AL)\n", ! 282: ! 283: UNARY CALL, INAREG|INTAREG, ! 284: SNAME, TANY, ! 285: SANY, TANY, ! 286: NAREG|NASL, RESC1, /* really reg 0 */ ! 287: " ZC,*AL\n", ! 288: ! 289: UNARY CALL, INAREG|INTAREG, ! 290: SSOREG, TANY, ! 291: SANY, TANY, ! 292: NAREG|NASL, RESC1, /* really reg 0 */ ! 293: " ZC,*AL\n", ! 294: ! 295: FORTCALL, INAREG|INTAREG, ! 296: SCON, TANY, ! 297: SAREG|AWD, TFLOAT, ! 298: NAREG|NASL|NASR, RESC1, ! 299: " ldf AR\n CLf\n stf TA1\n", ! 300: ! 301: ASG OPSHFT, INAREG|FOREFF|FORCC, ! 302: SAREG|AWD, TWORD, ! 303: SAREG|SCON, ANYFIXED, ! 304: 0, RLEFT|RESCC, ! 305: " ZH AR,AL,AL\n", ! 306: ! 307: ASG OPSHFT, INAREG|FOREFF|FORCC, ! 308: SAREG|AWD, TWORD, ! 309: AWD, TCHAR|TUCHAR, ! 310: 0, RLEFT|RESCC, ! 311: " ZH AR,AL,AL\n", ! 312: ! 313: ASG OPSHFT, INAREG|FOREFF|FORCC, ! 314: SAREG|AWD, TWORD, ! 315: AWD, ANYFIXED, ! 316: NAREG, RLEFT|RESCC, ! 317: " ZB AR,A1\n ZH A1,AL,AL\n", ! 318: ! 319: OPSHFT, INAREG|INTAREG|FORCC, ! 320: SAREG|AWD, TWORD, ! 321: SAREG|SCON, ANYFIXED, ! 322: NAREG|NASL|NASR, RESC1|RESCC, ! 323: " ZH AR,AL,A1\n", ! 324: ! 325: OPSHFT, INAREG|INTAREG|FORCC, ! 326: SAREG|AWD, TWORD, ! 327: AWD, TCHAR|TUCHAR, ! 328: NAREG|NASL|NASR, RESC1|RESCC, ! 329: " ZH AR,AL,A1\n", ! 330: ! 331: OPSHFT, INAREG|INTAREG|FORCC, ! 332: SAREG|AWD, TWORD, ! 333: AWD, ANYFIXED, ! 334: NAREG|NASR, RESC1|RESCC, ! 335: " ZB AR,A1\n ZH A1,AL,A1\n", ! 336: ! 337: INCR, FOREFF, ! 338: SAREG|AWD, TANY, ! 339: SCON|SNAME, TANY, ! 340: 0, RLEFT, ! 341: " ZE\n", ! 342: ! 343: DECR, FOREFF, ! 344: SAREG|AWD, TANY, ! 345: SCON|SNAME, TANY, ! 346: 0, RLEFT, ! 347: " ZE\n", ! 348: ! 349: INCR, INAREG|INTAREG, ! 350: SAREG|AWD, TANY, ! 351: SCON|SNAME, TANY, ! 352: NAREG, RESC1, ! 353: " ZD\n", ! 354: ! 355: DECR, INAREG|INTAREG, ! 356: SAREG|AWD, TANY, ! 357: SCON|SNAME, TANY, ! 358: NAREG, RESC1, ! 359: " ZD\n", ! 360: ! 361: ASSIGN, INAREG|FOREFF, ! 362: SAREG|AWD, ANYFIXED, ! 363: SAREG|AWD, ANYFIXED, ! 364: 0, RLEFT, ! 365: " ZU\n", ! 366: ! 367: ASSIGN, FORCC, ! 368: SAREG|AWD, ANYFIXED, ! 369: SAREG|AWD, ANYFIXED, ! 370: 0, RESCC, ! 371: " ZV\n", ! 372: ! 373: ASSIGN, INAREG|FOREFF|FORCC, ! 374: SIREG, TDOUBLE, ! 375: SZERO, TANY, ! 376: 0, RLEFT|RESCC, ! 377: " cvld $0\n std AL\n", ! 378: ! 379: ASSIGN, INAREG|FOREFF|FORCC, ! 380: SAREG|SNAME|SOREG, TDOUBLE, ! 381: SZERO, TANY, ! 382: 0, RLEFT|RESCC, ! 383: " clrl UL\n clrl AL\n", ! 384: ! 385: ASSIGN, INAREG|FOREFF|FORCC, ! 386: SAREG|AWD, TDOUBLE, ! 387: SIREG, TDOUBLE, ! 388: 0, RLEFT|RRIGHT|RESCC, ! 389: " ldd AR\n std AL\n", ! 390: ! 391: ASSIGN, INAREG|FOREFF|FORCC, ! 392: SIREG, TDOUBLE, ! 393: SAREG|AWD, TDOUBLE, ! 394: 0, RLEFT|RRIGHT|RESCC, ! 395: " ldd AR\n std AL\n", ! 396: ! 397: ASSIGN, INAREG|FOREFF|FORCC, ! 398: SAREG|SNAME|SOREG, TDOUBLE, ! 399: SAREG|SNAME|SOREG, TDOUBLE, ! 400: 0, RLEFT|RRIGHT|RESCC, ! 401: " movl UR,UL\n movl AR,AL\n", ! 402: ! 403: ASSIGN, INAREG|FOREFF|FORCC, ! 404: SAREG|AWD, TDOUBLE, ! 405: STARNM, TDOUBLE, ! 406: 0, RLEFT|RRIGHT|RESCC, ! 407: " ldd AR\n std AL\n", ! 408: ! 409: ASSIGN, INAREG|FOREFF|FORCC, ! 410: STARNM, TDOUBLE, ! 411: SAREG|AWD, TDOUBLE, ! 412: 0, RLEFT|RRIGHT|RESCC, ! 413: " ldd AR\n std AL\n", ! 414: ! 415: ASSIGN, INAREG|FOREFF|FORCC, ! 416: SAREG|AWD, TFLOAT, ! 417: SZERO, TANY, ! 418: 0, RLEFT|RESCC, ! 419: " clrl TAL\n", ! 420: ! 421: ASSIGN, INAREG|FOREFF|FORCC, ! 422: SAREG|AWD, TFLOAT, ! 423: SAREG|AWD, TFLOAT, ! 424: 0, RLEFT|RRIGHT|RESCC, ! 425: " movl AR,TAL\n", ! 426: ! 427: ASSIGN, INAREG|FOREFF|FORCC, ! 428: SAREG|AWD, TFLOAT, ! 429: SAREG|AWD, TDOUBLE, ! 430: 0, RLEFT|RESCC, ! 431: " ldd AR\n cvdf\n stf AL\n", ! 432: ! 433: ASSIGN, INAREG|FOREFF|FORCC, ! 434: SAREG|AWD, TDOUBLE, ! 435: SAREG|AWD, TFLOAT, ! 436: 0, RLEFT|RESCC, ! 437: " ldfd AR\n std AL\n", ! 438: ! 439: ASSIGN, INAREG|FOREFF|FORCC, ! 440: SAREG|AWD, TFLOAT|TDOUBLE, ! 441: SAREG|AWD, TINT, ! 442: 0, RLEFT|RESCC, ! 443: " cvlZL AR\n stZL AL\n", ! 444: ! 445: /* XXX need to trim significance here? */ ! 446: ASSIGN, INAREG|FOREFF|FORCC, ! 447: SAREG|AWD, TINT, ! 448: SAREG|AWD, TFLOAT|TDOUBLE, ! 449: 0, RLEFT|RESCC, ! 450: " ldZR AR\n cvZRl AL\n", ! 451: ! 452: /* unfortunately assignments are exempt from type balancing */ ! 453: ASSIGN, INAREG|FOREFF|FORCC, ! 454: SAREG|AWD, TCHAR|TUCHAR|TSHORT|TUSHORT, ! 455: SAREG|AWD, TFLOAT|TDOUBLE, ! 456: NAREG|NASR, RLEFT|RESCC, ! 457: " ldZR AR\n cvZRl A1\n cvtlZL A1,AL\n", ! 458: ! 459: ASSIGN, INAREG|FOREFF|FORCC, ! 460: SAREG|AWD, TFLOAT|TDOUBLE, ! 461: SAREG|AWD, TCHAR|TSHORT, ! 462: NAREG|NASR, RLEFT|RESCC, ! 463: " cvtZRl AR,A1\n cvlZL A1\n stZL AL\n", ! 464: ! 465: ASSIGN, INAREG|FOREFF|FORCC, ! 466: SAREG|AWD, TFLOAT|TDOUBLE, ! 467: SAREG|AWD, TUCHAR|TUSHORT, ! 468: NAREG|NASR, RLEFT|RESCC, ! 469: " movzZRl AR,A1\n cvlZL A1\n stZL AL\n", ! 470: ! 471: ASSIGN, INAREG|FOREFF|FORCC, ! 472: SAREG|AWD, TUNSIGNED, ! 473: SAREG|AWD, TFLOAT|TDOUBLE, ! 474: 0, RLEFT|RESCC, ! 475: " ZW\n", ! 476: ! 477: ASSIGN, INAREG|FOREFF|FORCC, ! 478: SAREG|AWD, TFLOAT|TDOUBLE, ! 479: SAREG|AWD, TUNSIGNED, ! 480: 0, RLEFT|RESCC, ! 481: " ZY\n", ! 482: ! 483: ASSIGN, INAREG|FOREFF, ! 484: SFLD, TANY, ! 485: SZERO, TANY, ! 486: 0, RRIGHT, ! 487: " andl2 N,AL\n", ! 488: ! 489: ASSIGN, FOREFF, ! 490: SFLD, TANY, ! 491: SCON, TANY, ! 492: 0, RNOP, ! 493: " andl2 N,AL\n orl2 ZF,AL\n", ! 494: ! 495: ASSIGN, INAREG, ! 496: SFLD, TANY, ! 497: SCON, TANY, ! 498: NAREG, RESC1, ! 499: " andl2 N,AL\n orl2 ZF,AL\n ZI\n", ! 500: ! 501: ASSIGN, FOREFF, ! 502: SFLD, TANY, ! 503: SAREG|AWD, TWORD, ! 504: NAREG|NASR, RNOP, ! 505: " shll $H,AR,A1\n andl2 M,A1\n andl2 N,AL\n\ ! 506: orl2 A1,AL\n", ! 507: ! 508: ASSIGN, INAREG, ! 509: SFLD, TANY, ! 510: SAREG|AWD, TWORD, ! 511: NAREG, RESC1, ! 512: " shll $H,AR,A1\n andl2 M,A1\n andl2 N,AL\n\ ! 513: orl2 A1,AL\n ZI\n", ! 514: ! 515: /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */ ! 516: UNARY MUL, FOREFF, ! 517: SCC, TANY, ! 518: SCC, TANY, ! 519: 0, RNULL, ! 520: " help help help\n", ! 521: ! 522: REG, INTEMP, ! 523: SANY, TANY, ! 524: SAREG, TDOUBLE, ! 525: 2*NTEMP, RESC1, ! 526: " movl UR,U1\n movl AR,A1\n", ! 527: ! 528: REG, INTEMP, ! 529: SANY, TANY, ! 530: SAREG, TANY, ! 531: NTEMP, RESC1, ! 532: " movl AR,A1\n", ! 533: ! 534: REG, FORARG, ! 535: SANY, TANY, ! 536: SAREG, TFLOAT, ! 537: 0, RNULL, ! 538: " pushl $0\n pushl AR\n", ! 539: ! 540: REG, FORARG, ! 541: SANY, TANY, ! 542: SAREG, TDOUBLE, ! 543: 0, RNULL, ! 544: " pushl UR\n pushl AR\n", ! 545: ! 546: OREG, INTEMP, ! 547: SANY, TANY, ! 548: SOREG, TWORD|TFLOAT, ! 549: NTEMP, RESC1, ! 550: " movl AR,A1\n", ! 551: ! 552: OREG, INTEMP, ! 553: SANY, TANY, ! 554: SIREG, TDOUBLE, ! 555: 2*NTEMP, RESC1, ! 556: " ldd UR\n std A1\n", ! 557: ! 558: OREG, INTEMP, ! 559: SANY, TANY, ! 560: SOREG, TDOUBLE, ! 561: 2*NTEMP, RESC1, ! 562: " movl UR,U1\n movl AR,A1\n", ! 563: ! 564: OREG, INTEMP, ! 565: SANY, TANY, ! 566: SOREG, TANY, ! 567: NTEMP, RESC1, ! 568: " movZR AR,A1\n", ! 569: ! 570: OPLEAF, FOREFF, ! 571: SANY, TANY, ! 572: SAREG|AWD, TANY, ! 573: 0, RLEFT, ! 574: "", ! 575: ! 576: OPLTYPE, INAREG|INTAREG, ! 577: SANY, TANY, ! 578: SZERO, TDOUBLE, ! 579: NAREG|NASR, RESC1, ! 580: " clrl U1\n clrl A1\n", ! 581: ! 582: OPLTYPE, INAREG|INTAREG, ! 583: SANY, TANY, ! 584: SIREG, TDOUBLE, ! 585: NAREG|NASR, RESC1, ! 586: " ldd AR\n std A1\n", ! 587: ! 588: OPLTYPE, INAREG|INTAREG, ! 589: SANY, TANY, ! 590: SAREG|SNAME|SOREG|SCON, TDOUBLE, ! 591: NAREG, RESC1, ! 592: " movl AR,A1\n movl UR,U1\n", ! 593: ! 594: OPLTYPE, INAREG|INTAREG, ! 595: SANY, TANY, ! 596: STARNM, TDOUBLE, ! 597: NAREG|NASR, RESC1, ! 598: " ldd AR\n std A1\n", ! 599: ! 600: OPLTYPE, INAREG|INTAREG, ! 601: SANY, TANY, ! 602: SZERO, TANY, ! 603: NAREG|NASR, RESC1, ! 604: " clrl TA1\n", ! 605: ! 606: OPLTYPE, INAREG|INTAREG, ! 607: SANY, TANY, ! 608: SAREG|AWD, TFLOAT, ! 609: NAREG|NASR, RESC1, ! 610: " movl AR,TA1\n", ! 611: ! 612: OPLTYPE, INAREG|INTAREG, ! 613: SANY, TANY, ! 614: SANY, ANYFIXED, ! 615: NAREG|NASR, RESC1, ! 616: " ZU\n", ! 617: ! 618: OPLTYPE, FORCC, ! 619: SANY, TANY, ! 620: SAREG|AWD, TFLOAT, ! 621: 0, RESCC, ! 622: " ldf AR\n tstf\n", ! 623: ! 624: OPLTYPE, FORCC, ! 625: SANY, TANY, ! 626: SAREG|AWD, TDOUBLE, ! 627: 0, RESCC, ! 628: " ldd AR\n tstd\n", ! 629: ! 630: OPLTYPE, FORCC, ! 631: SANY, TANY, ! 632: SANY, ANYFIXED, ! 633: 0, RESCC, ! 634: " tstZR AR\n", ! 635: ! 636: OPLTYPE, FORARG, ! 637: SANY, TANY, ! 638: SANY, TWORD, ! 639: 0, RNULL, ! 640: " pushl AR\n", ! 641: ! 642: OPLTYPE, FORARG, ! 643: SANY, TANY, ! 644: SANY, TCHAR|TSHORT, ! 645: 0, RNULL, ! 646: " pushZR AR\n", ! 647: ! 648: OPLTYPE, FORARG, ! 649: SANY, TANY, ! 650: SANY, TUCHAR|TUSHORT, ! 651: 0, RNULL, ! 652: " movzZRl AR,-(sp)\n", ! 653: ! 654: OPLTYPE, FORARG, ! 655: SANY, TANY, ! 656: SZERO, TFLOAT|TDOUBLE, ! 657: 0, RNULL, ! 658: " pushl $0\n pushl $0\n", ! 659: ! 660: OPLTYPE, FORARG, ! 661: SANY, TANY, ! 662: SIREG, TDOUBLE, ! 663: 0, RNULL, ! 664: " ldd AR\n pushd\n", ! 665: ! 666: OPLTYPE, FORARG, ! 667: SANY, TANY, ! 668: SAREG|SNAME|SOREG, TDOUBLE, ! 669: 0, RNULL, ! 670: " pushl UR\n pushl AR\n", ! 671: ! 672: OPLTYPE, FORARG, ! 673: SANY, TANY, ! 674: STARNM, TDOUBLE, ! 675: 0, RNULL, ! 676: " ldd AR\n pushd\n", ! 677: ! 678: OPLTYPE, FORARG, ! 679: SANY, TANY, ! 680: SAREG|AWD, TFLOAT, ! 681: 0, RNULL, ! 682: " pushl $0\n pushl AR\n", ! 683: ! 684: UNARY MINUS, INAREG|INTAREG|FORCC, ! 685: SAREG|AWD, ANYSIGNED|TUNSIGNED, ! 686: SANY, TANY, ! 687: NAREG|NASL, RESC1|RESCC, ! 688: " mnegZL AL,A1\n", ! 689: ! 690: UNARY MINUS, INAREG|INTAREG|FORCC, ! 691: SAREG|AWD, TFLOAT|TDOUBLE, ! 692: SANY, TANY, ! 693: NAREG|NASL, RESC1|RESCC, ! 694: " lnZL AL\n stZL TA1\n", ! 695: ! 696: COMPL, INAREG|INTAREG|FORCC, ! 697: SAREG|AWD, ANYSIGNED|TUNSIGNED, ! 698: SANY, TANY, ! 699: NAREG|NASL, RESC1|RESCC, ! 700: " mcomZL AL,A1\n", ! 701: ! 702: COMPL, INAREG|INTAREG|FORCC, ! 703: SAREG|AWD, ANYFIXED, ! 704: SANY, TANY, ! 705: NAREG|NASL, RESC1|RESCC, ! 706: " movzZLl AL,A1\n mcoml A1,A1\n", ! 707: ! 708: AND, FORCC, ! 709: SAREG|AWD, TWORD, ! 710: SAREG|AWD, TWORD, ! 711: 0, RESCC, ! 712: " bitl AR,AL\n", ! 713: ! 714: AND, FORCC, ! 715: SAREG|AWD, TSHORT|TUSHORT, ! 716: SSCON, TWORD, ! 717: 0, RESCC, ! 718: " bitw AR,AL\n", ! 719: ! 720: AND, FORCC, ! 721: SAREG|AWD, TSHORT|TUSHORT, ! 722: SAREG|AWD, TSHORT|TUSHORT, ! 723: 0, RESCC, ! 724: " bitw AR,AL\n", ! 725: ! 726: AND, FORCC, ! 727: SAREG|AWD, TCHAR|TUCHAR, ! 728: SCCON, TWORD, ! 729: 0, RESCC, ! 730: " bitb AR,AL\n", ! 731: ! 732: AND, FORCC, ! 733: SAREG|AWD, TCHAR|TUCHAR, ! 734: SAREG|AWD, TCHAR|TUCHAR, ! 735: 0, RESCC, ! 736: " bitb AR,AL\n", ! 737: ! 738: /* General cases for DIV and ASG DIV are handled below with OPMUL */ ! 739: /* Some special cases are handled in optim2() */ ! 740: ! 741: DIV, INAREG|FOREFF|FORCC, ! 742: SAREG|AWD, TUNSIGNED|TULONG, ! 743: SCON, ANYUSIGNED, ! 744: NAREG|NEVEN, RESC1|RESCC, ! 745: " movl AL,U1\n clrl A1\n ediv AR,A1,A1,U1\n", ! 746: ! 747: ASG DIV, INAREG|FOREFF|FORCC, ! 748: SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, ! 749: SMCON, ANYUSIGNED, ! 750: 0, RLEFT|RESCC, ! 751: " ZJ\n", ! 752: ! 753: ASG DIV, INAREG|FOREFF|FORCC, ! 754: SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, ! 755: SCON, ANYUSIGNED, ! 756: NAREG|NEVEN, RLEFT|RESCC, ! 757: " movl AL,U1\n clrl A1\n ediv AR,A1,AL,U1\n", ! 758: ! 759: MOD, INAREG|INTAREG, ! 760: SAREG|AWD, TINT|TLONG, ! 761: SAREG|AWD, TINT|TLONG, ! 762: NAREG|NEVEN, RESC1, ! 763: " ZM ediv AR,A1,U1,A1\n", ! 764: ! 765: MOD, INAREG|FOREFF, ! 766: SAREG|AWD, TUNSIGNED|TULONG, ! 767: SMCON, ANYUSIGNED, ! 768: NAREG|NASL, RLEFT|RESC1, ! 769: " ZJ\n", ! 770: ! 771: MOD, INAREG|FOREFF, ! 772: SAREG|AWD, TUNSIGNED|TULONG, ! 773: SCON, ANYUSIGNED, ! 774: NAREG|NEVEN, RESC1, ! 775: " movl AL,U1\n clrl A1\n ediv AR,A1,U1,A1\n", ! 776: ! 777: /* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */ ! 778: /* beware -- the ediv remainder operand must be a register */ ! 779: ASG MOD, INAREG|FOREFF|FORCC, ! 780: SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, ! 781: SAREG|AWD, TINT|TLONG, ! 782: NAREG|NEVEN, RLEFT|RESCC, ! 783: " ZM ediv AR,A1,U1,A1\n movl A1,AL\n", ! 784: ! 785: ASG MOD, INAREG|FOREFF, ! 786: SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, ! 787: SMCON, ANYUSIGNED, ! 788: 0, RLEFT, ! 789: " ZJ\n", ! 790: ! 791: ASG MOD, INAREG|FOREFF, ! 792: SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, ! 793: SCON, ANYUSIGNED, ! 794: NAREG|NEVEN, RLEFT, ! 795: " movl AL,U1\n clrl A1\n ediv AR,A1,U1,A1\n movl A1,AL\n", ! 796: ! 797: /* XXX is this supposed to help on overflow? */ ! 798: ASG MUL, INAREG|FOREFF|FORCC, ! 799: SAREG|AWD, TUNSIGNED, ! 800: SAREG|AWD, TUNSIGNED|TINT, ! 801: NAREG|NEVEN, RLEFT|RESCC, ! 802: " emul AR,AL,$0,A1\n movl U1,AL\n", ! 803: ! 804: ASG MUL, INAREG|FOREFF|FORCC, ! 805: SAREG|AWD, TUNSIGNED|TINT, ! 806: SAREG|AWD, TUNSIGNED, ! 807: NAREG|NEVEN, RLEFT|RESCC, ! 808: " emul AR,AL,$0,A1\n movl U1,AL\n", ! 809: ! 810: ASG OPMUL, INAREG|FOREFF|FORCC, ! 811: SAREG|AWD, TWORD, ! 812: SAREG|AWD, TWORD, ! 813: 0, RLEFT|RESCC, ! 814: " OL2 AR,AL\n", ! 815: ! 816: MUL, INAREG|INTAREG|FORCC, ! 817: STAREG, TUNSIGNED, ! 818: SAREG|AWD, TUNSIGNED, ! 819: NAREG|NEVEN, RLEFT|RESCC, ! 820: " emul AR,AL,$0,A1\n movl U1,AL\n", ! 821: ! 822: OPMUL, INAREG|INTAREG|FORCC, ! 823: STAREG, TWORD, ! 824: SAREG|AWD, TWORD, ! 825: 0, RLEFT|RESCC, ! 826: " OL2 AR,AL\n", ! 827: ! 828: MUL, INAREG|INTAREG|FORCC, ! 829: SAREG|AWD, TUNSIGNED, ! 830: SAREG|AWD, TUNSIGNED, ! 831: NAREG|NEVEN, RESC1|RESCC, ! 832: " emul AR,AL,$0,A1\n movl U1,A1\n", ! 833: ! 834: OPMUL, INAREG|INTAREG|FORCC, ! 835: SAREG|AWD, TWORD, ! 836: SAREG|AWD, TWORD, ! 837: NAREG|NASL|NASR, RESC1|RESCC, ! 838: " OL3 AR,AL,A1\n", ! 839: ! 840: #ifdef REG_CHAR ! 841: ASG PLUS, INAREG|FOREFF|FORCC, ! 842: SAREG, TWORD, ! 843: SONE, TINT, ! 844: 0, RLEFT|RESCC, ! 845: " incZL AL\n", ! 846: ! 847: ASG PLUS, INAREG|FOREFF|FORCC, ! 848: AWD, ANYFIXED, ! 849: SONE, TINT, ! 850: 0, RLEFT|RESCC, ! 851: " incZL AL\n", ! 852: ! 853: ASG MINUS, INAREG|FOREFF|FORCC, ! 854: SAREG, TWORD, ! 855: SONE, TINT, ! 856: 0, RLEFT|RESCC, ! 857: " decZL AL\n", ! 858: ! 859: ASG MINUS, INAREG|FOREFF|FORCC, ! 860: AWD, ANYFIXED, ! 861: SONE, TINT, ! 862: 0, RLEFT|RESCC, ! 863: " decZL AL\n", ! 864: #else ! 865: ASG PLUS, INAREG|FOREFF|FORCC, ! 866: SAREG|AWD, ANYFIXED, ! 867: SONE, TANY, ! 868: 0, RLEFT|RESCC, ! 869: " incZL AL\n", ! 870: ! 871: ASG MINUS, INAREG|FOREFF|FORCC, ! 872: SAREG|AWD, ANYFIXED, ! 873: SONE, TANY, ! 874: 0, RLEFT|RESCC, ! 875: " decZL AL\n", ! 876: #endif ! 877: ! 878: PLUS, INAREG|INTAREG|FORCC, ! 879: STAREG, TWORD, ! 880: SONE, TWORD, ! 881: 0, RLEFT|RESCC, ! 882: " incZL AL\n", ! 883: ! 884: MINUS, INAREG|INTAREG|FORCC, ! 885: STAREG, TWORD, ! 886: SONE, TWORD, ! 887: 0, RLEFT|RESCC, ! 888: " decZL AL\n", ! 889: ! 890: ASG OPSIMP, INAREG|FOREFF|FORCC, ! 891: SAREG|AWD, TWORD, ! 892: SAREG|AWD, TWORD, ! 893: 0, RLEFT|RESCC, ! 894: " OL2 AR,AL\n", ! 895: ! 896: ASG OPSIMP, INAREG|FOREFF|FORCC, ! 897: SAREG, TWORD, ! 898: SAREG, TSHORT|TUSHORT|TCHAR|TUCHAR, ! 899: 0, RLEFT|RESCC, ! 900: " OL2 AR,AL\n", ! 901: ! 902: ASG OPSIMP, INAREG|FOREFF|FORCC, ! 903: AWD, TSHORT|TUSHORT, ! 904: SAREG|AWD, TSHORT|TUSHORT, ! 905: 0, RLEFT|RESCC, ! 906: " OW2 AR,AL\n", ! 907: ! 908: ASG OPSIMP, INAREG|FOREFF|FORCC, ! 909: AWD, TSHORT|TUSHORT, ! 910: SSCON, TWORD, ! 911: 0, RLEFT|RESCC, ! 912: " OW2 AR,AL\n", ! 913: ! 914: ASG OPSIMP, INAREG|FOREFF|FORCC, ! 915: AWD, TCHAR|TUCHAR, ! 916: SAREG|AWD, TCHAR|TUCHAR, ! 917: 0, RLEFT|RESCC, ! 918: " OB2 AR,AL\n", ! 919: ! 920: ASG OPSIMP, INAREG|FOREFF|FORCC, ! 921: AWD, TCHAR|TUCHAR, ! 922: SCCON, TWORD, ! 923: 0, RLEFT|RESCC, ! 924: " OB2 AR,AL\n", ! 925: ! 926: OPSIMP, INAREG|INTAREG|FORCC, ! 927: STAREG, ANYFIXED, ! 928: SAREG|AWD, TWORD, ! 929: 0, RLEFT|RESCC, ! 930: " OL2 AR,AL\n", ! 931: ! 932: OPSIMP, INAREG|INTAREG|FORCC, ! 933: SAREG|AWD, TWORD, ! 934: SAREG|AWD, TWORD, ! 935: NAREG|NASL|NASR, RESC1|RESCC, ! 936: " OL3 AR,AL,A1\n", ! 937: ! 938: ASG OPSIMP, INAREG|FOREFF, ! 939: SAREG|AWD, TFLOAT|TDOUBLE, ! 940: SZERO, TANY, ! 941: 0, RLEFT, ! 942: "", ! 943: ! 944: ASG MUL, INAREG|FOREFF|FORCC, ! 945: SIREG, TDOUBLE, ! 946: SZERO, TANY, ! 947: 0, RLEFT|RESCC, ! 948: " cvld $0\n std AL\n", ! 949: ! 950: ASG MUL, INAREG|FOREFF|FORCC, ! 951: SAREG|SNAME|SOREG, TDOUBLE, ! 952: SZERO, TANY, ! 953: 0, RLEFT|RESCC, ! 954: " clrl UL\n clrl AL\n", ! 955: ! 956: ASG MUL, INAREG|FOREFF|FORCC, ! 957: SAREG|AWD, TFLOAT, ! 958: SZERO, TANY, ! 959: 0, RLEFT|RESCC, ! 960: " clrl TAL\n", ! 961: ! 962: ASG OPFLOAT, INAREG|FOREFF|FORCC, ! 963: SAREG|AWD, TFLOAT, ! 964: SAREG|AWD, TFLOAT, ! 965: 0, RLEFT|RESCC, ! 966: " ldf AL\n OF AR\n stf TAL\n", ! 967: ! 968: ASG OPFLOAT, INAREG|FOREFF|FORCC, ! 969: SAREG|AWD, TDOUBLE, ! 970: SAREG|AWD, TDOUBLE, ! 971: 0, RLEFT|RESCC, ! 972: " ldd AL\n OD AR\n std AL\n", ! 973: ! 974: ASG PLUS, INAREG|FOREFF|FORCC, ! 975: SAREG|AWD, TDOUBLE, ! 976: SAREG|AWD, TFLOAT, ! 977: NAREG|NASL, RLEFT|RESCC, ! 978: " ldfd AR\n OD AL\n std AL\n", ! 979: ! 980: ASG MUL, INAREG|FOREFF|FORCC, ! 981: SAREG|AWD, TDOUBLE, ! 982: SAREG|AWD, TFLOAT, ! 983: NAREG|NASL, RLEFT|RESCC, ! 984: " ldfd AR\n OD AL\n std AL\n", ! 985: ! 986: ASG OPFLOAT, INAREG|FOREFF|FORCC, ! 987: SAREG|AWD, TDOUBLE, ! 988: SAREG|AWD, TFLOAT, ! 989: NAREG|NASL, RLEFT|RESCC, ! 990: " ldfd AR\n std A1\n ldd AL\n OD A1\n std AL\n", ! 991: ! 992: ASG OPFLOAT, INAREG|FOREFF|FORCC, ! 993: SAREG|AWD, TFLOAT, ! 994: SAREG|AWD, TDOUBLE, ! 995: 0, RLEFT|RESCC, ! 996: " ldfd AL\n OD AR\n cvdf\n stf TAL\n", ! 997: ! 998: ASG OPFLOAT, INAREG|FOREFF|FORCC, ! 999: SAREG|AWD, ANYFIXED, ! 1000: SAREG|AWD, TFLOAT|TDOUBLE, ! 1001: NAREG, RLEFT|RESCC, /* usable() knows we may need a reg pair */ ! 1002: " ZG\n", ! 1003: ! 1004: OPSIMP, INAREG|INTAREG, ! 1005: SAREG, TFLOAT|TDOUBLE, ! 1006: SZERO, TANY, ! 1007: 0, RLEFT, ! 1008: #if defined(FORT) || defined(SPRECC) ! 1009: "T", ! 1010: #else ! 1011: "", ! 1012: #endif ! 1013: ! 1014: OPSIMP, INAREG|INTAREG|FORCC, ! 1015: AWD, TFLOAT, ! 1016: SZERO, TANY, ! 1017: NAREG, RESC1|RESCC, ! 1018: " movl AL,A1\n", ! 1019: ! 1020: OPSIMP, INAREG|INTAREG|FORCC, ! 1021: SIREG, TDOUBLE, ! 1022: SZERO, TANY, ! 1023: NAREG, RESC1|RESCC, ! 1024: " ldd AL\n std A1\n", ! 1025: ! 1026: OPSIMP, INAREG|INTAREG|FORCC, ! 1027: SAREG|SNAME|SOREG, TDOUBLE, ! 1028: SZERO, TANY, ! 1029: NAREG, RESC1|RESCC, ! 1030: " movl UL,U1\n movl AL,A1\n", ! 1031: ! 1032: MUL, INAREG|INTAREG|FORCC, ! 1033: SIREG, TDOUBLE, ! 1034: SZERO, TANY, ! 1035: NAREG|NASR, RESC1|RESCC, ! 1036: " cvld $0\n std A1\n", ! 1037: ! 1038: MUL, INAREG|INTAREG|FORCC, ! 1039: SAREG|SNAME|SOREG, TDOUBLE, ! 1040: SZERO, TANY, ! 1041: NAREG|NASR, RESC1|RESCC, ! 1042: " clrl U1\n clrl A1\n", ! 1043: ! 1044: MUL, INAREG|INTAREG|FORCC, ! 1045: SAREG|AWD, TFLOAT, ! 1046: SZERO, TANY, ! 1047: NAREG|NASR, RESC1|RESCC, ! 1048: " clrl TA1\n", ! 1049: ! 1050: OPFLOAT, INAREG|INTAREG|FORCC, ! 1051: SAREG|AWD, TFLOAT, ! 1052: SAREG|AWD, TFLOAT, ! 1053: NAREG|NASL|NASR, RESC1|RESCC, ! 1054: " ldf AL\n OF AR\n stf TA1\n", ! 1055: ! 1056: OPFLOAT, INAREG|INTAREG|FORCC, ! 1057: SZERO, TANY, ! 1058: SAREG|AWD, TDOUBLE, ! 1059: NAREG, RESC1|RESCC, ! 1060: "\tclrl\tA1\n\tclrl\tU1\n\tldd\tA1\n\tOD\tAR\n\tstd\tA1\n", ! 1061: ! 1062: OPFLOAT, INAREG|INTAREG|FORCC, ! 1063: SAREG|AWD, TDOUBLE, ! 1064: SAREG|AWD, TDOUBLE, ! 1065: NAREG|NASL|NASR, RESC1|RESCC, ! 1066: " ldd AL\n OD AR\n std A1\n", ! 1067: ! 1068: /* Default actions for hard trees ... */ ! 1069: ! 1070: # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,"" ! 1071: ! 1072: UNARY MUL, DF( UNARY MUL ), ! 1073: ! 1074: INCR, DF(INCR), ! 1075: ! 1076: DECR, DF(INCR), ! 1077: ! 1078: ASSIGN, DF(ASSIGN), ! 1079: ! 1080: STASG, DF(STASG), ! 1081: ! 1082: FLD, DF(FLD), ! 1083: ! 1084: OPLEAF, DF(NAME), ! 1085: ! 1086: OPLOG, FORCC, ! 1087: SANY, TANY, ! 1088: SANY, TANY, ! 1089: REWRITE, BITYPE, ! 1090: "", ! 1091: ! 1092: OPLOG, DF(NOT), ! 1093: ! 1094: COMOP, DF(COMOP), ! 1095: ! 1096: INIT, DF(INIT), ! 1097: ! 1098: OPUNARY, DF(UNARY MINUS), ! 1099: ! 1100: ! 1101: ASG OPANY, DF(ASG PLUS), ! 1102: ! 1103: OPANY, DF(BITYPE), ! 1104: ! 1105: 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.