1 #ifndef lint 2 static char sccsid[] = "@(#)table.c 1.20 (Berkeley) 02/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 /* 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|NASL, 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|NASL, 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|NASL, 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, 475 " ZW\n", 476 477 ASSIGN, INAREG|FOREFF|FORCC, 478 SAREG|AWD, TFLOAT|TDOUBLE, 479 SAREG|AWD, TUNSIGNED, 480 0, RLEFT, 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 OPLEAF, FOREFF, 547 SANY, TANY, 548 SAREG|AWD, TANY, 549 0, RLEFT, 550 "", 551 552 OPLTYPE, INAREG|INTAREG, 553 SANY, TANY, 554 SZERO, TDOUBLE, 555 NAREG|NASR, RESC1, 556 " clrl U1\n clrl A1\n", 557 558 OPLTYPE, INAREG|INTAREG, 559 SANY, TANY, 560 SIREG, TDOUBLE, 561 NAREG|NASR, RESC1, 562 " ldd AR\n std A1\n", 563 564 OPLTYPE, INAREG|INTAREG, 565 SANY, TANY, 566 SAREG|SNAME|SOREG|SCON, TDOUBLE, 567 NAREG, RESC1, 568 " movl AR,A1\n movl UR,U1\n", 569 570 OPLTYPE, INAREG|INTAREG, 571 SANY, TANY, 572 STARNM, TDOUBLE, 573 NAREG|NASR, RESC1, 574 " ldd AR\n std A1\n", 575 576 OPLTYPE, INAREG|INTAREG, 577 SANY, TANY, 578 SZERO, TANY, 579 NAREG|NASR, RESC1, 580 " clrl TA1\n", 581 582 OPLTYPE, INAREG|INTAREG, 583 SANY, TANY, 584 SAREG|AWD, TFLOAT, 585 NAREG|NASR, RESC1, 586 " movl AR,TA1\n", 587 588 OPLTYPE, INAREG|INTAREG, 589 SANY, TANY, 590 SANY, ANYFIXED, 591 NAREG|NASR, RESC1, 592 " ZU\n", 593 594 OPLTYPE, FORCC, 595 SANY, TANY, 596 SAREG|AWD, TFLOAT, 597 0, RESCC, 598 " ldf AR\n tstf\n", 599 600 OPLTYPE, FORCC, 601 SANY, TANY, 602 SAREG|AWD, TDOUBLE, 603 0, RESCC, 604 " ldd AR\n tstd\n", 605 606 OPLTYPE, FORCC, 607 SANY, TANY, 608 SANY, ANYFIXED, 609 0, RESCC, 610 " tstZR AR\n", 611 612 OPLTYPE, FORARG, 613 SANY, TANY, 614 SANY, TWORD, 615 0, RNULL, 616 " pushl AR\n", 617 618 OPLTYPE, FORARG, 619 SANY, TANY, 620 SANY, TCHAR|TSHORT, 621 0, RNULL, 622 " pushZR AR\n", 623 624 OPLTYPE, FORARG, 625 SANY, TANY, 626 SANY, TUCHAR|TUSHORT, 627 0, RNULL, 628 " movzZRl AR,-(sp)\n", 629 630 OPLTYPE, FORARG, 631 SANY, TANY, 632 SZERO, TFLOAT|TDOUBLE, 633 0, RNULL, 634 " pushl $0\n pushl $0\n", 635 636 OPLTYPE, FORARG, 637 SANY, TANY, 638 SIREG, TDOUBLE, 639 0, RNULL, 640 " ldd AR\n pushd\n", 641 642 OPLTYPE, FORARG, 643 SANY, TANY, 644 SAREG|SNAME|SOREG, TDOUBLE, 645 0, RNULL, 646 " pushl UR\n pushl AR\n", 647 648 OPLTYPE, FORARG, 649 SANY, TANY, 650 STARNM, TDOUBLE, 651 0, RNULL, 652 " ldd AR\n pushd\n", 653 654 OPLTYPE, FORARG, 655 SANY, TANY, 656 SAREG|AWD, TFLOAT, 657 0, RNULL, 658 " pushl $0\n pushl AR\n", 659 660 UNARY MINUS, INAREG|INTAREG|FORCC, 661 SAREG|AWD, ANYSIGNED|TUNSIGNED, 662 SANY, TANY, 663 NAREG|NASL, RESC1|RESCC, 664 " mnegZL AL,A1\n", 665 666 UNARY MINUS, INAREG|INTAREG|FORCC, 667 SAREG|AWD, TFLOAT|TDOUBLE, 668 SANY, TANY, 669 NAREG|NASL, RESC1|RESCC, 670 " lnZL AL\n stZL TA1\n", 671 672 COMPL, INAREG|INTAREG|FORCC, 673 SAREG|AWD, ANYSIGNED|TUNSIGNED, 674 SANY, TANY, 675 NAREG|NASL, RESC1|RESCC, 676 " mcomZL AL,A1\n", 677 678 COMPL, INAREG|INTAREG|FORCC, 679 SAREG|AWD, ANYFIXED, 680 SANY, TANY, 681 NAREG|NASL, RESC1|RESCC, 682 " movzZLl AL,A1\n mcoml A1,A1\n", 683 684 AND, FORCC, 685 SAREG|AWD, TWORD, 686 SAREG|AWD, TWORD, 687 0, RESCC, 688 " bitl AR,AL\n", 689 690 AND, FORCC, 691 SAREG|AWD, TSHORT|TUSHORT, 692 SSCON, TWORD, 693 0, RESCC, 694 " bitw AR,AL\n", 695 696 AND, FORCC, 697 SAREG|AWD, TSHORT|TUSHORT, 698 SAREG|AWD, TSHORT|TUSHORT, 699 0, RESCC, 700 " bitw AR,AL\n", 701 702 AND, FORCC, 703 SAREG|AWD, TCHAR|TUCHAR, 704 SCCON, TWORD, 705 0, RESCC, 706 " bitb AR,AL\n", 707 708 AND, FORCC, 709 SAREG|AWD, TCHAR|TUCHAR, 710 SAREG|AWD, TCHAR|TUCHAR, 711 0, RESCC, 712 " bitb AR,AL\n", 713 714 /* General cases for DIV and ASG DIV are handled below with OPMUL */ 715 /* Some special cases are handled in optim2() */ 716 717 DIV, INAREG|FOREFF|FORCC, 718 SAREG|AWD, TUNSIGNED|TULONG, 719 SCON, ANYUSIGNED, 720 NAREG|NEVEN, RESC1|RESCC, 721 " movl AL,U1\n clrl A1\n ediv AR,A1,A1,U1\n", 722 723 ASG DIV, INAREG|FOREFF|FORCC, 724 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 725 SMCON, ANYUSIGNED, 726 0, RLEFT|RESCC, 727 " ZJ\n", 728 729 ASG DIV, INAREG|FOREFF|FORCC, 730 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 731 SCON, ANYUSIGNED, 732 NAREG|NEVEN, RLEFT|RESCC, 733 " movl AL,U1\n clrl A1\n ediv AR,A1,AL,U1\n", 734 735 MOD, INAREG|INTAREG, 736 SAREG|AWD, TINT|TLONG, 737 SAREG|AWD, TINT|TLONG, 738 NAREG|NEVEN, RESC1, 739 " ZM ediv AR,A1,U1,A1\n", 740 741 MOD, INAREG|FOREFF, 742 SAREG|AWD, TUNSIGNED|TULONG, 743 SMCON, ANYUSIGNED, 744 NAREG|NASL, RLEFT|RESC1, 745 " ZJ\n", 746 747 MOD, INAREG|FOREFF, 748 SAREG|AWD, TUNSIGNED|TULONG, 749 SCON, ANYUSIGNED, 750 NAREG|NEVEN, RESC1, 751 " movl AL,U1\n clrl A1\n ediv AR,A1,U1,A1\n", 752 753 /* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */ 754 /* beware -- the ediv remainder operand must be a register */ 755 ASG MOD, INAREG|FOREFF, 756 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 757 SAREG|AWD, TINT|TLONG, 758 NAREG|NEVEN, RLEFT|RESCC, 759 " ZM ediv AR,A1,U1,A1\n movl A1,AL\n", 760 761 ASG MOD, INAREG|FOREFF, 762 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 763 SMCON, ANYUSIGNED, 764 0, RLEFT, 765 " ZJ\n", 766 767 ASG MOD, INAREG|FOREFF, 768 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 769 SCON, ANYUSIGNED, 770 NAREG|NEVEN, RLEFT, 771 " movl AL,U1\n clrl A1\n ediv AR,A1,U1,A1\n movl A1,AL\n", 772 773 /* XXX is this supposed to help on overflow? */ 774 ASG MUL, INAREG|FOREFF|FORCC, 775 SAREG|AWD, TUNSIGNED, 776 SAREG|AWD, TUNSIGNED|TINT, 777 NAREG|NEVEN, RLEFT|RESCC, 778 " emul AR,AL,$0,A1\n movl U1,AL\n", 779 780 ASG MUL, INAREG|FOREFF|FORCC, 781 SAREG|AWD, TUNSIGNED|TINT, 782 SAREG|AWD, TUNSIGNED, 783 NAREG|NEVEN, RLEFT|RESCC, 784 " emul AR,AL,$0,A1\n movl U1,AL\n", 785 786 ASG OPMUL, INAREG|FOREFF|FORCC, 787 SAREG|AWD, TWORD, 788 SAREG|AWD, TWORD, 789 0, RLEFT|RESCC, 790 " OL2 AR,AL\n", 791 792 MUL, INAREG|INTAREG|FORCC, 793 STAREG, TUNSIGNED, 794 SAREG|AWD, TUNSIGNED, 795 NAREG|NEVEN, RLEFT|RESCC, 796 " emul AR,AL,$0,A1\n movl U1,AL\n", 797 798 OPMUL, INAREG|INTAREG|FORCC, 799 STAREG, TWORD, 800 SAREG|AWD, TWORD, 801 0, RLEFT|RESCC, 802 " OL2 AR,AL\n", 803 804 MUL, INAREG|INTAREG|FORCC, 805 SAREG|AWD, TUNSIGNED, 806 SAREG|AWD, TUNSIGNED, 807 NAREG|NEVEN, RESC1|RESCC, 808 " emul AR,AL,$0,A1\n movl U1,A1\n", 809 810 OPMUL, INAREG|INTAREG|FORCC, 811 SAREG|AWD, TWORD, 812 SAREG|AWD, TWORD, 813 NAREG|NASL|NASR, RESC1|RESCC, 814 " OL3 AR,AL,A1\n", 815 816 #ifdef REG_CHAR 817 ASG PLUS, INAREG|FOREFF|FORCC, 818 SAREG, TWORD, 819 SONE, TINT, 820 0, RLEFT|RESCC, 821 " incZL AL\n", 822 823 ASG PLUS, INAREG|FOREFF|FORCC, 824 AWD, ANYFIXED, 825 SONE, TINT, 826 0, RLEFT|RESCC, 827 " incZL AL\n", 828 829 ASG MINUS, INAREG|FOREFF|FORCC, 830 SAREG, TWORD, 831 SONE, TINT, 832 0, RLEFT|RESCC, 833 " decZL AL\n", 834 835 ASG MINUS, INAREG|FOREFF|FORCC, 836 AWD, ANYFIXED, 837 SONE, TINT, 838 0, RLEFT|RESCC, 839 " decZL AL\n", 840 #else 841 ASG PLUS, INAREG|FOREFF|FORCC, 842 SAREG|AWD, ANYFIXED, 843 SONE, TANY, 844 0, RLEFT|RESCC, 845 " incZL AL\n", 846 847 ASG MINUS, INAREG|FOREFF|FORCC, 848 SAREG|AWD, ANYFIXED, 849 SONE, TANY, 850 0, RLEFT|RESCC, 851 " decZL AL\n", 852 #endif 853 854 PLUS, INAREG|INTAREG|FORCC, 855 STAREG, TWORD, 856 SONE, TWORD, 857 0, RLEFT|RESCC, 858 " incZL AL\n", 859 860 MINUS, INAREG|INTAREG|FORCC, 861 STAREG, TWORD, 862 SONE, TWORD, 863 0, RLEFT|RESCC, 864 " decZL AL\n", 865 866 ASG OPSIMP, INAREG|FOREFF|FORCC, 867 SAREG|AWD, TWORD, 868 SAREG|AWD, TWORD, 869 0, RLEFT|RESCC, 870 " OL2 AR,AL\n", 871 872 ASG OPSIMP, INAREG|FOREFF|FORCC, 873 SAREG, TWORD, 874 SAREG, TSHORT|TUSHORT|TCHAR|TUCHAR, 875 0, RLEFT|RESCC, 876 " OL2 AR,AL\n", 877 878 ASG OPSIMP, INAREG|FOREFF|FORCC, 879 AWD, TSHORT|TUSHORT, 880 SAREG|AWD, TSHORT|TUSHORT, 881 0, RLEFT|RESCC, 882 " OW2 AR,AL\n", 883 884 ASG OPSIMP, INAREG|FOREFF|FORCC, 885 AWD, TSHORT|TUSHORT, 886 SSCON, TWORD, 887 0, RLEFT|RESCC, 888 " OW2 AR,AL\n", 889 890 ASG OPSIMP, INAREG|FOREFF|FORCC, 891 AWD, TCHAR|TUCHAR, 892 SAREG|AWD, TCHAR|TUCHAR, 893 0, RLEFT|RESCC, 894 " OB2 AR,AL\n", 895 896 ASG OPSIMP, INAREG|FOREFF|FORCC, 897 AWD, TCHAR|TUCHAR, 898 SCCON, TWORD, 899 0, RLEFT|RESCC, 900 " OB2 AR,AL\n", 901 902 OPSIMP, INAREG|INTAREG|FORCC, 903 STAREG, ANYFIXED, 904 SAREG|AWD, TWORD, 905 0, RLEFT|RESCC, 906 " OL2 AR,AL\n", 907 908 OPSIMP, INAREG|INTAREG|FORCC, 909 SAREG|AWD, TWORD, 910 SAREG|AWD, TWORD, 911 NAREG|NASL|NASR, RESC1|RESCC, 912 " OL3 AR,AL,A1\n", 913 914 ASG OPSIMP, INAREG|FOREFF, 915 SAREG|AWD, TFLOAT|TDOUBLE, 916 SZERO, TANY, 917 0, RLEFT, 918 "", 919 920 ASG MUL, INAREG|FOREFF|FORCC, 921 SIREG, TDOUBLE, 922 SZERO, TANY, 923 0, RLEFT|RESCC, 924 " cvld $0\n std AL\n", 925 926 ASG MUL, INAREG|FOREFF|FORCC, 927 SAREG|SNAME|SOREG, TDOUBLE, 928 SZERO, TANY, 929 0, RLEFT|RESCC, 930 " clrl UL\n clrl AL\n", 931 932 ASG MUL, INAREG|FOREFF|FORCC, 933 SAREG|AWD, TFLOAT, 934 SZERO, TANY, 935 0, RLEFT|RESCC, 936 " clrl TAL\n", 937 938 ASG OPFLOAT, INAREG|FOREFF|FORCC, 939 SAREG|AWD, TFLOAT, 940 SAREG|AWD, TFLOAT, 941 0, RLEFT|RESCC, 942 " ldf AL\n OF AR\n stf TAL\n", 943 944 ASG OPFLOAT, INAREG|FOREFF|FORCC, 945 SAREG|AWD, TDOUBLE, 946 SAREG|AWD, TDOUBLE, 947 0, RLEFT|RESCC, 948 " ldd AL\n OD AR\n std AL\n", 949 950 ASG PLUS, INAREG|FOREFF|FORCC, 951 SAREG|AWD, TDOUBLE, 952 SAREG|AWD, TFLOAT, 953 NAREG|NASL, RLEFT|RESCC, 954 " ldfd AR\n OD AL\n std AL\n", 955 956 ASG MUL, INAREG|FOREFF|FORCC, 957 SAREG|AWD, TDOUBLE, 958 SAREG|AWD, TFLOAT, 959 NAREG|NASL, RLEFT|RESCC, 960 " ldfd AR\n OD AL\n std AL\n", 961 962 ASG OPFLOAT, INAREG|FOREFF|FORCC, 963 SAREG|AWD, TDOUBLE, 964 SAREG|AWD, TFLOAT, 965 NAREG|NASL, RLEFT|RESCC, 966 " ldfd AR\n std A1\n ldd AL\n OD A1\n std AL\n", 967 968 ASG OPFLOAT, INAREG|FOREFF|FORCC, 969 SAREG|AWD, TFLOAT, 970 SAREG|AWD, TDOUBLE, 971 0, RLEFT|RESCC, 972 " ldfd AL\n OD AR\n cvdf\n stf TAL\n", 973 974 ASG OPFLOAT, INAREG|FOREFF, 975 SAREG|AWD, ANYFIXED, 976 SAREG|AWD, TFLOAT|TDOUBLE, 977 NAREG, RLEFT|RESCC, /* usable() knows we may need a reg pair */ 978 " ZG\n", 979 980 OPSIMP, INAREG|INTAREG, 981 SAREG, TFLOAT|TDOUBLE, 982 SZERO, TANY, 983 0, RLEFT, 984 #if defined(FORT) || defined(SPRECC) 985 "T", 986 #else 987 "", 988 #endif 989 990 OPSIMP, INAREG|INTAREG|FORCC, 991 AWD, TFLOAT, 992 SZERO, TANY, 993 NAREG, RESC1|RESCC, 994 " movl AL,A1\n", 995 996 OPSIMP, INAREG|INTAREG|FORCC, 997 SIREG, TDOUBLE, 998 SZERO, TANY, 999 NAREG, RESC1|RESCC, 1000 " ldd AL\n std A1\n", 1001 1002 OPSIMP, INAREG|INTAREG|FORCC, 1003 SAREG|SNAME|SOREG, TDOUBLE, 1004 SZERO, TANY, 1005 NAREG, RESC1|RESCC, 1006 " movl UL,U1\n movl AL,A1\n", 1007 1008 MUL, INAREG|INTAREG|FORCC, 1009 SIREG, TDOUBLE, 1010 SZERO, TANY, 1011 NAREG|NASR, RESC1|RESCC, 1012 " cvld $0\n std A1\n", 1013 1014 MUL, INAREG|INTAREG|FORCC, 1015 SAREG|SNAME|SOREG, TDOUBLE, 1016 SZERO, TANY, 1017 NAREG|NASR, RESC1|RESCC, 1018 " clrl U1\n clrl A1\n", 1019 1020 MUL, INAREG|INTAREG|FORCC, 1021 SAREG|AWD, TFLOAT, 1022 SZERO, TANY, 1023 NAREG|NASR, RESC1|RESCC, 1024 " clrl TA1\n", 1025 1026 OPFLOAT, INAREG|INTAREG|FORCC, 1027 SAREG|AWD, TFLOAT, 1028 SAREG|AWD, TFLOAT, 1029 NAREG|NASL|NASR, RESC1|RESCC, 1030 " ldf AL\n OF AR\n stf TA1\n", 1031 1032 OPFLOAT, INAREG|INTAREG|FORCC, 1033 SZERO, TANY, 1034 SAREG|AWD, TDOUBLE, 1035 NAREG, RESC1|RESCC, 1036 "\tclrl\tA1\n\tclrl\tU1\n\tldd\tA1\n\tOD\tAR\n\tstd\tA1\n", 1037 1038 OPFLOAT, INAREG|INTAREG|FORCC, 1039 SAREG|AWD, TDOUBLE, 1040 SAREG|AWD, TDOUBLE, 1041 NAREG|NASL|NASR, RESC1|RESCC, 1042 " ldd AL\n OD AR\n std A1\n", 1043 1044 /* Default actions for hard trees ... */ 1045 1046 # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,"" 1047 1048 UNARY MUL, DF( UNARY MUL ), 1049 1050 INCR, DF(INCR), 1051 1052 DECR, DF(INCR), 1053 1054 ASSIGN, DF(ASSIGN), 1055 1056 STASG, DF(STASG), 1057 1058 FLD, DF(FLD), 1059 1060 OPLEAF, DF(NAME), 1061 1062 OPLOG, FORCC, 1063 SANY, TANY, 1064 SANY, TANY, 1065 REWRITE, BITYPE, 1066 "", 1067 1068 OPLOG, DF(NOT), 1069 1070 COMOP, DF(COMOP), 1071 1072 INIT, DF(INIT), 1073 1074 OPUNARY, DF(UNARY MINUS), 1075 1076 1077 ASG OPANY, DF(ASG PLUS), 1078 1079 OPANY, DF(BITYPE), 1080 1081 FREE, FREE, FREE, FREE, FREE, FREE, FREE, FREE, "help; I'm in trouble\n" }; 1082