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