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 // Functional units across PowerPC chips sets 12 // 13 def BPU : FuncUnit; // Branch unit 14 def SLU : FuncUnit; // Store/load unit 15 def SRU : FuncUnit; // special register unit 16 def IU1 : FuncUnit; // integer unit 1 (simple) 17 def IU2 : FuncUnit; // integer unit 2 (complex) 18 def FPU1 : FuncUnit; // floating point unit 1 19 def FPU2 : FuncUnit; // floating point unit 2 20 def VPU : FuncUnit; // vector permutation unit 21 def VIU1 : FuncUnit; // vector integer unit 1 (simple) 22 def VIU2 : FuncUnit; // vector integer unit 2 (complex) 23 def VFPU : FuncUnit; // vector floating point unit 24 25 //===----------------------------------------------------------------------===// 26 // Instruction Itinerary classes used for PowerPC 27 // 28 def IntSimple : InstrItinClass; 29 def IntGeneral : InstrItinClass; 30 def IntCompare : InstrItinClass; 31 def IntDivD : InstrItinClass; 32 def IntDivW : InstrItinClass; 33 def IntMFFS : InstrItinClass; 34 def IntMFVSCR : InstrItinClass; 35 def IntMTFSB0 : InstrItinClass; 36 def IntMTSRD : InstrItinClass; 37 def IntMulHD : InstrItinClass; 38 def IntMulHW : InstrItinClass; 39 def IntMulHWU : InstrItinClass; 40 def IntMulLI : InstrItinClass; 41 def IntRFID : InstrItinClass; 42 def IntRotateD : InstrItinClass; 43 def IntRotateDI : InstrItinClass; 44 def IntRotate : InstrItinClass; 45 def IntShift : InstrItinClass; 46 def IntTrapD : InstrItinClass; 47 def IntTrapW : InstrItinClass; 48 def BrB : InstrItinClass; 49 def BrCR : InstrItinClass; 50 def BrMCR : InstrItinClass; 51 def BrMCRX : InstrItinClass; 52 def LdStDCBA : InstrItinClass; 53 def LdStDCBF : InstrItinClass; 54 def LdStDCBI : InstrItinClass; 55 def LdStLoad : InstrItinClass; 56 def LdStLoadUpd : InstrItinClass; 57 def LdStStore : InstrItinClass; 58 def LdStStoreUpd : InstrItinClass; 59 def LdStDSS : InstrItinClass; 60 def LdStICBI : InstrItinClass; 61 def LdStLD : InstrItinClass; 62 def LdStLDU : InstrItinClass; 63 def LdStLDARX : InstrItinClass; 64 def LdStLFD : InstrItinClass; 65 def LdStLFDU : InstrItinClass; 66 def LdStLHA : InstrItinClass; 67 def LdStLHAU : InstrItinClass; 68 def LdStLMW : InstrItinClass; 69 def LdStLVecX : InstrItinClass; 70 def LdStLWA : InstrItinClass; 71 def LdStLWARX : InstrItinClass; 72 def LdStSLBIA : InstrItinClass; 73 def LdStSLBIE : InstrItinClass; 74 def LdStSTD : InstrItinClass; 75 def LdStSTDCX : InstrItinClass; 76 def LdStSTDU : InstrItinClass; 77 def LdStSTFD : InstrItinClass; 78 def LdStSTFDU : InstrItinClass; 79 def LdStSTVEBX : InstrItinClass; 80 def LdStSTWCX : InstrItinClass; 81 def LdStSync : InstrItinClass; 82 def SprISYNC : InstrItinClass; 83 def SprMFSR : InstrItinClass; 84 def SprMTMSR : InstrItinClass; 85 def SprMTSR : InstrItinClass; 86 def SprTLBSYNC : InstrItinClass; 87 def SprMFCR : InstrItinClass; 88 def SprMFMSR : InstrItinClass; 89 def SprMFSPR : InstrItinClass; 90 def SprMFTB : InstrItinClass; 91 def SprMTSPR : InstrItinClass; 92 def SprMTSRIN : InstrItinClass; 93 def SprRFI : InstrItinClass; 94 def SprSC : InstrItinClass; 95 def FPGeneral : InstrItinClass; 96 def FPAddSub : InstrItinClass; 97 def FPCompare : InstrItinClass; 98 def FPDivD : InstrItinClass; 99 def FPDivS : InstrItinClass; 100 def FPFused : InstrItinClass; 101 def FPRes : InstrItinClass; 102 def FPSqrt : InstrItinClass; 103 def VecGeneral : InstrItinClass; 104 def VecFP : InstrItinClass; 105 def VecFPCompare : InstrItinClass; 106 def VecComplex : InstrItinClass; 107 def VecPerm : InstrItinClass; 108 def VecFPRound : InstrItinClass; 109 def VecVSL : InstrItinClass; 110 def VecVSR : 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 "PPCScheduleA2.td" 121 include "PPCScheduleE500mc.td" 122 include "PPCScheduleE5500.td" 123 124 //===----------------------------------------------------------------------===// 125 // Instruction to itinerary class map - When add new opcodes to the supported 126 // set, refer to the following table to determine which itinerary class the 127 // opcode belongs. 128 // 129 // opcode itinerary class 130 // ====== =============== 131 // add IntSimple 132 // addc IntGeneral 133 // adde IntGeneral 134 // addi IntSimple 135 // addic IntGeneral 136 // addic. IntGeneral 137 // addis IntSimple 138 // addme IntGeneral 139 // addze IntGeneral 140 // and IntSimple 141 // andc IntSimple 142 // andi. IntGeneral 143 // andis. IntGeneral 144 // b BrB 145 // bc BrB 146 // bcctr BrB 147 // bclr BrB 148 // cmp IntCompare 149 // cmpi IntCompare 150 // cmpl IntCompare 151 // cmpli IntCompare 152 // cntlzd IntRotateD 153 // cntlzw IntGeneral 154 // crand BrCR 155 // crandc BrCR 156 // creqv BrCR 157 // crnand BrCR 158 // crnor BrCR 159 // cror BrCR 160 // crorc BrCR 161 // crxor BrCR 162 // dcba LdStDCBA 163 // dcbf LdStDCBF 164 // dcbi LdStDCBI 165 // dcbst LdStDCBF 166 // dcbt LdStLoad 167 // dcbtst LdStLoad 168 // dcbz LdStDCBF 169 // divd IntDivD 170 // divdu IntDivD 171 // divw IntDivW 172 // divwu IntDivW 173 // dss LdStDSS 174 // dst LdStDSS 175 // dstst LdStDSS 176 // eciwx LdStLoad 177 // ecowx LdStLoad 178 // eieio LdStLoad 179 // eqv IntSimple 180 // extsb IntSimple 181 // extsh IntSimple 182 // extsw IntSimple 183 // fabs FPGeneral 184 // fadd FPAddSub 185 // fadds FPGeneral 186 // fcfid FPGeneral 187 // fcmpo FPCompare 188 // fcmpu FPCompare 189 // fctid FPGeneral 190 // fctidz FPGeneral 191 // fctiw FPGeneral 192 // fctiwz FPGeneral 193 // fdiv FPDivD 194 // fdivs FPDivS 195 // fmadd FPFused 196 // fmadds FPGeneral 197 // fmr FPGeneral 198 // fmsub FPFused 199 // fmsubs FPGeneral 200 // fmul FPFused 201 // fmuls FPGeneral 202 // fnabs FPGeneral 203 // fneg FPGeneral 204 // fnmadd FPFused 205 // fnmadds FPGeneral 206 // fnmsub FPFused 207 // fnmsubs FPGeneral 208 // fres FPRes 209 // frsp FPGeneral 210 // frsqrte FPGeneral 211 // fsel FPGeneral 212 // fsqrt FPSqrt 213 // fsqrts FPSqrt 214 // fsub FPAddSub 215 // fsubs FPGeneral 216 // icbi LdStICBI 217 // isync SprISYNC 218 // lbz LdStLoad 219 // lbzu LdStLoadUpd 220 // lbzux LdStLoadUpd 221 // lbzx LdStLoad 222 // ld LdStLD 223 // ldarx LdStLDARX 224 // ldu LdStLDU 225 // ldux LdStLDU 226 // ldx LdStLD 227 // lfd LdStLFD 228 // lfdu LdStLFDU 229 // lfdux LdStLFDU 230 // lfdx LdStLFD 231 // lfs LdStLFD 232 // lfsu LdStLFDU 233 // lfsux LdStLFDU 234 // lfsx LdStLFD 235 // lha LdStLHA 236 // lhau LdStLHAU 237 // lhaux LdStLHAU 238 // lhax LdStLHA 239 // lhbrx LdStLoad 240 // lhz LdStLoad 241 // lhzu LdStLoadUpd 242 // lhzux LdStLoadUpd 243 // lhzx LdStLoad 244 // lmw LdStLMW 245 // lswi LdStLMW 246 // lswx LdStLMW 247 // lvebx LdStLVecX 248 // lvehx LdStLVecX 249 // lvewx LdStLVecX 250 // lvsl LdStLVecX 251 // lvsr LdStLVecX 252 // lvx LdStLVecX 253 // lvxl LdStLVecX 254 // lwa LdStLWA 255 // lwarx LdStLWARX 256 // lwaux LdStLHAU 257 // lwax LdStLHA 258 // lwbrx LdStLoad 259 // lwz LdStLoad 260 // lwzu LdStLoadUpd 261 // lwzux LdStLoadUpd 262 // lwzx LdStLoad 263 // mcrf BrMCR 264 // mcrfs FPGeneral 265 // mcrxr BrMCRX 266 // mfcr SprMFCR 267 // mffs IntMFFS 268 // mfmsr SprMFMSR 269 // mfspr SprMFSPR 270 // mfsr SprMFSR 271 // mfsrin SprMFSR 272 // mftb SprMFTB 273 // mfvscr IntMFVSCR 274 // mtcrf BrMCRX 275 // mtfsb0 IntMTFSB0 276 // mtfsb1 IntMTFSB0 277 // mtfsf IntMTFSB0 278 // mtfsfi IntMTFSB0 279 // mtmsr SprMTMSR 280 // mtmsrd LdStLD 281 // mtspr SprMTSPR 282 // mtsr SprMTSR 283 // mtsrd IntMTSRD 284 // mtsrdin IntMTSRD 285 // mtsrin SprMTSRIN 286 // mtvscr IntMFVSCR 287 // mulhd IntMulHD 288 // mulhdu IntMulHD 289 // mulhw IntMulHW 290 // mulhwu IntMulHWU 291 // mulld IntMulHD 292 // mulli IntMulLI 293 // mullw IntMulHW 294 // nand IntSimple 295 // neg IntSimple 296 // nor IntSimple 297 // or IntSimple 298 // orc IntSimple 299 // ori IntSimple 300 // oris IntSimple 301 // rfi SprRFI 302 // rfid IntRFID 303 // rldcl IntRotateD 304 // rldcr IntRotateD 305 // rldic IntRotateDI 306 // rldicl IntRotateDI 307 // rldicr IntRotateDI 308 // rldimi IntRotateDI 309 // rlwimi IntRotate 310 // rlwinm IntGeneral 311 // rlwnm IntGeneral 312 // sc SprSC 313 // slbia LdStSLBIA 314 // slbie LdStSLBIE 315 // sld IntRotateD 316 // slw IntGeneral 317 // srad IntRotateD 318 // sradi IntRotateDI 319 // sraw IntShift 320 // srawi IntShift 321 // srd IntRotateD 322 // srw IntGeneral 323 // stb LdStStore 324 // stbu LdStStoreUpd 325 // stbux LdStStoreUpd 326 // stbx LdStStore 327 // std LdStSTD 328 // stdcx. LdStSTDCX 329 // stdu LdStSTDU 330 // stdux LdStSTDU 331 // stdx LdStSTD 332 // stfd LdStSTFD 333 // stfdu LdStSTFDU 334 // stfdux LdStSTFDU 335 // stfdx LdStSTFD 336 // stfiwx LdStSTFD 337 // stfs LdStSTFD 338 // stfsu LdStSTFDU 339 // stfsux LdStSTFDU 340 // stfsx LdStSTFD 341 // sth LdStStore 342 // sthbrx LdStStore 343 // sthu LdStStoreUpd 344 // sthux LdStStoreUpd 345 // sthx LdStStore 346 // stmw LdStLMW 347 // stswi LdStLMW 348 // stswx LdStLMW 349 // stvebx LdStSTVEBX 350 // stvehx LdStSTVEBX 351 // stvewx LdStSTVEBX 352 // stvx LdStSTVEBX 353 // stvxl LdStSTVEBX 354 // stw LdStStore 355 // stwbrx LdStStore 356 // stwcx. LdStSTWCX 357 // stwu LdStStoreUpd 358 // stwux LdStStoreUpd 359 // stwx LdStStore 360 // subf IntGeneral 361 // subfc IntGeneral 362 // subfe IntGeneral 363 // subfic IntGeneral 364 // subfme IntGeneral 365 // subfze IntGeneral 366 // sync LdStSync 367 // td IntTrapD 368 // tdi IntTrapD 369 // tlbia LdStSLBIA 370 // tlbie LdStDCBF 371 // tlbsync SprTLBSYNC 372 // tw IntTrapW 373 // twi IntTrapW 374 // vaddcuw VecGeneral 375 // vaddfp VecFP 376 // vaddsbs VecGeneral 377 // vaddshs VecGeneral 378 // vaddsws VecGeneral 379 // vaddubm VecGeneral 380 // vaddubs VecGeneral 381 // vadduhm VecGeneral 382 // vadduhs VecGeneral 383 // vadduwm VecGeneral 384 // vadduws VecGeneral 385 // vand VecGeneral 386 // vandc VecGeneral 387 // vavgsb VecGeneral 388 // vavgsh VecGeneral 389 // vavgsw VecGeneral 390 // vavgub VecGeneral 391 // vavguh VecGeneral 392 // vavguw VecGeneral 393 // vcfsx VecFP 394 // vcfux VecFP 395 // vcmpbfp VecFPCompare 396 // vcmpeqfp VecFPCompare 397 // vcmpequb VecGeneral 398 // vcmpequh VecGeneral 399 // vcmpequw VecGeneral 400 // vcmpgefp VecFPCompare 401 // vcmpgtfp VecFPCompare 402 // vcmpgtsb VecGeneral 403 // vcmpgtsh VecGeneral 404 // vcmpgtsw VecGeneral 405 // vcmpgtub VecGeneral 406 // vcmpgtuh VecGeneral 407 // vcmpgtuw VecGeneral 408 // vctsxs VecFP 409 // vctuxs VecFP 410 // vexptefp VecFP 411 // vlogefp VecFP 412 // vmaddfp VecFP 413 // vmaxfp VecFPCompare 414 // vmaxsb VecGeneral 415 // vmaxsh VecGeneral 416 // vmaxsw VecGeneral 417 // vmaxub VecGeneral 418 // vmaxuh VecGeneral 419 // vmaxuw VecGeneral 420 // vmhaddshs VecComplex 421 // vmhraddshs VecComplex 422 // vminfp VecFPCompare 423 // vminsb VecGeneral 424 // vminsh VecGeneral 425 // vminsw VecGeneral 426 // vminub VecGeneral 427 // vminuh VecGeneral 428 // vminuw VecGeneral 429 // vmladduhm VecComplex 430 // vmrghb VecPerm 431 // vmrghh VecPerm 432 // vmrghw VecPerm 433 // vmrglb VecPerm 434 // vmrglh VecPerm 435 // vmrglw VecPerm 436 // vmsubfp VecFP 437 // vmsummbm VecComplex 438 // vmsumshm VecComplex 439 // vmsumshs VecComplex 440 // vmsumubm VecComplex 441 // vmsumuhm VecComplex 442 // vmsumuhs VecComplex 443 // vmulesb VecComplex 444 // vmulesh VecComplex 445 // vmuleub VecComplex 446 // vmuleuh VecComplex 447 // vmulosb VecComplex 448 // vmulosh VecComplex 449 // vmuloub VecComplex 450 // vmulouh VecComplex 451 // vnor VecGeneral 452 // vor VecGeneral 453 // vperm VecPerm 454 // vpkpx VecPerm 455 // vpkshss VecPerm 456 // vpkshus VecPerm 457 // vpkswss VecPerm 458 // vpkswus VecPerm 459 // vpkuhum VecPerm 460 // vpkuhus VecPerm 461 // vpkuwum VecPerm 462 // vpkuwus VecPerm 463 // vrefp VecFPRound 464 // vrfim VecFPRound 465 // vrfin VecFPRound 466 // vrfip VecFPRound 467 // vrfiz VecFPRound 468 // vrlb VecGeneral 469 // vrlh VecGeneral 470 // vrlw VecGeneral 471 // vrsqrtefp VecFP 472 // vsel VecGeneral 473 // vsl VecVSL 474 // vslb VecGeneral 475 // vsldoi VecPerm 476 // vslh VecGeneral 477 // vslo VecPerm 478 // vslw VecGeneral 479 // vspltb VecPerm 480 // vsplth VecPerm 481 // vspltisb VecPerm 482 // vspltish VecPerm 483 // vspltisw VecPerm 484 // vspltw VecPerm 485 // vsr VecVSR 486 // vsrab VecGeneral 487 // vsrah VecGeneral 488 // vsraw VecGeneral 489 // vsrb VecGeneral 490 // vsrh VecGeneral 491 // vsro VecPerm 492 // vsrw VecGeneral 493 // vsubcuw VecGeneral 494 // vsubfp VecFP 495 // vsubsbs VecGeneral 496 // vsubshs VecGeneral 497 // vsubsws VecGeneral 498 // vsububm VecGeneral 499 // vsububs VecGeneral 500 // vsubuhm VecGeneral 501 // vsubuhs VecGeneral 502 // vsubuwm VecGeneral 503 // vsubuws VecGeneral 504 // vsum2sws VecComplex 505 // vsum4sbs VecComplex 506 // vsum4shs VecComplex 507 // vsum4ubs VecComplex 508 // vsumsws VecComplex 509 // vupkhpx VecPerm 510 // vupkhsb VecPerm 511 // vupkhsh VecPerm 512 // vupklpx VecPerm 513 // vupklsb VecPerm 514 // vupklsh VecPerm 515 // vxor VecGeneral 516 // xor IntSimple 517 // xori IntSimple 518 // xoris IntSimple 519 // 520