1//===- P9InstrResources.td - P9 Instruction Resource Defs -*- tablegen -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines resources required by some of P9 instruction. This is part 11// P9 processor model used for instruction scheduling. Not every instruction 12// is listed here. Instructions in this file belong to itinerary classes that 13// have instructions with different resource requirements. 14// 15//===----------------------------------------------------------------------===// 16 17 18def : InstRW<[P9_ALUE_2C, P9_ALUO_2C, IP_EXECE_1C, IP_EXECO_1C, 19 DISP_1C, DISP_1C], 20 (instrs 21 VADDCUW, 22 VADDUBM, 23 VADDUDM, 24 VADDUHM, 25 VADDUWM, 26 VAND, 27 VANDC, 28 VCMPEQUB, 29 VCMPEQUBo, 30 VCMPEQUD, 31 VCMPEQUDo, 32 VCMPEQUH, 33 VCMPEQUHo, 34 VCMPEQUW, 35 VCMPEQUWo, 36 VCMPGTSB, 37 VCMPGTSBo, 38 VCMPGTSD, 39 VCMPGTSDo, 40 VCMPGTSH, 41 VCMPGTSHo, 42 VCMPGTSW, 43 VCMPGTSWo, 44 VCMPGTUB, 45 VCMPGTUBo, 46 VCMPGTUD, 47 VCMPGTUDo, 48 VCMPGTUH, 49 VCMPGTUHo, 50 VCMPGTUW, 51 VCMPGTUWo, 52 VCMPNEB, 53 VCMPNEBo, 54 VCMPNEH, 55 VCMPNEHo, 56 VCMPNEW, 57 VCMPNEWo, 58 VCMPNEZB, 59 VCMPNEZBo, 60 VCMPNEZH, 61 VCMPNEZHo, 62 VCMPNEZW, 63 VCMPNEZWo, 64 VEQV, 65 VEXTSB2D, 66 VEXTSB2W, 67 VEXTSH2D, 68 VEXTSH2W, 69 VEXTSW2D, 70 VMRGEW, 71 VMRGOW, 72 VNAND, 73 VNEGD, 74 VNEGW, 75 VNOR, 76 VOR, 77 VORC, 78 VPOPCNTB, 79 VPOPCNTH, 80 VPOPCNTW, 81 VSEL, 82 VSUBCUW, 83 VSUBUBM, 84 VSUBUDM, 85 VSUBUHM, 86 VSUBUWM, 87 VXOR, 88 V_SET0B, 89 V_SET0H, 90 V_SET0, 91 XVABSDP, 92 XVABSSP, 93 XVCPSGNDP, 94 XVCPSGNSP, 95 XVIEXPDP, 96 XVNABSDP, 97 XVNABSSP, 98 XVNEGDP, 99 XVNEGSP, 100 XVXEXPDP, 101 XXLAND, 102 XXLANDC, 103 XXLEQV, 104 XXLNAND, 105 XXLNOR, 106 XXLOR, 107 XXLORf, 108 XXLORC, 109 XXLXOR, 110 XXSEL 111)>; 112 113def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C, DISP_1C], 114 (instrs 115 XSABSQP, 116 XSCPSGNQP, 117 XSIEXPQP, 118 XSNABSQP, 119 XSNEGQP, 120 XSXEXPQP, 121 XSABSDP, 122 XSCPSGNDP, 123 XSIEXPDP, 124 XSNABSDP, 125 XSNEGDP, 126 XSXEXPDP 127)>; 128 129def : InstRW<[P9_ALUE_3C, P9_ALUO_3C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 130 (instrs 131 132 VMINSB, 133 VMINSD, 134 VMINSH, 135 VMINSW, 136 VMINUB, 137 VMINUD, 138 VMINUH, 139 VMINUW, 140 VPOPCNTD, 141 VPRTYBD, 142 VPRTYBW, 143 VRLB, 144 VRLD, 145 VRLDMI, 146 VRLDNM, 147 VRLH, 148 VRLW, 149 VRLWMI, 150 VRLWNM, 151 VSHASIGMAD, 152 VSHASIGMAW, 153 VSLB, 154 VSLD, 155 VSLH, 156 VSLW, 157 VSRAB, 158 VSRAD, 159 VSRAH, 160 VSRAW, 161 VSRB, 162 VSRD, 163 VSRH, 164 VSRW, 165 VSUBSBS, 166 VSUBSHS, 167 VSUBSWS, 168 VSUBUBS, 169 VSUBUHS, 170 VSUBUWS, 171 XSCMPEQDP, 172 XSCMPEXPDP, 173 XSCMPGEDP, 174 XSCMPGTDP, 175 XSCMPODP, 176 XSCMPUDP, 177 XSCVSPDPN, 178 XSMAXCDP, 179 XSMAXDP, 180 XSMAXJDP, 181 XSMINCDP, 182 XSMINDP, 183 XSMINJDP, 184 XSTDIVDP, 185 XSTSQRTDP, 186 XSTSTDCDP, 187 XSTSTDCSP, 188 XSXSIGDP, 189 XVCMPEQDP, 190 XVCMPEQDPo, 191 XVCMPEQSP, 192 XVCMPEQSPo, 193 XVCMPGEDP, 194 XVCMPGEDPo, 195 XVCMPGESP, 196 XVCMPGESPo, 197 XVCMPGTDP, 198 XVCMPGTDPo, 199 XVCMPGTSP, 200 XVCMPGTSPo, 201 XVIEXPSP, 202 XVMAXDP, 203 XVMAXSP, 204 XVMINDP, 205 XVMINSP, 206 XVTDIVDP, 207 XVTDIVSP, 208 XVTSQRTDP, 209 XVTSQRTSP, 210 XVTSTDCDP, 211 XVTSTDCSP, 212 XVXEXPSP, 213 XVXSIGDP, 214 XVXSIGSP 215)>; 216 217def : InstRW<[P9_ALUE_4C, P9_ALUO_4C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 218 (instrs 219 VABSDUB, 220 VABSDUH, 221 VABSDUW, 222 VADDSBS, 223 VADDSHS, 224 VADDSWS, 225 VADDUBS, 226 VADDUHS, 227 VADDUWS, 228 VAVGSB, 229 VAVGSH, 230 VAVGSW, 231 VAVGUB, 232 VAVGUH, 233 VAVGUW, 234 VBPERMD, 235 VCLZB, 236 VCLZD, 237 VCLZH, 238 VCLZW, 239 VCMPBFP, 240 VCMPBFPo, 241 VCMPGTFP, 242 VCMPGTFPo, 243 VCTZB, 244 VCTZD, 245 VCTZH, 246 VCTZW, 247 VMAXFP, 248 VMAXSB, 249 VMAXSD, 250 VMAXSH, 251 VMAXSW, 252 VMAXUB, 253 VMAXUD, 254 VMAXUH, 255 VMAXUW, 256 VMINFP, 257 VCMPEQFP, 258 VCMPEQFPo, 259 VCMPGEFP, 260 VCMPGEFPo 261)>; 262 263def : InstRW<[P9_DPE_7C, P9_DPO_7C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 264 (instrs 265 VADDFP, 266 VCTSXS, 267 VCTSXS_0, 268 VCTUXS, 269 VCTUXS_0, 270 VEXPTEFP, 271 VLOGEFP, 272 VMADDFP, 273 VMHADDSHS, 274 VNMSUBFP, 275 VREFP, 276 VRFIM, 277 VRFIN, 278 VRFIP, 279 VRFIZ, 280 VRSQRTEFP, 281 VSUBFP, 282 XVADDDP, 283 XVADDSP, 284 XVCVDPSP, 285 XVCVDPSXDS, 286 XVCVDPSXWS, 287 XVCVDPUXDS, 288 XVCVDPUXWS, 289 XVCVHPSP, 290 XVCVSPDP, 291 XVCVSPHP, 292 XVCVSPSXDS, 293 XVCVSPSXWS, 294 XVCVSPUXDS, 295 XVCVSPUXWS, 296 XVCVSXDDP, 297 XVCVSXDSP, 298 XVCVSXWDP, 299 XVCVSXWSP, 300 XVCVUXDDP, 301 XVCVUXDSP, 302 XVCVUXWDP, 303 XVCVUXWSP, 304 XVMADDADP, 305 XVMADDASP, 306 XVMADDMDP, 307 XVMADDMSP, 308 XVMSUBADP, 309 XVMSUBASP, 310 XVMSUBMDP, 311 XVMSUBMSP, 312 XVMULDP, 313 XVMULSP, 314 XVNMADDADP, 315 XVNMADDASP, 316 XVNMADDMDP, 317 XVNMADDMSP, 318 XVNMSUBADP, 319 XVNMSUBASP, 320 XVNMSUBMDP, 321 XVNMSUBMSP, 322 XVRDPI, 323 XVRDPIC, 324 XVRDPIM, 325 XVRDPIP, 326 XVRDPIZ, 327 XVREDP, 328 XVRESP, 329 XVRSPI, 330 XVRSPIC, 331 XVRSPIM, 332 XVRSPIP, 333 XVRSPIZ, 334 XVRSQRTEDP, 335 XVRSQRTESP, 336 XVSUBDP, 337 XVSUBSP, 338 VCFSX, 339 VCFSX_0, 340 VCFUX, 341 VCFUX_0, 342 VMHRADDSHS, 343 VMLADDUHM, 344 VMSUMMBM, 345 VMSUMSHM, 346 VMSUMSHS, 347 VMSUMUBM, 348 VMSUMUHM, 349 VMSUMUHS, 350 VMULESB, 351 VMULESH, 352 VMULESW, 353 VMULEUB, 354 VMULEUH, 355 VMULEUW, 356 VMULOSB, 357 VMULOSH, 358 VMULOSW, 359 VMULOUB, 360 VMULOUH, 361 VMULOUW, 362 VMULUWM, 363 VSUM2SWS, 364 VSUM4SBS, 365 VSUM4SHS, 366 VSUM4UBS, 367 VSUMSWS 368)>; 369 370def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C], 371 (instrs 372 XSMADDADP, 373 XSMADDASP, 374 XSMADDMDP, 375 XSMADDMSP, 376 XSMSUBADP, 377 XSMSUBASP, 378 XSMSUBMDP, 379 XSMSUBMSP, 380 XSMULDP, 381 XSMULSP, 382 XSNMADDADP, 383 XSNMADDASP, 384 XSNMADDMDP, 385 XSNMADDMSP, 386 XSNMSUBADP, 387 XSNMSUBASP, 388 XSNMSUBMDP, 389 XSNMSUBMSP 390)>; 391 392 393def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C], 394 (instrs 395 XSADDDP, 396 XSADDSP, 397 XSCVDPHP, 398 XSCVDPSP, 399 XSCVDPSXDS, 400 XSCVDPSXWS, 401 XSCVDPUXDS, 402 XSCVDPUXWS, 403 XSCVHPDP, 404 XSCVSPDP, 405 XSCVSXDDP, 406 XSCVSXDSP, 407 XSCVUXDDP, 408 XSCVUXDSP, 409 XSRDPI, 410 XSRDPIC, 411 XSRDPIM, 412 XSRDPIP, 413 XSRDPIZ, 414 XSREDP, 415 XSRESP, 416 //XSRSP, 417 XSRSQRTEDP, 418 XSRSQRTESP, 419 XSSUBDP, 420 XSSUBSP, 421 XSCVDPSPN 422)>; 423 424def : InstRW<[P9_PM_3C, IP_EXECO_1C, IP_EXECE_1C, DISP_1C, DISP_1C], 425 (instrs 426 VBPERMQ, 427 VCLZLSBB, 428 VCTZLSBB, 429 VEXTRACTD, 430 VEXTRACTUB, 431 VEXTRACTUH, 432 VEXTRACTUW, 433 VEXTUBLX, 434 VEXTUBRX, 435 VEXTUHLX, 436 VEXTUHRX, 437 VEXTUWLX, 438 VEXTUWRX, 439 VGBBD, 440 VINSERTB, 441 VINSERTD, 442 VINSERTH, 443 VINSERTW, 444 VMRGHB, 445 VMRGHH, 446 VMRGHW, 447 VMRGLB, 448 VMRGLH, 449 VMRGLW, 450 VPERM, 451 VPERMR, 452 VPERMXOR, 453 VPKPX, 454 VPKSDSS, 455 VPKSDUS, 456 VPKSHSS, 457 VPKSHUS, 458 VPKSWSS, 459 VPKSWUS, 460 VPKUDUM, 461 VPKUDUS, 462 VPKUHUM, 463 VPKUHUS, 464 VPKUWUM, 465 VPKUWUS, 466 VPRTYBQ, 467 VSL, 468 VSLDOI, 469 VSLO, 470 VSLV, 471 VSPLTB, 472 VSPLTH, 473 VSPLTISB, 474 VSPLTISH, 475 VSPLTISW, 476 VSPLTW, 477 VSR, 478 VSRO, 479 VSRV, 480 VUPKHPX, 481 VUPKHSB, 482 VUPKHSH, 483 VUPKHSW, 484 VUPKLPX, 485 VUPKLSB, 486 VUPKLSH, 487 VUPKLSW, 488 XXBRD, 489 XXBRH, 490 XXBRQ, 491 XXBRW, 492 XXEXTRACTUW, 493 XXINSERTW, 494 XXMRGHW, 495 XXMRGLW, 496 XXPERM, 497 XXPERMR, 498 XXSLDWI, 499 XXSPLTIB, 500 XXSPLTW, 501 VADDCUQ, 502 VADDECUQ, 503 VADDEUQM, 504 VADDUQM, 505 VMUL10CUQ, 506 VMUL10ECUQ, 507 VMUL10EUQ, 508 VMUL10UQ, 509 VSUBCUQ, 510 VSUBECUQ, 511 VSUBEUQM, 512 VSUBUQM, 513 XSCMPEXPQP, 514 XSCMPOQP, 515 XSCMPUQP, 516 XSTSTDCQP, 517 XSXSIGQP 518)>; 519 520def : InstRW<[P9_DFU_12C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 521 (instrs 522 XSADDQP, 523 XSADDQPO, 524 XSCVDPQP, 525 XSCVQPDP, 526 XSCVQPDPO, 527 XSCVQPSDZ, 528 XSCVQPSWZ, 529 XSCVQPUDZ, 530 XSCVQPUWZ, 531 XSCVSDQP, 532 XSCVUDQP, 533 XSRQPI, 534 XSRQPXP, 535 XSSUBQP, 536 XSSUBQPO 537)>; 538 539def : InstRW<[P9_DFU_24C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 540 (instrs 541 XSMADDQP, 542 XSMADDQPO, 543 XSMSUBQP, 544 XSMSUBQPO, 545 XSMULQP, 546 XSMULQPO, 547 XSNMADDQP, 548 XSNMADDQPO, 549 XSNMSUBQP, 550 XSNMSUBQPO 551)>; 552 553def : InstRW<[P9_DFU_58C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 554 (instrs 555 XSDIVQP, 556 XSDIVQPO 557)>; 558 559def : InstRW<[P9_DFU_76C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 560 (instrs 561 XSSQRTQP, 562 XSSQRTQPO 563)>; 564 565// Load Operation in IIC_LdStLFD 566 567def : InstRW<[P9_LS_5C, IP_AGEN_1C, DISP_1C, DISP_1C], 568 (instrs 569 LXSDX, 570 LXVD2X, 571 LXSIWZX, 572 LXV, 573 LXSD 574)>; 575 576def : InstRW<[P9_LS_5C, IP_AGEN_1C, DISP_1C, DISP_1C, DISP_1C], 577 (instrs 578 LFIWZX, 579 LFDX, 580 LFD 581)>; 582 583def : InstRW<[P9_LoadAndALUOp_7C, IP_AGEN_1C, IP_EXEC_1C, 584 DISP_1C, DISP_1C, DISP_1C, DISP_1C], 585 (instrs 586 LXSSPX, 587 LXSIWAX, 588 LXSSP 589)>; 590 591def : InstRW<[P9_LoadAndALUOp_7C, IP_AGEN_1C, IP_EXEC_1C, 592 DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C], 593 (instrs 594 LFIWAX, 595 LFSX, 596 LFS 597)>; 598 599def : InstRW<[P9_LoadAndPMOp_8C, IP_AGEN_1C, IP_EXEC_1C, DISP_1C, DISP_1C], 600 (instrs 601 LXVDSX, 602 LXVW4X 603)>; 604 605// Store Operations in IIC_LdStSTFD. 606 607def : InstRW<[P9_LS_1C, IP_EXEC_1C, IP_AGEN_1C, DISP_1C, DISP_1C, DISP_1C], 608 (instrs 609 STFS, 610 STFD, 611 STFIWX, 612 STFSX, 613 STFDX, 614 STXSDX, 615 STXSSPX, 616 STXSIWX 617)>; 618 619def : InstRW<[P9_LS_1C, IP_EXEC_1C, IP_EXEC_1C, IP_AGEN_1C, DISP_1C, DISP_1C], 620 (instrs 621 STXVD2X, 622 STXVW4X 623)>; 624 625 626// Divide Operations in IIC_IntDivW, IIC_IntDivD. 627 628def : InstRW<[P9_DIV_16C_8, IP_EXECE_1C, DISP_1C, DISP_1C], 629 (instrs 630 DIVW, 631 DIVWU 632)>; 633 634def : InstRW<[P9_DIV_24C_8, IP_EXECE_1C, DISP_1C, DISP_1C], 635 (instrs 636 DIVWE, 637 DIVD, 638 DIVWEU, 639 DIVDU 640)>; 641 642def : InstRW<[P9_DIV_40C_8, IP_EXECE_1C, DISP_1C, DISP_1C], 643 (instrs 644 DIVDE, 645 DIVDEU 646)>; 647 648def : InstRW<[P9_IntDivAndALUOp_26C_8, IP_EXECE_1C, IP_EXEC_1C, 649 DISP_1C, DISP_1C, DISP_1C, DISP_1C], 650 (instrs 651 DIVWEo, 652 DIVWEUo 653)>; 654 655def : InstRW<[P9_IntDivAndALUOp_42C_8, IP_EXECE_1C, IP_EXEC_1C, 656 DISP_1C, DISP_1C, DISP_1C, DISP_1C], 657 (instrs 658 DIVDEo, 659 DIVDEUo 660)>; 661 662// Rotate Operations in IIC_IntRotateD, IIC_IntRotateDI 663def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C, DISP_1C], 664 (instrs 665 SLD, 666 SRD, 667 SRAD, 668 SRADI, 669 RLDIC 670)>; 671 672def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C], 673 (instrs 674 RLDCL, 675 RLDCR, 676 RLDIMI, 677 RLDICL, 678 RLDICR, 679 RLDICL_32_64 680)>; 681 682// CR access instructions in _BrMCR, IIC_BrMCRX. 683 684def : InstRW<[P9_ALU_2C, P9_ALU_2C, IP_EXEC_1C, IP_EXEC_1C, 685 DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C], 686 (instrs 687 MTOCRF, 688 MTOCRF8, 689 MTCRF, 690 MTCRF8 691)>; 692 693def : InstRW<[P9_ALU_5C, IP_EXEC_1C, DISP_1C, DISP_1C], 694 (instrs 695 MCRF, 696 MCRXRX 697)>; 698 699def : InstRW<[P9_ALU_5C, P9_ALU_5C, IP_EXEC_1C, IP_EXEC_1C, 700 DISP_1C, DISP_1C, DISP_1C, DISP_1C], 701 (instrs 702 MCRFS 703)>; 704 705// FP Div instructions in IIC_FPDivD and IIC_FPDivS. 706 707def : InstRW<[P9_DP_33C_8, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C], 708 (instrs 709 FDIV, 710 XSDIVDP 711)>; 712 713def : InstRW<[P9_DP_22C_5, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C], 714 (instrs 715 FDIVS, 716 XSDIVSP 717)>; 718 719def : InstRW<[P9_DP_24C_8, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 720 (instrs 721 XVDIVSP 722)>; 723 724def : InstRW<[P9_DP_33C_8, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C], 725 (instrs 726 XVDIVDP 727)>; 728 729// FP Instructions in IIC_FPGeneral, IIC_FPFused 730 731def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C], 732 (instrs 733 FRSP, 734 FRIND, 735 FRINS, 736 FRIPD, 737 FRIPS, 738 FRIZD, 739 FRIZS, 740 FRIMD, 741 FRIMS, 742 FRE, 743 FRES, 744 FRSQRTE, 745 FRSQRTES, 746 FMADDS, 747 FMADD, 748 FMSUBS, 749 FMSUB, 750 FNMADDS, 751 FNMADD, 752 FNMSUBS, 753 FNMSUB, 754 FSELD, 755 FSELS, 756 FADDS, 757 FMULS, 758 FMUL, 759 FSUBS, 760 FCFID, 761 FCTID, 762 FCTIDZ, 763 FCFIDU, 764 FCFIDS, 765 FCFIDUS, 766 FCTIDUZ, 767 FCTIWUZ, 768 FCTIW, 769 FCTIWZ 770)>; 771 772def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C], 773 (instrs 774 FMR, 775 FABSD, 776 FABSS, 777 FNABSD, 778 FNABSS, 779 FNEGD, 780 FNEGS, 781 FCPSGND, 782 FCPSGNS 783)>; 784 785def : InstRW<[P9_ALU_3C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C], 786 (instrs 787 FCMPUS, 788 FCMPUD 789)>; 790 791// Load instructions in IIC_LdStLFDU and IIC_LdStLFDUX. 792 793def : InstRW<[P9_LoadAndALUOp_7C, P9_ALU_2C, 794 IP_AGEN_1C, IP_EXEC_1C, IP_EXEC_1C, 795 DISP_1C, DISP_1C, DISP_1C, DISP_1C, 796 DISP_1C, DISP_1C, DISP_1C, DISP_1C], 797 (instrs 798 LFSU, 799 LFSUX 800)>; 801 802def : InstRW<[P9_LS_5C, P9_ALU_2C, IP_AGEN_1C, IP_EXEC_1C, 803 DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C], 804 (instrs 805 LFDU, 806 LFDUX 807)>; 808 809