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