1 #ifndef lint 2 static char sccsid[] = "@(#)table.c 1.14 (Berkeley) 12/10/87"; 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|RESCC, 51 " ZU\n", 52 53 SCONV, FORCC, 54 SAREG|AWD, ANYFIXED, 55 SANY, ANYFIXED, 56 NAREG|NASL, RESC1|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, TWORD, 326 SCON|SNAME, TANY, 327 0, RLEFT, 328 " ZE\n", 329 330 DECR, FOREFF, 331 SAREG|AWD, TWORD, 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|FORCC, 349 SAREG|AWD, ANYFIXED, 350 SAREG|AWD, ANYFIXED, 351 0, RLEFT|RRIGHT|RESCC, 352 " ZU\n", 353 354 ASSIGN, INAREG|FOREFF|FORCC, 355 SIREG, TDOUBLE, 356 SZERO, TANY, 357 0, RLEFT|RESCC, 358 " cvld $0\n std AL\n", 359 360 ASSIGN, INAREG|FOREFF|FORCC, 361 SAREG|SNAME|SOREG, TDOUBLE, 362 SZERO, TANY, 363 0, RLEFT|RESCC, 364 " clrl UL\n clrl AL\n", 365 366 ASSIGN, INAREG|FOREFF|FORCC, 367 SAREG|AWD, TDOUBLE, 368 SIREG, TDOUBLE, 369 0, RLEFT|RRIGHT|RESCC, 370 " ldd AR\n std AL\n", 371 372 ASSIGN, INAREG|FOREFF|FORCC, 373 SIREG, TDOUBLE, 374 SAREG|AWD, TDOUBLE, 375 0, RLEFT|RRIGHT|RESCC, 376 " ldd AR\n std AL\n", 377 378 ASSIGN, INAREG|FOREFF|FORCC, 379 SAREG|SNAME|SOREG, TDOUBLE, 380 SAREG|SNAME|SOREG, TDOUBLE, 381 0, RLEFT|RRIGHT|RESCC, 382 " movl UR,UL\n movl AR,AL\n", 383 384 ASSIGN, INAREG|FOREFF|FORCC, 385 SAREG|AWD, TFLOAT, 386 SZERO, TANY, 387 0, RLEFT|RESCC, 388 " clrl TAL\n", 389 390 ASSIGN, INAREG|FOREFF|FORCC, 391 SAREG|AWD, TFLOAT, 392 SAREG|AWD, TFLOAT, 393 0, RLEFT|RRIGHT|RESCC, 394 " movl AR,TAL\n", 395 396 ASSIGN, INAREG|FOREFF|FORCC, 397 SAREG|AWD, TFLOAT, 398 SAREG|AWD, TDOUBLE, 399 0, RLEFT|RESCC, 400 " ldd AR\n cvdf\n stf AL\n", 401 402 ASSIGN, INAREG|FOREFF|FORCC, 403 SAREG|AWD, TDOUBLE, 404 SAREG|AWD, TFLOAT, 405 0, RLEFT|RESCC, 406 " ldfd AR\n std AL\n", 407 408 ASSIGN, INAREG|FOREFF|FORCC, 409 SAREG|AWD, TFLOAT|TDOUBLE, 410 SAREG|AWD, TINT, 411 0, RLEFT|RESCC, 412 " cvlZL AR\n stZL AL\n", 413 414 /* XXX need to trim significance here? */ 415 ASSIGN, INAREG|FOREFF|FORCC, 416 SAREG|AWD, TINT, 417 SAREG|AWD, TFLOAT|TDOUBLE, 418 0, RLEFT|RESCC, 419 " ldZR AR\n cvZRl AL\n", 420 421 /* unfortunately assignments are exempt from type balancing */ 422 ASSIGN, INAREG|FOREFF|FORCC, 423 SAREG|AWD, TCHAR|TUCHAR|TSHORT|TUSHORT, 424 SAREG|AWD, TFLOAT|TDOUBLE, 425 NAREG|NASL, RLEFT|RESCC, 426 " ldZR AR\n cvZRl A1\n cvtlZL A1,AL\n", 427 428 ASSIGN, INAREG|FOREFF|FORCC, 429 SAREG|AWD, TFLOAT|TDOUBLE, 430 SAREG|AWD, TCHAR|TSHORT, 431 NAREG|NASL, RLEFT|RESCC, 432 " cvtZRl AR,A1\n cvlZL A1\n stZL AL\n", 433 434 ASSIGN, INAREG|FOREFF|FORCC, 435 SAREG|AWD, TFLOAT|TDOUBLE, 436 SAREG|AWD, TUCHAR|TUSHORT, 437 NAREG|NASL, RLEFT|RESCC, 438 " movzZRl AR,A1\n cvlZL A1\n stZL AL\n", 439 440 ASSIGN, INAREG|FOREFF|FORCC, 441 SAREG|AWD, TUNSIGNED, 442 SAREG|AWD, TFLOAT|TDOUBLE, 443 0, RLEFT, 444 " ZW\n", 445 446 ASSIGN, INAREG|FOREFF|FORCC, 447 SAREG|AWD, TFLOAT|TDOUBLE, 448 SAREG|AWD, TUNSIGNED, 449 0, RLEFT, 450 " ZY\n", 451 452 ASSIGN, INAREG|FOREFF, 453 SFLD, TANY, 454 SZERO, TANY, 455 0, RRIGHT, 456 " andl2 N,AL\n", 457 458 ASSIGN, FOREFF, 459 SFLD, TANY, 460 SCON, TANY, 461 0, RNOP, 462 " andl2 N,AL\n orl2 ZF,AL\n", 463 464 ASSIGN, INAREG, 465 SFLD, TANY, 466 SCON, TANY, 467 NAREG, RESC1, 468 " andl2 N,AL\n orl2 ZF,AL\n ZI\n", 469 470 ASSIGN, FOREFF, 471 SFLD, TANY, 472 SAREG|AWD, TWORD, 473 NAREG|NASR, RNOP, 474 " shll $H,AR,A1\n andl2 M,A1\n andl2 N,AL\n\ 475 orl2 A1,AL\n", 476 477 ASSIGN, INAREG, 478 SFLD, TANY, 479 SAREG|AWD, TWORD, 480 NAREG, RESC1, 481 " shll $H,AR,A1\n andl2 M,A1\n andl2 N,AL\n\ 482 orl2 A1,AL\n ZI\n", 483 484 /* dummy UNARY MUL entry to get U* to possibly match OPLTYPE */ 485 UNARY MUL, FOREFF, 486 SCC, TANY, 487 SCC, TANY, 488 0, RNULL, 489 " help help help\n", 490 491 REG, INTEMP, 492 SANY, TANY, 493 SAREG, TDOUBLE, 494 2*NTEMP, RESC1, 495 " movl UR,U1\n movl AR,A1\n", 496 497 REG, INTEMP, 498 SANY, TANY, 499 SAREG, TANY, 500 NTEMP, RESC1, 501 " movl AR,A1\n", 502 503 REG, FORARG, 504 SANY, TANY, 505 SAREG, TFLOAT, 506 0, RNULL, 507 " pushl $0\n pushl AR\n", 508 509 REG, FORARG, 510 SANY, TANY, 511 SAREG, TDOUBLE, 512 0, RNULL, 513 " pushl UR\n pushl AR\n", 514 515 OPLEAF, FOREFF, 516 SANY, TANY, 517 SAREG|AWD, TANY, 518 0, RLEFT, 519 "", 520 521 OPLTYPE, INAREG|INTAREG, 522 SANY, TANY, 523 SZERO, TDOUBLE, 524 NAREG|NASR, RESC1, 525 " clrl U1\n clrl A1\n", 526 527 OPLTYPE, INAREG|INTAREG, 528 SANY, TANY, 529 SIREG, TDOUBLE, 530 NAREG|NASR, RESC1, 531 " ldd AR\n std A1\n", 532 533 OPLTYPE, INAREG|INTAREG, 534 SANY, TANY, 535 SAREG|SNAME|SOREG|SCON, TDOUBLE, 536 NAREG, RESC1, 537 " movl AR,A1\n movl UR,U1\n", 538 539 OPLTYPE, INAREG|INTAREG, 540 SANY, TANY, 541 SZERO, TANY, 542 NAREG|NASR, RESC1, 543 " clrl TA1\n", 544 545 OPLTYPE, INAREG|INTAREG, 546 SANY, TANY, 547 SAREG|AWD, TFLOAT, 548 NAREG|NASR, RESC1, 549 " movl AR,TA1\n", 550 551 OPLTYPE, INAREG|INTAREG, 552 SANY, TANY, 553 SANY, ANYFIXED, 554 NAREG|NASR, RESC1, 555 " ZU\n", 556 557 OPLTYPE, FORCC, 558 SANY, TANY, 559 SAREG|AWD, TFLOAT, 560 0, RESCC, 561 " ldf AR\n tstf\n", 562 563 OPLTYPE, FORCC, 564 SANY, TANY, 565 SAREG|AWD, TDOUBLE, 566 0, RESCC, 567 " ldd AR\n tstd\n", 568 569 OPLTYPE, FORCC, 570 SANY, TANY, 571 SANY, ANYFIXED, 572 0, RESCC, 573 " tstZR AR\n", 574 575 OPLTYPE, FORARG, 576 SANY, TANY, 577 SANY, TWORD, 578 0, RNULL, 579 " pushl AR\n", 580 581 OPLTYPE, FORARG, 582 SANY, TANY, 583 SANY, TCHAR|TSHORT, 584 0, RNULL, 585 " pushZR AR\n", 586 587 OPLTYPE, FORARG, 588 SANY, TANY, 589 SANY, TUCHAR|TUSHORT, 590 0, RNULL, 591 " movzZRl AR,-(sp)\n", 592 593 OPLTYPE, FORARG, 594 SANY, TANY, 595 SZERO, TFLOAT|TDOUBLE, 596 0, RNULL, 597 " pushl $0\n pushl $0\n", 598 599 OPLTYPE, FORARG, 600 SANY, TANY, 601 SIREG, TDOUBLE, 602 0, RNULL, 603 " ldd AR\n pushd\n", 604 605 OPLTYPE, FORARG, 606 SANY, TANY, 607 SAREG|AWD, TDOUBLE, 608 0, RNULL, 609 " pushl UR\n pushl AR\n", 610 611 OPLTYPE, FORARG, 612 SANY, TANY, 613 SAREG|AWD, TFLOAT, 614 0, RNULL, 615 " pushl $0\n pushl AR\n", 616 617 UNARY MINUS, INAREG|INTAREG|FORCC, 618 SAREG|AWD, ANYSIGNED|TUNSIGNED, 619 SANY, TANY, 620 NAREG|NASL, RESC1|RESCC, 621 " mnegZL AL,A1\n", 622 623 UNARY MINUS, INAREG|INTAREG|FORCC, 624 SAREG|AWD, TFLOAT|TDOUBLE, 625 SANY, TANY, 626 NAREG|NASL, RESC1|RESCC, 627 " lnZL AL\n stZL TA1\n", 628 629 COMPL, INAREG|INTAREG|FORCC, 630 SAREG|AWD, ANYSIGNED|TUNSIGNED, 631 SANY, TANY, 632 NAREG|NASL, RESC1|RESCC, 633 " mcomZL AL,A1\n", 634 635 COMPL, INAREG|INTAREG|FORCC, 636 SAREG|AWD, ANYFIXED, 637 SANY, TANY, 638 NAREG|NASL, RESC1|RESCC, 639 " movzZLl AL,A1\n mcoml A1,A1\n", 640 641 AND, FORCC, 642 SAREG|AWD, TWORD, 643 SAREG|AWD, TWORD, 644 0, RESCC, 645 " bitl AR,AL\n", 646 647 AND, FORCC, 648 SAREG|AWD, TSHORT|TUSHORT, 649 SSCON, TWORD, 650 0, RESCC, 651 " bitw AR,AL\n", 652 653 AND, FORCC, 654 SAREG|AWD, TSHORT|TUSHORT, 655 SAREG|AWD, TSHORT|TUSHORT, 656 0, RESCC, 657 " bitw AR,AL\n", 658 659 AND, FORCC, 660 SAREG|AWD, TCHAR|TUCHAR, 661 SCCON, TWORD, 662 0, RESCC, 663 " bitb AR,AL\n", 664 665 AND, FORCC, 666 SAREG|AWD, TCHAR|TUCHAR, 667 SAREG|AWD, TCHAR|TUCHAR, 668 0, RESCC, 669 " bitb AR,AL\n", 670 671 /* General cases for DIV and ASG DIV are handled below with OPMUL */ 672 /* Some special cases are handled in optim2() */ 673 674 DIV, INAREG|FOREFF|FORCC, 675 SAREG|AWD, TUNSIGNED|TULONG, 676 SCON, ANYUSIGNED, 677 NAREG|NEVEN, RESC1|RESCC, 678 " movl AL,U1\n clrl A1\n ediv AR,A1,A1,U1\n", 679 680 ASG DIV, INAREG|FOREFF|FORCC, 681 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 682 SMCON, ANYUSIGNED, 683 0, RLEFT|RESCC, 684 " ZJ\n", 685 686 ASG DIV, INAREG|FOREFF|FORCC, 687 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 688 SCON, ANYUSIGNED, 689 NAREG|NEVEN, RLEFT|RESCC, 690 " movl AL,U1\n clrl A1\n ediv AR,A1,AL,U1\n", 691 692 MOD, INAREG|INTAREG, 693 SAREG|AWD, TINT|TLONG, 694 SAREG|AWD, TINT|TLONG, 695 NAREG|NEVEN, RESC1, 696 " ZM ediv AR,A1,U1,A1\n", 697 698 MOD, INAREG|FOREFF, 699 SAREG|AWD, TUNSIGNED|TULONG, 700 SMCON, ANYUSIGNED, 701 NAREG|NASL, RLEFT|RESC1, 702 " ZJ\n", 703 704 MOD, INAREG|FOREFF, 705 SAREG|AWD, TUNSIGNED|TULONG, 706 SCON, ANYUSIGNED, 707 NAREG|NEVEN, RESC1, 708 " movl AL,U1\n clrl A1\n ediv AR,A1,U1,A1\n", 709 710 /* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */ 711 ASG MOD, INAREG|FOREFF, 712 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 713 SAREG|AWD, TINT|TLONG, 714 NAREG|NEVEN, RLEFT|RESCC, 715 " ZM ediv AR,A1,A1,AL\n", 716 717 ASG MOD, INAREG|FOREFF, 718 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 719 SMCON, ANYUSIGNED, 720 0, RLEFT, 721 " ZJ\n", 722 723 ASG MOD, INAREG|FOREFF, 724 SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG, 725 SCON, ANYUSIGNED, 726 NAREG|NEVEN, RLEFT, 727 " movl AL,U1\n clrl A1\n ediv AR,A1,A1,AL\n", 728 729 /* XXX is this supposed to help on overflow? */ 730 ASG MUL, INAREG|FOREFF|FORCC, 731 SAREG|AWD, TUNSIGNED, 732 SAREG|AWD, TUNSIGNED|TINT, 733 NAREG|NEVEN, RLEFT|RESCC, 734 " emul AR,AL,$0,A1\n movl U1,AL\n", 735 736 ASG MUL, INAREG|FOREFF|FORCC, 737 SAREG|AWD, TUNSIGNED|TINT, 738 SAREG|AWD, TUNSIGNED, 739 NAREG|NEVEN, RLEFT|RESCC, 740 " emul AR,AL,$0,A1\n movl U1,AL\n", 741 742 ASG OPMUL, INAREG|FOREFF|FORCC, 743 SAREG|AWD, TWORD, 744 SAREG|AWD, TWORD, 745 0, RLEFT|RESCC, 746 " OL2 AR,AL\n", 747 748 MUL, INAREG|INTAREG|FORCC, 749 STAREG, TUNSIGNED, 750 SAREG|AWD, TUNSIGNED, 751 NAREG|NEVEN, RLEFT|RESCC, 752 " emul AR,AL,$0,A1\n movl U1,AL\n", 753 754 OPMUL, INAREG|INTAREG|FORCC, 755 STAREG, TWORD, 756 SAREG|AWD, TWORD, 757 0, RLEFT|RESCC, 758 " OL2 AR,AL\n", 759 760 MUL, INAREG|INTAREG|FORCC, 761 SAREG|AWD, TUNSIGNED, 762 SAREG|AWD, TUNSIGNED, 763 NAREG|NEVEN, RESC1|RESCC, 764 " emul AR,AL,$0,A1\n movl U1,A1\n", 765 766 OPMUL, INAREG|INTAREG|FORCC, 767 SAREG|AWD, TWORD, 768 SAREG|AWD, TWORD, 769 NAREG|NASL|NASR, RESC1|RESCC, 770 " OL3 AR,AL,A1\n", 771 772 #ifdef REG_CHAR 773 ASG PLUS, INAREG|FOREFF|FORCC, 774 SAREG, TWORD, 775 SONE, TINT, 776 0, RLEFT|RESCC, 777 " incZL AL\n", 778 779 ASG PLUS, INAREG|FOREFF|FORCC, 780 AWD, ANYFIXED, 781 SONE, TINT, 782 0, RLEFT|RESCC, 783 " incZL AL\n", 784 785 ASG MINUS, INAREG|FOREFF|FORCC, 786 SAREG, TWORD, 787 SONE, TINT, 788 0, RLEFT|RESCC, 789 " decZL AL\n", 790 791 ASG MINUS, INAREG|FOREFF|FORCC, 792 AWD, ANYFIXED, 793 SONE, TINT, 794 0, RLEFT|RESCC, 795 " decZL AL\n", 796 #else 797 ASG PLUS, INAREG|FOREFF|FORCC, 798 SAREG|AWD, ANYFIXED, 799 SONE, TANY, 800 0, RLEFT|RESCC, 801 " incZL AL\n", 802 803 ASG MINUS, INAREG|FOREFF|FORCC, 804 SAREG|AWD, ANYFIXED, 805 SONE, TANY, 806 0, RLEFT|RESCC, 807 " decZL AL\n", 808 #endif 809 810 PLUS, INAREG|INTAREG|FORCC, 811 STAREG, TWORD, 812 SONE, TWORD, 813 0, RLEFT|RESCC, 814 " incZL AL\n", 815 816 MINUS, INAREG|INTAREG|FORCC, 817 STAREG, TWORD, 818 SONE, TWORD, 819 0, RLEFT|RESCC, 820 " decZL AL\n", 821 822 ASG OPSIMP, INAREG|FOREFF|FORCC, 823 SAREG|AWD, TWORD, 824 SAREG|AWD, TWORD, 825 0, RLEFT|RESCC, 826 " OL2 AR,AL\n", 827 828 ASG OPSIMP, INAREG|FOREFF|FORCC, 829 SAREG, TWORD, 830 SAREG, TSHORT|TUSHORT|TCHAR|TUCHAR, 831 0, RLEFT|RESCC, 832 " OL2 AR,AL\n", 833 834 ASG OPSIMP, INAREG|FOREFF|FORCC, 835 AWD, TSHORT|TUSHORT, 836 SAREG|AWD, TSHORT|TUSHORT, 837 0, RLEFT|RESCC, 838 " OW2 AR,AL\n", 839 840 ASG OPSIMP, INAREG|FOREFF|FORCC, 841 AWD, TSHORT|TUSHORT, 842 SSCON, TWORD, 843 0, RLEFT|RESCC, 844 " OW2 AR,AL\n", 845 846 ASG OPSIMP, INAREG|FOREFF|FORCC, 847 AWD, TCHAR|TUCHAR, 848 SAREG|AWD, TCHAR|TUCHAR, 849 0, RLEFT|RESCC, 850 " OB2 AR,AL\n", 851 852 ASG OPSIMP, INAREG|FOREFF|FORCC, 853 AWD, TCHAR|TUCHAR, 854 SCCON, TWORD, 855 0, RLEFT|RESCC, 856 " OB2 AR,AL\n", 857 858 OPSIMP, INAREG|INTAREG|FORCC, 859 STAREG, ANYFIXED, 860 SAREG|AWD, TWORD, 861 0, RLEFT|RESCC, 862 " OL2 AR,AL\n", 863 864 OPSIMP, INAREG|INTAREG|FORCC, 865 SAREG|AWD, TWORD, 866 SAREG|AWD, TWORD, 867 NAREG|NASL|NASR, RESC1|RESCC, 868 " OL3 AR,AL,A1\n", 869 870 ASG OPSIMP, INAREG|FOREFF, 871 SAREG|AWD, TFLOAT|TDOUBLE, 872 SZERO, TANY, 873 0, RLEFT, 874 "", 875 876 ASG MUL, INAREG|FOREFF|FORCC, 877 SIREG, TDOUBLE, 878 SZERO, TANY, 879 0, RLEFT|RESCC, 880 " cvld $0\n std AL\n", 881 882 ASG MUL, INAREG|FOREFF|FORCC, 883 SAREG|SNAME|SOREG, TDOUBLE, 884 SZERO, TANY, 885 0, RLEFT|RESCC, 886 " clrl UL\n clrl AL\n", 887 888 ASG MUL, INAREG|FOREFF|FORCC, 889 SAREG|AWD, TFLOAT, 890 SZERO, TANY, 891 0, RLEFT|RESCC, 892 " clrl TAL\n", 893 894 ASG OPFLOAT, INAREG|FOREFF|FORCC, 895 SAREG|AWD, TFLOAT, 896 SAREG|AWD, TFLOAT, 897 0, RLEFT|RESCC, 898 " ldf AL\n OF AR\n stf TAL\n", 899 900 ASG OPFLOAT, INAREG|FOREFF|FORCC, 901 SAREG|AWD, TDOUBLE, 902 SAREG|AWD, TDOUBLE, 903 0, RLEFT|RESCC, 904 " ldd AL\n OD AR\n std AL\n", 905 906 ASG PLUS, INAREG|FOREFF|FORCC, 907 SAREG|AWD, TDOUBLE, 908 SAREG|AWD, TFLOAT, 909 NAREG|NASL, RLEFT|RESCC, 910 " ldfd AR\n OD AL\n std AL\n", 911 912 ASG MUL, INAREG|FOREFF|FORCC, 913 SAREG|AWD, TDOUBLE, 914 SAREG|AWD, TFLOAT, 915 NAREG|NASL, RLEFT|RESCC, 916 " ldfd AR\n OD AL\n std AL\n", 917 918 ASG OPFLOAT, INAREG|FOREFF|FORCC, 919 SAREG|AWD, TDOUBLE, 920 SAREG|AWD, TFLOAT, 921 NAREG|NASL, RLEFT|RESCC, 922 " ldfd AR\n std A1\n ldd AL\n OD A1\n std AL\n", 923 924 ASG OPFLOAT, INAREG|FOREFF|FORCC, 925 SAREG|AWD, TFLOAT, 926 SAREG|AWD, TDOUBLE, 927 0, RLEFT|RESCC, 928 " ldfd AL\n OD AR\n cvdf\n stf TAL\n", 929 930 ASG OPFLOAT, INAREG|FOREFF, 931 SAREG|AWD, ANYFIXED, 932 SAREG|AWD, TFLOAT|TDOUBLE, 933 NAREG, RLEFT|RESCC, /* usable() knows we may need a reg pair */ 934 " ZG\n", 935 936 OPSIMP, INAREG|INTAREG, 937 SAREG, TFLOAT|TDOUBLE, 938 SZERO, TANY, 939 0, RLEFT, 940 #if defined(FORT) || defined(SPRECC) 941 "T", 942 #else 943 "", 944 #endif 945 946 OPSIMP, INAREG|INTAREG|FORCC, 947 AWD, TFLOAT, 948 SZERO, TANY, 949 NAREG, RESC1|RESCC, 950 " movl AL,A1\n", 951 952 OPSIMP, INAREG|INTAREG|FORCC, 953 AWD, TDOUBLE, 954 SZERO, TANY, 955 NAREG, RESC1|RESCC, 956 " movl UL,U1\n movl AL,A1\n", 957 958 MUL, INAREG|INTAREG|FORCC, 959 SAREG|AWD, TDOUBLE, 960 SZERO, TANY, 961 NAREG|NASR, RESC1|RESCC, 962 " clrl U1\n clrl A1\n", 963 964 MUL, INAREG|INTAREG|FORCC, 965 SAREG|AWD, TFLOAT, 966 SZERO, TANY, 967 NAREG|NASR, RESC1|RESCC, 968 " clrl TA1\n", 969 970 OPFLOAT, INAREG|INTAREG|FORCC, 971 SAREG|AWD, TFLOAT, 972 SAREG|AWD, TFLOAT, 973 NAREG|NASL|NASR, RESC1|RESCC, 974 " ldf AL\n OF AR\n stf TA1\n", 975 976 OPFLOAT, INAREG|INTAREG|FORCC, 977 SZERO, TANY, 978 SAREG|AWD, TDOUBLE, 979 NAREG, RESC1|RESCC, 980 "\tclrl\tA1\n\tclrl\tU1\n\tldd\tA1\n\tOD\tAR\n\tstd\tA1\n", 981 982 OPFLOAT, INAREG|INTAREG|FORCC, 983 SAREG|AWD, TDOUBLE, 984 SAREG|AWD, TDOUBLE, 985 NAREG|NASL|NASR, RESC1|RESCC, 986 " ldd AL\n OD AR\n std A1\n", 987 988 /* Default actions for hard trees ... */ 989 990 # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,"" 991 992 UNARY MUL, DF( UNARY MUL ), 993 994 INCR, DF(INCR), 995 996 DECR, DF(INCR), 997 998 ASSIGN, DF(ASSIGN), 999 1000 STASG, DF(STASG), 1001 1002 FLD, DF(FLD), 1003 1004 OPLEAF, DF(NAME), 1005 1006 OPLOG, FORCC, 1007 SANY, TANY, 1008 SANY, TANY, 1009 REWRITE, BITYPE, 1010 "", 1011 1012 OPLOG, DF(NOT), 1013 1014 COMOP, DF(COMOP), 1015 1016 INIT, DF(INIT), 1017 1018 OPUNARY, DF(UNARY MINUS), 1019 1020 1021 ASG OPANY, DF(ASG PLUS), 1022 1023 OPANY, DF(BITYPE), 1024 1025 FREE, FREE, FREE, FREE, FREE, FREE, FREE, FREE, "help; I'm in trouble\n" }; 1026