//===-- 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 IntSimple : InstrItinClass; 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 IntRotateDI : 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 LdStLoad : InstrItinClass; def LdStLoadUpd : InstrItinClass; def LdStStore : InstrItinClass; def LdStStoreUpd : InstrItinClass; def LdStDSS : InstrItinClass; def LdStICBI : InstrItinClass; def LdStLD : InstrItinClass; def LdStLDU : InstrItinClass; def LdStLDARX : InstrItinClass; def LdStLFD : InstrItinClass; def LdStLFDU : InstrItinClass; def LdStLHA : InstrItinClass; def LdStLHAU : 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 LdStSTDU : InstrItinClass; def LdStSTFD : InstrItinClass; def LdStSTFDU : 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 FPAddSub : 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; def SprMTMSRD : InstrItinClass; def SprSLIE : InstrItinClass; def SprSLBIE : InstrItinClass; def SprSLBMTE : InstrItinClass; def SprSLBMFEE : InstrItinClass; def SprSLBIA : InstrItinClass; def SprTLBIEL : InstrItinClass; def SprTLBIE : InstrItinClass; //===----------------------------------------------------------------------===// // Processor instruction itineraries. include "PPCScheduleG3.td" include "PPCSchedule440.td" include "PPCScheduleG4.td" include "PPCScheduleG4Plus.td" include "PPCScheduleG5.td" include "PPCScheduleA2.td" include "PPCScheduleE500mc.td" include "PPCScheduleE5500.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 IntSimple // addc IntGeneral // adde IntGeneral // addi IntSimple // addic IntGeneral // addic. IntGeneral // addis IntSimple // addme IntGeneral // addze IntGeneral // and IntSimple // andc IntSimple // 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 LdStLoad // dcbtst LdStLoad // dcbz LdStDCBF // divd IntDivD // divdu IntDivD // divw IntDivW // divwu IntDivW // dss LdStDSS // dst LdStDSS // dstst LdStDSS // eciwx LdStLoad // ecowx LdStLoad // eieio LdStLoad // eqv IntSimple // extsb IntSimple // extsh IntSimple // extsw IntSimple // fabs FPGeneral // fadd FPAddSub // 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 FPAddSub // fsubs FPGeneral // icbi LdStICBI // isync SprISYNC // lbz LdStLoad // lbzu LdStLoadUpd // lbzux LdStLoadUpd // lbzx LdStLoad // ld LdStLD // ldarx LdStLDARX // ldu LdStLDU // ldux LdStLDU // ldx LdStLD // lfd LdStLFD // lfdu LdStLFDU // lfdux LdStLFDU // lfdx LdStLFD // lfs LdStLFD // lfsu LdStLFDU // lfsux LdStLFDU // lfsx LdStLFD // lha LdStLHA // lhau LdStLHAU // lhaux LdStLHAU // lhax LdStLHA // lhbrx LdStLoad // lhz LdStLoad // lhzu LdStLoadUpd // lhzux LdStLoadUpd // lhzx LdStLoad // 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 LdStLHAU // lwax LdStLHA // lwbrx LdStLoad // lwz LdStLoad // lwzu LdStLoadUpd // lwzux LdStLoadUpd // lwzx LdStLoad // 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 IntSimple // neg IntSimple // nor IntSimple // or IntSimple // orc IntSimple // ori IntSimple // oris IntSimple // rfi SprRFI // rfid IntRFID // rldcl IntRotateD // rldcr IntRotateD // rldic IntRotateDI // rldicl IntRotateDI // rldicr IntRotateDI // rldimi IntRotateDI // rlwimi IntRotate // rlwinm IntGeneral // rlwnm IntGeneral // sc SprSC // slbia LdStSLBIA // slbie LdStSLBIE // sld IntRotateD // slw IntGeneral // srad IntRotateD // sradi IntRotateDI // sraw IntShift // srawi IntShift // srd IntRotateD // srw IntGeneral // stb LdStStore // stbu LdStStoreUpd // stbux LdStStoreUpd // stbx LdStStore // std LdStSTD // stdcx. LdStSTDCX // stdu LdStSTDU // stdux LdStSTDU // stdx LdStSTD // stfd LdStSTFD // stfdu LdStSTFDU // stfdux LdStSTFDU // stfdx LdStSTFD // stfiwx LdStSTFD // stfs LdStSTFD // stfsu LdStSTFDU // stfsux LdStSTFDU // stfsx LdStSTFD // sth LdStStore // sthbrx LdStStore // sthu LdStStoreUpd // sthux LdStStoreUpd // sthx LdStStore // stmw LdStLMW // stswi LdStLMW // stswx LdStLMW // stvebx LdStSTVEBX // stvehx LdStSTVEBX // stvewx LdStSTVEBX // stvx LdStSTVEBX // stvxl LdStSTVEBX // stw LdStStore // stwbrx LdStStore // stwcx. LdStSTWCX // stwu LdStStoreUpd // stwux LdStStoreUpd // stwx LdStStore // 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 IntSimple // xori IntSimple // xoris IntSimple //