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