| //===- PPCSchedule.td - PowerPC Scheduling Definitions -----*- tablegen -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| //===----------------------------------------------------------------------===// | |
| // Functional units across PowerPC chips sets | |
| // | |
| def BPU : FuncUnit; // Branch unit | |
| def SLU : FuncUnit; // Store/load unit | |
| def SRU : FuncUnit; // special register unit | |
| def IU1 : FuncUnit; // integer unit 1 (simple) | |
| def IU2 : FuncUnit; // integer unit 2 (complex) | |
| def FPU1 : FuncUnit; // floating point unit 1 | |
| def FPU2 : FuncUnit; // floating point unit 2 | |
| def VPU : FuncUnit; // vector permutation unit | |
| def VIU1 : FuncUnit; // vector integer unit 1 (simple) | |
| def VIU2 : FuncUnit; // vector integer unit 2 (complex) | |
| def VFPU : FuncUnit; // vector floating point unit | |
| //===----------------------------------------------------------------------===// | |
| // Instruction Itinerary classes used for PowerPC | |
| // | |
| def IntGeneral : InstrItinClass; | |
| def IntCompare : InstrItinClass; | |
| def IntDivD : InstrItinClass; | |
| def IntDivW : InstrItinClass; | |
| def IntMFFS : InstrItinClass; | |
| def IntMFVSCR : InstrItinClass; | |
| def IntMTFSB0 : InstrItinClass; | |
| def IntMTSRD : InstrItinClass; | |
| def IntMulHD : InstrItinClass; | |
| def IntMulHW : InstrItinClass; | |
| def IntMulHWU : InstrItinClass; | |
| def IntMulLI : InstrItinClass; | |
| def IntRFID : InstrItinClass; | |
| def IntRotateD : InstrItinClass; | |
| def IntRotate : InstrItinClass; | |
| def IntShift : InstrItinClass; | |
| def IntTrapD : InstrItinClass; | |
| def IntTrapW : InstrItinClass; | |
| def BrB : InstrItinClass; | |
| def BrCR : InstrItinClass; | |
| def BrMCR : InstrItinClass; | |
| def BrMCRX : InstrItinClass; | |
| def LdStDCBA : InstrItinClass; | |
| def LdStDCBF : InstrItinClass; | |
| def LdStDCBI : InstrItinClass; | |
| def LdStGeneral : InstrItinClass; | |
| def LdStDSS : InstrItinClass; | |
| def LdStICBI : InstrItinClass; | |
| def LdStUX : InstrItinClass; | |
| def LdStLD : InstrItinClass; | |
| def LdStLDARX : InstrItinClass; | |
| def LdStLFD : InstrItinClass; | |
| def LdStLFDU : InstrItinClass; | |
| def LdStLHA : InstrItinClass; | |
| def LdStLMW : InstrItinClass; | |
| def LdStLVecX : InstrItinClass; | |
| def LdStLWA : InstrItinClass; | |
| def LdStLWARX : InstrItinClass; | |
| def LdStSLBIA : InstrItinClass; | |
| def LdStSLBIE : InstrItinClass; | |
| def LdStSTD : InstrItinClass; | |
| def LdStSTDCX : InstrItinClass; | |
| def LdStSTVEBX : InstrItinClass; | |
| def LdStSTWCX : InstrItinClass; | |
| def LdStSync : InstrItinClass; | |
| def SprISYNC : InstrItinClass; | |
| def SprMFSR : InstrItinClass; | |
| def SprMTMSR : InstrItinClass; | |
| def SprMTSR : InstrItinClass; | |
| def SprTLBSYNC : InstrItinClass; | |
| def SprMFCR : InstrItinClass; | |
| def SprMFMSR : InstrItinClass; | |
| def SprMFSPR : InstrItinClass; | |
| def SprMFTB : InstrItinClass; | |
| def SprMTSPR : InstrItinClass; | |
| def SprMTSRIN : InstrItinClass; | |
| def SprRFI : InstrItinClass; | |
| def SprSC : InstrItinClass; | |
| def FPGeneral : InstrItinClass; | |
| def FPCompare : InstrItinClass; | |
| def FPDivD : InstrItinClass; | |
| def FPDivS : InstrItinClass; | |
| def FPFused : InstrItinClass; | |
| def FPRes : InstrItinClass; | |
| def FPSqrt : InstrItinClass; | |
| def VecGeneral : InstrItinClass; | |
| def VecFP : InstrItinClass; | |
| def VecFPCompare : InstrItinClass; | |
| def VecComplex : InstrItinClass; | |
| def VecPerm : InstrItinClass; | |
| def VecFPRound : InstrItinClass; | |
| def VecVSL : InstrItinClass; | |
| def VecVSR : InstrItinClass; | |
| //===----------------------------------------------------------------------===// | |
| // Processor instruction itineraries. | |
| include "PPCScheduleG3.td" | |
| include "PPCScheduleG4.td" | |
| include "PPCScheduleG4Plus.td" | |
| include "PPCScheduleG5.td" | |
| //===----------------------------------------------------------------------===// | |
| // Instruction to itinerary class map - When add new opcodes to the supported | |
| // set, refer to the following table to determine which itinerary class the | |
| // opcode belongs. | |
| // | |
| // opcode itinerary class | |
| // ====== =============== | |
| // add IntGeneral | |
| // addc IntGeneral | |
| // adde IntGeneral | |
| // addi IntGeneral | |
| // addic IntGeneral | |
| // addic. IntGeneral | |
| // addis IntGeneral | |
| // addme IntGeneral | |
| // addze IntGeneral | |
| // and IntGeneral | |
| // andc IntGeneral | |
| // andi. IntGeneral | |
| // andis. IntGeneral | |
| // b BrB | |
| // bc BrB | |
| // bcctr BrB | |
| // bclr BrB | |
| // cmp IntCompare | |
| // cmpi IntCompare | |
| // cmpl IntCompare | |
| // cmpli IntCompare | |
| // cntlzd IntRotateD | |
| // cntlzw IntGeneral | |
| // crand BrCR | |
| // crandc BrCR | |
| // creqv BrCR | |
| // crnand BrCR | |
| // crnor BrCR | |
| // cror BrCR | |
| // crorc BrCR | |
| // crxor BrCR | |
| // dcba LdStDCBA | |
| // dcbf LdStDCBF | |
| // dcbi LdStDCBI | |
| // dcbst LdStDCBF | |
| // dcbt LdStGeneral | |
| // dcbtst LdStGeneral | |
| // dcbz LdStDCBF | |
| // divd IntDivD | |
| // divdu IntDivD | |
| // divw IntDivW | |
| // divwu IntDivW | |
| // dss LdStDSS | |
| // dst LdStDSS | |
| // dstst LdStDSS | |
| // eciwx LdStGeneral | |
| // ecowx LdStGeneral | |
| // eieio LdStGeneral | |
| // eqv IntGeneral | |
| // extsb IntGeneral | |
| // extsh IntGeneral | |
| // extsw IntRotateD | |
| // fabs FPGeneral | |
| // fadd FPGeneral | |
| // fadds FPGeneral | |
| // fcfid FPGeneral | |
| // fcmpo FPCompare | |
| // fcmpu FPCompare | |
| // fctid FPGeneral | |
| // fctidz FPGeneral | |
| // fctiw FPGeneral | |
| // fctiwz FPGeneral | |
| // fdiv FPDivD | |
| // fdivs FPDivS | |
| // fmadd FPFused | |
| // fmadds FPGeneral | |
| // fmr FPGeneral | |
| // fmsub FPFused | |
| // fmsubs FPGeneral | |
| // fmul FPFused | |
| // fmuls FPGeneral | |
| // fnabs FPGeneral | |
| // fneg FPGeneral | |
| // fnmadd FPFused | |
| // fnmadds FPGeneral | |
| // fnmsub FPFused | |
| // fnmsubs FPGeneral | |
| // fres FPRes | |
| // frsp FPGeneral | |
| // frsqrte FPGeneral | |
| // fsel FPGeneral | |
| // fsqrt FPSqrt | |
| // fsqrts FPSqrt | |
| // fsub FPGeneral | |
| // fsubs FPGeneral | |
| // icbi LdStICBI | |
| // isync SprISYNC | |
| // lbz LdStGeneral | |
| // lbzu LdStGeneral | |
| // lbzux LdStUX | |
| // lbzx LdStGeneral | |
| // ld LdStLD | |
| // ldarx LdStLDARX | |
| // ldu LdStLD | |
| // ldux LdStLD | |
| // ldx LdStLD | |
| // lfd LdStLFD | |
| // lfdu LdStLFDU | |
| // lfdux LdStLFDU | |
| // lfdx LdStLFDU | |
| // lfs LdStLFDU | |
| // lfsu LdStLFDU | |
| // lfsux LdStLFDU | |
| // lfsx LdStLFDU | |
| // lha LdStLHA | |
| // lhau LdStLHA | |
| // lhaux LdStLHA | |
| // lhax LdStLHA | |
| // lhbrx LdStGeneral | |
| // lhz LdStGeneral | |
| // lhzu LdStGeneral | |
| // lhzux LdStUX | |
| // lhzx LdStGeneral | |
| // lmw LdStLMW | |
| // lswi LdStLMW | |
| // lswx LdStLMW | |
| // lvebx LdStLVecX | |
| // lvehx LdStLVecX | |
| // lvewx LdStLVecX | |
| // lvsl LdStLVecX | |
| // lvsr LdStLVecX | |
| // lvx LdStLVecX | |
| // lvxl LdStLVecX | |
| // lwa LdStLWA | |
| // lwarx LdStLWARX | |
| // lwaux LdStLHA | |
| // lwax LdStLHA | |
| // lwbrx LdStGeneral | |
| // lwz LdStGeneral | |
| // lwzu LdStGeneral | |
| // lwzux LdStUX | |
| // lwzx LdStGeneral | |
| // mcrf BrMCR | |
| // mcrfs FPGeneral | |
| // mcrxr BrMCRX | |
| // mfcr SprMFCR | |
| // mffs IntMFFS | |
| // mfmsr SprMFMSR | |
| // mfspr SprMFSPR | |
| // mfsr SprMFSR | |
| // mfsrin SprMFSR | |
| // mftb SprMFTB | |
| // mfvscr IntMFVSCR | |
| // mtcrf BrMCRX | |
| // mtfsb0 IntMTFSB0 | |
| // mtfsb1 IntMTFSB0 | |
| // mtfsf IntMTFSB0 | |
| // mtfsfi IntMTFSB0 | |
| // mtmsr SprMTMSR | |
| // mtmsrd LdStLD | |
| // mtspr SprMTSPR | |
| // mtsr SprMTSR | |
| // mtsrd IntMTSRD | |
| // mtsrdin IntMTSRD | |
| // mtsrin SprMTSRIN | |
| // mtvscr IntMFVSCR | |
| // mulhd IntMulHD | |
| // mulhdu IntMulHD | |
| // mulhw IntMulHW | |
| // mulhwu IntMulHWU | |
| // mulld IntMulHD | |
| // mulli IntMulLI | |
| // mullw IntMulHW | |
| // nand IntGeneral | |
| // neg IntGeneral | |
| // nor IntGeneral | |
| // or IntGeneral | |
| // orc IntGeneral | |
| // ori IntGeneral | |
| // oris IntGeneral | |
| // rfi SprRFI | |
| // rfid IntRFID | |
| // rldcl IntRotateD | |
| // rldcr IntRotateD | |
| // rldic IntRotateD | |
| // rldicl IntRotateD | |
| // rldicr IntRotateD | |
| // rldimi IntRotateD | |
| // rlwimi IntRotate | |
| // rlwinm IntGeneral | |
| // rlwnm IntGeneral | |
| // sc SprSC | |
| // slbia LdStSLBIA | |
| // slbie LdStSLBIE | |
| // sld IntRotateD | |
| // slw IntGeneral | |
| // srad IntRotateD | |
| // sradi IntRotateD | |
| // sraw IntShift | |
| // srawi IntShift | |
| // srd IntRotateD | |
| // srw IntGeneral | |
| // stb LdStGeneral | |
| // stbu LdStGeneral | |
| // stbux LdStGeneral | |
| // stbx LdStGeneral | |
| // std LdStSTD | |
| // stdcx. LdStSTDCX | |
| // stdu LdStSTD | |
| // stdux LdStSTD | |
| // stdx LdStSTD | |
| // stfd LdStUX | |
| // stfdu LdStUX | |
| // stfdux LdStUX | |
| // stfdx LdStUX | |
| // stfiwx LdStUX | |
| // stfs LdStUX | |
| // stfsu LdStUX | |
| // stfsux LdStUX | |
| // stfsx LdStUX | |
| // sth LdStGeneral | |
| // sthbrx LdStGeneral | |
| // sthu LdStGeneral | |
| // sthux LdStGeneral | |
| // sthx LdStGeneral | |
| // stmw LdStLMW | |
| // stswi LdStLMW | |
| // stswx LdStLMW | |
| // stvebx LdStSTVEBX | |
| // stvehx LdStSTVEBX | |
| // stvewx LdStSTVEBX | |
| // stvx LdStSTVEBX | |
| // stvxl LdStSTVEBX | |
| // stw LdStGeneral | |
| // stwbrx LdStGeneral | |
| // stwcx. LdStSTWCX | |
| // stwu LdStGeneral | |
| // stwux LdStGeneral | |
| // stwx LdStGeneral | |
| // subf IntGeneral | |
| // subfc IntGeneral | |
| // subfe IntGeneral | |
| // subfic IntGeneral | |
| // subfme IntGeneral | |
| // subfze IntGeneral | |
| // sync LdStSync | |
| // td IntTrapD | |
| // tdi IntTrapD | |
| // tlbia LdStSLBIA | |
| // tlbie LdStDCBF | |
| // tlbsync SprTLBSYNC | |
| // tw IntTrapW | |
| // twi IntTrapW | |
| // vaddcuw VecGeneral | |
| // vaddfp VecFP | |
| // vaddsbs VecGeneral | |
| // vaddshs VecGeneral | |
| // vaddsws VecGeneral | |
| // vaddubm VecGeneral | |
| // vaddubs VecGeneral | |
| // vadduhm VecGeneral | |
| // vadduhs VecGeneral | |
| // vadduwm VecGeneral | |
| // vadduws VecGeneral | |
| // vand VecGeneral | |
| // vandc VecGeneral | |
| // vavgsb VecGeneral | |
| // vavgsh VecGeneral | |
| // vavgsw VecGeneral | |
| // vavgub VecGeneral | |
| // vavguh VecGeneral | |
| // vavguw VecGeneral | |
| // vcfsx VecFP | |
| // vcfux VecFP | |
| // vcmpbfp VecFPCompare | |
| // vcmpeqfp VecFPCompare | |
| // vcmpequb VecGeneral | |
| // vcmpequh VecGeneral | |
| // vcmpequw VecGeneral | |
| // vcmpgefp VecFPCompare | |
| // vcmpgtfp VecFPCompare | |
| // vcmpgtsb VecGeneral | |
| // vcmpgtsh VecGeneral | |
| // vcmpgtsw VecGeneral | |
| // vcmpgtub VecGeneral | |
| // vcmpgtuh VecGeneral | |
| // vcmpgtuw VecGeneral | |
| // vctsxs VecFP | |
| // vctuxs VecFP | |
| // vexptefp VecFP | |
| // vlogefp VecFP | |
| // vmaddfp VecFP | |
| // vmaxfp VecFPCompare | |
| // vmaxsb VecGeneral | |
| // vmaxsh VecGeneral | |
| // vmaxsw VecGeneral | |
| // vmaxub VecGeneral | |
| // vmaxuh VecGeneral | |
| // vmaxuw VecGeneral | |
| // vmhaddshs VecComplex | |
| // vmhraddshs VecComplex | |
| // vminfp VecFPCompare | |
| // vminsb VecGeneral | |
| // vminsh VecGeneral | |
| // vminsw VecGeneral | |
| // vminub VecGeneral | |
| // vminuh VecGeneral | |
| // vminuw VecGeneral | |
| // vmladduhm VecComplex | |
| // vmrghb VecPerm | |
| // vmrghh VecPerm | |
| // vmrghw VecPerm | |
| // vmrglb VecPerm | |
| // vmrglh VecPerm | |
| // vmrglw VecPerm | |
| // vmsubfp VecFP | |
| // vmsummbm VecComplex | |
| // vmsumshm VecComplex | |
| // vmsumshs VecComplex | |
| // vmsumubm VecComplex | |
| // vmsumuhm VecComplex | |
| // vmsumuhs VecComplex | |
| // vmulesb VecComplex | |
| // vmulesh VecComplex | |
| // vmuleub VecComplex | |
| // vmuleuh VecComplex | |
| // vmulosb VecComplex | |
| // vmulosh VecComplex | |
| // vmuloub VecComplex | |
| // vmulouh VecComplex | |
| // vnor VecGeneral | |
| // vor VecGeneral | |
| // vperm VecPerm | |
| // vpkpx VecPerm | |
| // vpkshss VecPerm | |
| // vpkshus VecPerm | |
| // vpkswss VecPerm | |
| // vpkswus VecPerm | |
| // vpkuhum VecPerm | |
| // vpkuhus VecPerm | |
| // vpkuwum VecPerm | |
| // vpkuwus VecPerm | |
| // vrefp VecFPRound | |
| // vrfim VecFPRound | |
| // vrfin VecFPRound | |
| // vrfip VecFPRound | |
| // vrfiz VecFPRound | |
| // vrlb VecGeneral | |
| // vrlh VecGeneral | |
| // vrlw VecGeneral | |
| // vrsqrtefp VecFP | |
| // vsel VecGeneral | |
| // vsl VecVSL | |
| // vslb VecGeneral | |
| // vsldoi VecPerm | |
| // vslh VecGeneral | |
| // vslo VecPerm | |
| // vslw VecGeneral | |
| // vspltb VecPerm | |
| // vsplth VecPerm | |
| // vspltisb VecPerm | |
| // vspltish VecPerm | |
| // vspltisw VecPerm | |
| // vspltw VecPerm | |
| // vsr VecVSR | |
| // vsrab VecGeneral | |
| // vsrah VecGeneral | |
| // vsraw VecGeneral | |
| // vsrb VecGeneral | |
| // vsrh VecGeneral | |
| // vsro VecPerm | |
| // vsrw VecGeneral | |
| // vsubcuw VecGeneral | |
| // vsubfp VecFP | |
| // vsubsbs VecGeneral | |
| // vsubshs VecGeneral | |
| // vsubsws VecGeneral | |
| // vsububm VecGeneral | |
| // vsububs VecGeneral | |
| // vsubuhm VecGeneral | |
| // vsubuhs VecGeneral | |
| // vsubuwm VecGeneral | |
| // vsubuws VecGeneral | |
| // vsum2sws VecComplex | |
| // vsum4sbs VecComplex | |
| // vsum4shs VecComplex | |
| // vsum4ubs VecComplex | |
| // vsumsws VecComplex | |
| // vupkhpx VecPerm | |
| // vupkhsb VecPerm | |
| // vupkhsh VecPerm | |
| // vupklpx VecPerm | |
| // vupklsb VecPerm | |
| // vupklsh VecPerm | |
| // vxor VecGeneral | |
| // xor IntGeneral | |
| // xori IntGeneral | |
| // xoris IntGeneral | |
| // |