1 //===-- PPCSchedule.td - PowerPC Scheduling Definitions ----*- 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 //===----------------------------------------------------------------------===// 11 // Instruction Itinerary classes used for PowerPC 12 // 13 def IIC_IntSimple : InstrItinClass; 14 def IIC_IntGeneral : InstrItinClass; 15 def IIC_IntCompare : InstrItinClass; 16 def IIC_IntDivD : InstrItinClass; 17 def IIC_IntDivW : InstrItinClass; 18 def IIC_IntMFFS : InstrItinClass; 19 def IIC_IntMFVSCR : InstrItinClass; 20 def IIC_IntMTFSB0 : InstrItinClass; 21 def IIC_IntMTSRD : InstrItinClass; 22 def IIC_IntMulHD : InstrItinClass; 23 def IIC_IntMulHW : InstrItinClass; 24 def IIC_IntMulHWU : InstrItinClass; 25 def IIC_IntMulLI : InstrItinClass; 26 def IIC_IntRFID : InstrItinClass; 27 def IIC_IntRotateD : InstrItinClass; 28 def IIC_IntRotateDI : InstrItinClass; 29 def IIC_IntRotate : InstrItinClass; 30 def IIC_IntShift : InstrItinClass; 31 def IIC_IntTrapD : InstrItinClass; 32 def IIC_IntTrapW : InstrItinClass; 33 def IIC_BrB : InstrItinClass; 34 def IIC_BrCR : InstrItinClass; 35 def IIC_BrMCR : InstrItinClass; 36 def IIC_BrMCRX : InstrItinClass; 37 def IIC_LdStDCBA : InstrItinClass; 38 def IIC_LdStDCBF : InstrItinClass; 39 def IIC_LdStDCBI : InstrItinClass; 40 def IIC_LdStLoad : InstrItinClass; 41 def IIC_LdStLoadUpd : InstrItinClass; 42 def IIC_LdStLoadUpdX : InstrItinClass; 43 def IIC_LdStStore : InstrItinClass; 44 def IIC_LdStStoreUpd : InstrItinClass; 45 def IIC_LdStDSS : InstrItinClass; 46 def IIC_LdStICBI : InstrItinClass; 47 def IIC_LdStLD : InstrItinClass; 48 def IIC_LdStLDU : InstrItinClass; 49 def IIC_LdStLDUX : InstrItinClass; 50 def IIC_LdStLDARX : InstrItinClass; 51 def IIC_LdStLFD : InstrItinClass; 52 def IIC_LdStLFDU : InstrItinClass; 53 def IIC_LdStLFDUX : InstrItinClass; 54 def IIC_LdStLHA : InstrItinClass; 55 def IIC_LdStLHAU : InstrItinClass; 56 def IIC_LdStLHAUX : InstrItinClass; 57 def IIC_LdStLMW : InstrItinClass; 58 def IIC_LdStLVecX : InstrItinClass; 59 def IIC_LdStLWA : InstrItinClass; 60 def IIC_LdStLWARX : InstrItinClass; 61 def IIC_LdStSLBIA : InstrItinClass; 62 def IIC_LdStSLBIE : InstrItinClass; 63 def IIC_LdStSTD : InstrItinClass; 64 def IIC_LdStSTDCX : InstrItinClass; 65 def IIC_LdStSTDU : InstrItinClass; 66 def IIC_LdStSTDUX : InstrItinClass; 67 def IIC_LdStSTFD : InstrItinClass; 68 def IIC_LdStSTFDU : InstrItinClass; 69 def IIC_LdStSTVEBX : InstrItinClass; 70 def IIC_LdStSTWCX : InstrItinClass; 71 def IIC_LdStSync : InstrItinClass; 72 def IIC_SprISYNC : InstrItinClass; 73 def IIC_SprMFSR : InstrItinClass; 74 def IIC_SprMTMSR : InstrItinClass; 75 def IIC_SprMTSR : InstrItinClass; 76 def IIC_SprTLBSYNC : InstrItinClass; 77 def IIC_SprMFCR : InstrItinClass; 78 def IIC_SprMFCRF : InstrItinClass; 79 def IIC_SprMFMSR : InstrItinClass; 80 def IIC_SprMFSPR : InstrItinClass; 81 def IIC_SprMFTB : InstrItinClass; 82 def IIC_SprMTSPR : InstrItinClass; 83 def IIC_SprMTSRIN : InstrItinClass; 84 def IIC_SprRFI : InstrItinClass; 85 def IIC_SprSC : InstrItinClass; 86 def IIC_FPGeneral : InstrItinClass; 87 def IIC_FPAddSub : InstrItinClass; 88 def IIC_FPCompare : InstrItinClass; 89 def IIC_FPDivD : InstrItinClass; 90 def IIC_FPDivS : InstrItinClass; 91 def IIC_FPFused : InstrItinClass; 92 def IIC_FPRes : InstrItinClass; 93 def IIC_FPSqrtD : InstrItinClass; 94 def IIC_FPSqrtS : InstrItinClass; 95 def IIC_VecGeneral : InstrItinClass; 96 def IIC_VecFP : InstrItinClass; 97 def IIC_VecFPCompare : InstrItinClass; 98 def IIC_VecComplex : InstrItinClass; 99 def IIC_VecPerm : InstrItinClass; 100 def IIC_VecFPRound : InstrItinClass; 101 def IIC_VecVSL : InstrItinClass; 102 def IIC_VecVSR : InstrItinClass; 103 def IIC_SprMTMSRD : InstrItinClass; 104 def IIC_SprSLIE : InstrItinClass; 105 def IIC_SprSLBIE : InstrItinClass; 106 def IIC_SprSLBMTE : InstrItinClass; 107 def IIC_SprSLBMFEE : InstrItinClass; 108 def IIC_SprSLBIA : InstrItinClass; 109 def IIC_SprTLBIEL : InstrItinClass; 110 def IIC_SprTLBIE : InstrItinClass; 111 112 //===----------------------------------------------------------------------===// 113 // Processor instruction itineraries. 114 115 include "PPCScheduleG3.td" 116 include "PPCSchedule440.td" 117 include "PPCScheduleG4.td" 118 include "PPCScheduleG4Plus.td" 119 include "PPCScheduleG5.td" 120 include "PPCScheduleP7.td" 121 include "PPCScheduleA2.td" 122 include "PPCScheduleE500mc.td" 123 include "PPCScheduleE5500.td" 124 125 //===----------------------------------------------------------------------===// 126 // Instruction to itinerary class map - When add new opcodes to the supported 127 // set, refer to the following table to determine which itinerary class the 128 // opcode belongs. 129 // 130 // opcode itinerary class 131 // ====== =============== 132 // add IIC_IntSimple 133 // addc IIC_IntGeneral 134 // adde IIC_IntGeneral 135 // addi IIC_IntSimple 136 // addic IIC_IntGeneral 137 // addic. IIC_IntGeneral 138 // addis IIC_IntSimple 139 // addme IIC_IntGeneral 140 // addze IIC_IntGeneral 141 // and IIC_IntSimple 142 // andc IIC_IntSimple 143 // andi. IIC_IntGeneral 144 // andis. IIC_IntGeneral 145 // b IIC_BrB 146 // bc IIC_BrB 147 // bcctr IIC_BrB 148 // bclr IIC_BrB 149 // cmp IIC_IntCompare 150 // cmpi IIC_IntCompare 151 // cmpl IIC_IntCompare 152 // cmpli IIC_IntCompare 153 // cntlzd IIC_IntRotateD 154 // cntlzw IIC_IntGeneral 155 // crand IIC_BrCR 156 // crandc IIC_BrCR 157 // creqv IIC_BrCR 158 // crnand IIC_BrCR 159 // crnor IIC_BrCR 160 // cror IIC_BrCR 161 // crorc IIC_BrCR 162 // crxor IIC_BrCR 163 // dcba IIC_LdStDCBA 164 // dcbf IIC_LdStDCBF 165 // dcbi IIC_LdStDCBI 166 // dcbst IIC_LdStDCBF 167 // dcbt IIC_LdStLoad 168 // dcbtst IIC_LdStLoad 169 // dcbz IIC_LdStDCBF 170 // divd IIC_IntDivD 171 // divdu IIC_IntDivD 172 // divw IIC_IntDivW 173 // divwu IIC_IntDivW 174 // dss IIC_LdStDSS 175 // dst IIC_LdStDSS 176 // dstst IIC_LdStDSS 177 // eciwx IIC_LdStLoad 178 // ecowx IIC_LdStLoad 179 // eieio IIC_LdStLoad 180 // eqv IIC_IntSimple 181 // extsb IIC_IntSimple 182 // extsh IIC_IntSimple 183 // extsw IIC_IntSimple 184 // fabs IIC_FPGeneral 185 // fadd IIC_FPAddSub 186 // fadds IIC_FPGeneral 187 // fcfid IIC_FPGeneral 188 // fcmpo IIC_FPCompare 189 // fcmpu IIC_FPCompare 190 // fctid IIC_FPGeneral 191 // fctidz IIC_FPGeneral 192 // fctiw IIC_FPGeneral 193 // fctiwz IIC_FPGeneral 194 // fdiv IIC_FPDivD 195 // fdivs IIC_FPDivS 196 // fmadd IIC_FPFused 197 // fmadds IIC_FPGeneral 198 // fmr IIC_FPGeneral 199 // fmsub IIC_FPFused 200 // fmsubs IIC_FPGeneral 201 // fmul IIC_FPFused 202 // fmuls IIC_FPGeneral 203 // fnabs IIC_FPGeneral 204 // fneg IIC_FPGeneral 205 // fnmadd IIC_FPFused 206 // fnmadds IIC_FPGeneral 207 // fnmsub IIC_FPFused 208 // fnmsubs IIC_FPGeneral 209 // fres IIC_FPRes 210 // frsp IIC_FPGeneral 211 // frsqrte IIC_FPGeneral 212 // fsel IIC_FPGeneral 213 // fsqrt IIC_FPSqrtD 214 // fsqrts IIC_FPSqrtS 215 // fsub IIC_FPAddSub 216 // fsubs IIC_FPGeneral 217 // icbi IIC_LdStICBI 218 // isync IIC_SprISYNC 219 // lbz IIC_LdStLoad 220 // lbzu IIC_LdStLoadUpd 221 // lbzux IIC_LdStLoadUpdX 222 // lbzx IIC_LdStLoad 223 // ld IIC_LdStLD 224 // ldarx IIC_LdStLDARX 225 // ldu IIC_LdStLDU 226 // ldux IIC_LdStLDUX 227 // ldx IIC_LdStLD 228 // lfd IIC_LdStLFD 229 // lfdu IIC_LdStLFDU 230 // lfdux IIC_LdStLFDUX 231 // lfdx IIC_LdStLFD 232 // lfs IIC_LdStLFD 233 // lfsu IIC_LdStLFDU 234 // lfsux IIC_LdStLFDUX 235 // lfsx IIC_LdStLFD 236 // lha IIC_LdStLHA 237 // lhau IIC_LdStLHAU 238 // lhaux IIC_LdStLHAUX 239 // lhax IIC_LdStLHA 240 // lhbrx IIC_LdStLoad 241 // lhz IIC_LdStLoad 242 // lhzu IIC_LdStLoadUpd 243 // lhzux IIC_LdStLoadUpdX 244 // lhzx IIC_LdStLoad 245 // lmw IIC_LdStLMW 246 // lswi IIC_LdStLMW 247 // lswx IIC_LdStLMW 248 // lvebx IIC_LdStLVecX 249 // lvehx IIC_LdStLVecX 250 // lvewx IIC_LdStLVecX 251 // lvsl IIC_LdStLVecX 252 // lvsr IIC_LdStLVecX 253 // lvx IIC_LdStLVecX 254 // lvxl IIC_LdStLVecX 255 // lwa IIC_LdStLWA 256 // lwarx IIC_LdStLWARX 257 // lwaux IIC_LdStLHAUX 258 // lwax IIC_LdStLHA 259 // lwbrx IIC_LdStLoad 260 // lwz IIC_LdStLoad 261 // lwzu IIC_LdStLoadUpd 262 // lwzux IIC_LdStLoadUpdX 263 // lwzx IIC_LdStLoad 264 // mcrf IIC_BrMCR 265 // mcrfs IIC_FPGeneral 266 // mcrxr IIC_BrMCRX 267 // mfcr IIC_SprMFCR 268 // mffs IIC_IntMFFS 269 // mfmsr IIC_SprMFMSR 270 // mfspr IIC_SprMFSPR 271 // mfsr IIC_SprMFSR 272 // mfsrin IIC_SprMFSR 273 // mftb IIC_SprMFTB 274 // mfvscr IIC_IntMFVSCR 275 // mtcrf IIC_BrMCRX 276 // mtfsb0 IIC_IntMTFSB0 277 // mtfsb1 IIC_IntMTFSB0 278 // mtfsf IIC_IntMTFSB0 279 // mtfsfi IIC_IntMTFSB0 280 // mtmsr IIC_SprMTMSR 281 // mtmsrd IIC_LdStLD 282 // mtspr IIC_SprMTSPR 283 // mtsr IIC_SprMTSR 284 // mtsrd IIC_IntMTSRD 285 // mtsrdin IIC_IntMTSRD 286 // mtsrin IIC_SprMTSRIN 287 // mtvscr IIC_IntMFVSCR 288 // mulhd IIC_IntMulHD 289 // mulhdu IIC_IntMulHD 290 // mulhw IIC_IntMulHW 291 // mulhwu IIC_IntMulHWU 292 // mulld IIC_IntMulHD 293 // mulli IIC_IntMulLI 294 // mullw IIC_IntMulHW 295 // nand IIC_IntSimple 296 // neg IIC_IntSimple 297 // nor IIC_IntSimple 298 // or IIC_IntSimple 299 // orc IIC_IntSimple 300 // ori IIC_IntSimple 301 // oris IIC_IntSimple 302 // rfi IIC_SprRFI 303 // rfid IIC_IntRFID 304 // rldcl IIC_IntRotateD 305 // rldcr IIC_IntRotateD 306 // rldic IIC_IntRotateDI 307 // rldicl IIC_IntRotateDI 308 // rldicr IIC_IntRotateDI 309 // rldimi IIC_IntRotateDI 310 // rlwimi IIC_IntRotate 311 // rlwinm IIC_IntGeneral 312 // rlwnm IIC_IntGeneral 313 // sc IIC_SprSC 314 // slbia IIC_LdStSLBIA 315 // slbie IIC_LdStSLBIE 316 // sld IIC_IntRotateD 317 // slw IIC_IntGeneral 318 // srad IIC_IntRotateD 319 // sradi IIC_IntRotateDI 320 // sraw IIC_IntShift 321 // srawi IIC_IntShift 322 // srd IIC_IntRotateD 323 // srw IIC_IntGeneral 324 // stb IIC_LdStStore 325 // stbu IIC_LdStStoreUpd 326 // stbux IIC_LdStStoreUpd 327 // stbx IIC_LdStStore 328 // std IIC_LdStSTD 329 // stdcx. IIC_LdStSTDCX 330 // stdu IIC_LdStSTDU 331 // stdux IIC_LdStSTDUX 332 // stdx IIC_LdStSTD 333 // stfd IIC_LdStSTFD 334 // stfdu IIC_LdStSTFDU 335 // stfdux IIC_LdStSTFDU 336 // stfdx IIC_LdStSTFD 337 // stfiwx IIC_LdStSTFD 338 // stfs IIC_LdStSTFD 339 // stfsu IIC_LdStSTFDU 340 // stfsux IIC_LdStSTFDU 341 // stfsx IIC_LdStSTFD 342 // sth IIC_LdStStore 343 // sthbrx IIC_LdStStore 344 // sthu IIC_LdStStoreUpd 345 // sthux IIC_LdStStoreUpd 346 // sthx IIC_LdStStore 347 // stmw IIC_LdStLMW 348 // stswi IIC_LdStLMW 349 // stswx IIC_LdStLMW 350 // stvebx IIC_LdStSTVEBX 351 // stvehx IIC_LdStSTVEBX 352 // stvewx IIC_LdStSTVEBX 353 // stvx IIC_LdStSTVEBX 354 // stvxl IIC_LdStSTVEBX 355 // stw IIC_LdStStore 356 // stwbrx IIC_LdStStore 357 // stwcx. IIC_LdStSTWCX 358 // stwu IIC_LdStStoreUpd 359 // stwux IIC_LdStStoreUpd 360 // stwx IIC_LdStStore 361 // subf IIC_IntGeneral 362 // subfc IIC_IntGeneral 363 // subfe IIC_IntGeneral 364 // subfic IIC_IntGeneral 365 // subfme IIC_IntGeneral 366 // subfze IIC_IntGeneral 367 // sync IIC_LdStSync 368 // td IIC_IntTrapD 369 // tdi IIC_IntTrapD 370 // tlbia IIC_LdStSLBIA 371 // tlbie IIC_LdStDCBF 372 // tlbsync IIC_SprTLBSYNC 373 // tw IIC_IntTrapW 374 // twi IIC_IntTrapW 375 // vaddcuw IIC_VecGeneral 376 // vaddfp IIC_VecFP 377 // vaddsbs IIC_VecGeneral 378 // vaddshs IIC_VecGeneral 379 // vaddsws IIC_VecGeneral 380 // vaddubm IIC_VecGeneral 381 // vaddubs IIC_VecGeneral 382 // vadduhm IIC_VecGeneral 383 // vadduhs IIC_VecGeneral 384 // vadduwm IIC_VecGeneral 385 // vadduws IIC_VecGeneral 386 // vand IIC_VecGeneral 387 // vandc IIC_VecGeneral 388 // vavgsb IIC_VecGeneral 389 // vavgsh IIC_VecGeneral 390 // vavgsw IIC_VecGeneral 391 // vavgub IIC_VecGeneral 392 // vavguh IIC_VecGeneral 393 // vavguw IIC_VecGeneral 394 // vcfsx IIC_VecFP 395 // vcfux IIC_VecFP 396 // vcmpbfp IIC_VecFPCompare 397 // vcmpeqfp IIC_VecFPCompare 398 // vcmpequb IIC_VecGeneral 399 // vcmpequh IIC_VecGeneral 400 // vcmpequw IIC_VecGeneral 401 // vcmpgefp IIC_VecFPCompare 402 // vcmpgtfp IIC_VecFPCompare 403 // vcmpgtsb IIC_VecGeneral 404 // vcmpgtsh IIC_VecGeneral 405 // vcmpgtsw IIC_VecGeneral 406 // vcmpgtub IIC_VecGeneral 407 // vcmpgtuh IIC_VecGeneral 408 // vcmpgtuw IIC_VecGeneral 409 // vctsxs IIC_VecFP 410 // vctuxs IIC_VecFP 411 // vexptefp IIC_VecFP 412 // vlogefp IIC_VecFP 413 // vmaddfp IIC_VecFP 414 // vmaxfp IIC_VecFPCompare 415 // vmaxsb IIC_VecGeneral 416 // vmaxsh IIC_VecGeneral 417 // vmaxsw IIC_VecGeneral 418 // vmaxub IIC_VecGeneral 419 // vmaxuh IIC_VecGeneral 420 // vmaxuw IIC_VecGeneral 421 // vmhaddshs IIC_VecComplex 422 // vmhraddshs IIC_VecComplex 423 // vminfp IIC_VecFPCompare 424 // vminsb IIC_VecGeneral 425 // vminsh IIC_VecGeneral 426 // vminsw IIC_VecGeneral 427 // vminub IIC_VecGeneral 428 // vminuh IIC_VecGeneral 429 // vminuw IIC_VecGeneral 430 // vmladduhm IIC_VecComplex 431 // vmrghb IIC_VecPerm 432 // vmrghh IIC_VecPerm 433 // vmrghw IIC_VecPerm 434 // vmrglb IIC_VecPerm 435 // vmrglh IIC_VecPerm 436 // vmrglw IIC_VecPerm 437 // vmsubfp IIC_VecFP 438 // vmsummbm IIC_VecComplex 439 // vmsumshm IIC_VecComplex 440 // vmsumshs IIC_VecComplex 441 // vmsumubm IIC_VecComplex 442 // vmsumuhm IIC_VecComplex 443 // vmsumuhs IIC_VecComplex 444 // vmulesb IIC_VecComplex 445 // vmulesh IIC_VecComplex 446 // vmuleub IIC_VecComplex 447 // vmuleuh IIC_VecComplex 448 // vmulosb IIC_VecComplex 449 // vmulosh IIC_VecComplex 450 // vmuloub IIC_VecComplex 451 // vmulouh IIC_VecComplex 452 // vnor IIC_VecGeneral 453 // vor IIC_VecGeneral 454 // vperm IIC_VecPerm 455 // vpkpx IIC_VecPerm 456 // vpkshss IIC_VecPerm 457 // vpkshus IIC_VecPerm 458 // vpkswss IIC_VecPerm 459 // vpkswus IIC_VecPerm 460 // vpkuhum IIC_VecPerm 461 // vpkuhus IIC_VecPerm 462 // vpkuwum IIC_VecPerm 463 // vpkuwus IIC_VecPerm 464 // vrefp IIC_VecFPRound 465 // vrfim IIC_VecFPRound 466 // vrfin IIC_VecFPRound 467 // vrfip IIC_VecFPRound 468 // vrfiz IIC_VecFPRound 469 // vrlb IIC_VecGeneral 470 // vrlh IIC_VecGeneral 471 // vrlw IIC_VecGeneral 472 // vrsqrtefp IIC_VecFP 473 // vsel IIC_VecGeneral 474 // vsl IIC_VecVSL 475 // vslb IIC_VecGeneral 476 // vsldoi IIC_VecPerm 477 // vslh IIC_VecGeneral 478 // vslo IIC_VecPerm 479 // vslw IIC_VecGeneral 480 // vspltb IIC_VecPerm 481 // vsplth IIC_VecPerm 482 // vspltisb IIC_VecPerm 483 // vspltish IIC_VecPerm 484 // vspltisw IIC_VecPerm 485 // vspltw IIC_VecPerm 486 // vsr IIC_VecVSR 487 // vsrab IIC_VecGeneral 488 // vsrah IIC_VecGeneral 489 // vsraw IIC_VecGeneral 490 // vsrb IIC_VecGeneral 491 // vsrh IIC_VecGeneral 492 // vsro IIC_VecPerm 493 // vsrw IIC_VecGeneral 494 // vsubcuw IIC_VecGeneral 495 // vsubfp IIC_VecFP 496 // vsubsbs IIC_VecGeneral 497 // vsubshs IIC_VecGeneral 498 // vsubsws IIC_VecGeneral 499 // vsububm IIC_VecGeneral 500 // vsububs IIC_VecGeneral 501 // vsubuhm IIC_VecGeneral 502 // vsubuhs IIC_VecGeneral 503 // vsubuwm IIC_VecGeneral 504 // vsubuws IIC_VecGeneral 505 // vsum2sws IIC_VecComplex 506 // vsum4sbs IIC_VecComplex 507 // vsum4shs IIC_VecComplex 508 // vsum4ubs IIC_VecComplex 509 // vsumsws IIC_VecComplex 510 // vupkhpx IIC_VecPerm 511 // vupkhsb IIC_VecPerm 512 // vupkhsh IIC_VecPerm 513 // vupklpx IIC_VecPerm 514 // vupklsb IIC_VecPerm 515 // vupklsh IIC_VecPerm 516 // vxor IIC_VecGeneral 517 // xor IIC_IntSimple 518 // xori IIC_IntSimple 519 // xoris IIC_IntSimple 520 // 521