//===-- 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. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // Instruction Itinerary classes used for PowerPC // def IIC_IntSimple : InstrItinClass; def IIC_IntGeneral : InstrItinClass; def IIC_IntCompare : InstrItinClass; def IIC_IntDivD : InstrItinClass; def IIC_IntDivW : InstrItinClass; def IIC_IntMFFS : InstrItinClass; def IIC_IntMFVSCR : InstrItinClass; def IIC_IntMTFSB0 : InstrItinClass; def IIC_IntMTSRD : InstrItinClass; def IIC_IntMulHD : InstrItinClass; def IIC_IntMulHW : InstrItinClass; def IIC_IntMulHWU : InstrItinClass; def IIC_IntMulLI : InstrItinClass; def IIC_IntRFID : InstrItinClass; def IIC_IntRotateD : InstrItinClass; def IIC_IntRotateDI : InstrItinClass; def IIC_IntRotate : InstrItinClass; def IIC_IntShift : InstrItinClass; def IIC_IntTrapD : InstrItinClass; def IIC_IntTrapW : InstrItinClass; def IIC_BrB : InstrItinClass; def IIC_BrCR : InstrItinClass; def IIC_BrMCR : InstrItinClass; def IIC_BrMCRX : InstrItinClass; def IIC_LdStDCBA : InstrItinClass; def IIC_LdStDCBF : InstrItinClass; def IIC_LdStDCBI : InstrItinClass; def IIC_LdStLoad : InstrItinClass; def IIC_LdStLoadUpd : InstrItinClass; def IIC_LdStLoadUpdX : InstrItinClass; def IIC_LdStStore : InstrItinClass; def IIC_LdStStoreUpd : InstrItinClass; def IIC_LdStDSS : InstrItinClass; def IIC_LdStICBI : InstrItinClass; def IIC_LdStLD : InstrItinClass; def IIC_LdStLDU : InstrItinClass; def IIC_LdStLDUX : InstrItinClass; def IIC_LdStLDARX : InstrItinClass; def IIC_LdStLFD : InstrItinClass; def IIC_LdStLFDU : InstrItinClass; def IIC_LdStLFDUX : InstrItinClass; def IIC_LdStLHA : InstrItinClass; def IIC_LdStLHAU : InstrItinClass; def IIC_LdStLHAUX : InstrItinClass; def IIC_LdStLMW : InstrItinClass; def IIC_LdStLVecX : InstrItinClass; def IIC_LdStLWA : InstrItinClass; def IIC_LdStLWARX : InstrItinClass; def IIC_LdStSLBIA : InstrItinClass; def IIC_LdStSLBIE : InstrItinClass; def IIC_LdStSTD : InstrItinClass; def IIC_LdStSTDCX : InstrItinClass; def IIC_LdStSTDU : InstrItinClass; def IIC_LdStSTDUX : InstrItinClass; def IIC_LdStSTFD : InstrItinClass; def IIC_LdStSTFDU : InstrItinClass; def IIC_LdStSTVEBX : InstrItinClass; def IIC_LdStSTWCX : InstrItinClass; def IIC_LdStSync : InstrItinClass; def IIC_SprISYNC : InstrItinClass; def IIC_SprMFSR : InstrItinClass; def IIC_SprMTMSR : InstrItinClass; def IIC_SprMTSR : InstrItinClass; def IIC_SprTLBSYNC : InstrItinClass; def IIC_SprMFCR : InstrItinClass; def IIC_SprMFCRF : InstrItinClass; def IIC_SprMFMSR : InstrItinClass; def IIC_SprMFSPR : InstrItinClass; def IIC_SprMFTB : InstrItinClass; def IIC_SprMTSPR : InstrItinClass; def IIC_SprMTSRIN : InstrItinClass; def IIC_SprRFI : InstrItinClass; def IIC_SprSC : InstrItinClass; def IIC_FPGeneral : InstrItinClass; def IIC_FPAddSub : InstrItinClass; def IIC_FPCompare : InstrItinClass; def IIC_FPDivD : InstrItinClass; def IIC_FPDivS : InstrItinClass; def IIC_FPFused : InstrItinClass; def IIC_FPRes : InstrItinClass; def IIC_FPSqrtD : InstrItinClass; def IIC_FPSqrtS : InstrItinClass; def IIC_VecGeneral : InstrItinClass; def IIC_VecFP : InstrItinClass; def IIC_VecFPCompare : InstrItinClass; def IIC_VecComplex : InstrItinClass; def IIC_VecPerm : InstrItinClass; def IIC_VecFPRound : InstrItinClass; def IIC_VecVSL : InstrItinClass; def IIC_VecVSR : InstrItinClass; def IIC_SprMTMSRD : InstrItinClass; def IIC_SprSLIE : InstrItinClass; def IIC_SprSLBIE : InstrItinClass; def IIC_SprSLBMTE : InstrItinClass; def IIC_SprSLBMFEE : InstrItinClass; def IIC_SprSLBIA : InstrItinClass; def IIC_SprTLBIEL : InstrItinClass; def IIC_SprTLBIE : InstrItinClass; //===----------------------------------------------------------------------===// // Processor instruction itineraries. include "PPCScheduleG3.td" include "PPCSchedule440.td" include "PPCScheduleG4.td" include "PPCScheduleG4Plus.td" include "PPCScheduleG5.td" include "PPCScheduleP7.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 IIC_IntSimple // addc IIC_IntGeneral // adde IIC_IntGeneral // addi IIC_IntSimple // addic IIC_IntGeneral // addic. IIC_IntGeneral // addis IIC_IntSimple // addme IIC_IntGeneral // addze IIC_IntGeneral // and IIC_IntSimple // andc IIC_IntSimple // andi. IIC_IntGeneral // andis. IIC_IntGeneral // b IIC_BrB // bc IIC_BrB // bcctr IIC_BrB // bclr IIC_BrB // cmp IIC_IntCompare // cmpi IIC_IntCompare // cmpl IIC_IntCompare // cmpli IIC_IntCompare // cntlzd IIC_IntRotateD // cntlzw IIC_IntGeneral // crand IIC_BrCR // crandc IIC_BrCR // creqv IIC_BrCR // crnand IIC_BrCR // crnor IIC_BrCR // cror IIC_BrCR // crorc IIC_BrCR // crxor IIC_BrCR // dcba IIC_LdStDCBA // dcbf IIC_LdStDCBF // dcbi IIC_LdStDCBI // dcbst IIC_LdStDCBF // dcbt IIC_LdStLoad // dcbtst IIC_LdStLoad // dcbz IIC_LdStDCBF // divd IIC_IntDivD // divdu IIC_IntDivD // divw IIC_IntDivW // divwu IIC_IntDivW // dss IIC_LdStDSS // dst IIC_LdStDSS // dstst IIC_LdStDSS // eciwx IIC_LdStLoad // ecowx IIC_LdStLoad // eieio IIC_LdStLoad // eqv IIC_IntSimple // extsb IIC_IntSimple // extsh IIC_IntSimple // extsw IIC_IntSimple // fabs IIC_FPGeneral // fadd IIC_FPAddSub // fadds IIC_FPGeneral // fcfid IIC_FPGeneral // fcmpo IIC_FPCompare // fcmpu IIC_FPCompare // fctid IIC_FPGeneral // fctidz IIC_FPGeneral // fctiw IIC_FPGeneral // fctiwz IIC_FPGeneral // fdiv IIC_FPDivD // fdivs IIC_FPDivS // fmadd IIC_FPFused // fmadds IIC_FPGeneral // fmr IIC_FPGeneral // fmsub IIC_FPFused // fmsubs IIC_FPGeneral // fmul IIC_FPFused // fmuls IIC_FPGeneral // fnabs IIC_FPGeneral // fneg IIC_FPGeneral // fnmadd IIC_FPFused // fnmadds IIC_FPGeneral // fnmsub IIC_FPFused // fnmsubs IIC_FPGeneral // fres IIC_FPRes // frsp IIC_FPGeneral // frsqrte IIC_FPGeneral // fsel IIC_FPGeneral // fsqrt IIC_FPSqrtD // fsqrts IIC_FPSqrtS // fsub IIC_FPAddSub // fsubs IIC_FPGeneral // icbi IIC_LdStICBI // isync IIC_SprISYNC // lbz IIC_LdStLoad // lbzu IIC_LdStLoadUpd // lbzux IIC_LdStLoadUpdX // lbzx IIC_LdStLoad // ld IIC_LdStLD // ldarx IIC_LdStLDARX // ldu IIC_LdStLDU // ldux IIC_LdStLDUX // ldx IIC_LdStLD // lfd IIC_LdStLFD // lfdu IIC_LdStLFDU // lfdux IIC_LdStLFDUX // lfdx IIC_LdStLFD // lfs IIC_LdStLFD // lfsu IIC_LdStLFDU // lfsux IIC_LdStLFDUX // lfsx IIC_LdStLFD // lha IIC_LdStLHA // lhau IIC_LdStLHAU // lhaux IIC_LdStLHAUX // lhax IIC_LdStLHA // lhbrx IIC_LdStLoad // lhz IIC_LdStLoad // lhzu IIC_LdStLoadUpd // lhzux IIC_LdStLoadUpdX // lhzx IIC_LdStLoad // lmw IIC_LdStLMW // lswi IIC_LdStLMW // lswx IIC_LdStLMW // lvebx IIC_LdStLVecX // lvehx IIC_LdStLVecX // lvewx IIC_LdStLVecX // lvsl IIC_LdStLVecX // lvsr IIC_LdStLVecX // lvx IIC_LdStLVecX // lvxl IIC_LdStLVecX // lwa IIC_LdStLWA // lwarx IIC_LdStLWARX // lwaux IIC_LdStLHAUX // lwax IIC_LdStLHA // lwbrx IIC_LdStLoad // lwz IIC_LdStLoad // lwzu IIC_LdStLoadUpd // lwzux IIC_LdStLoadUpdX // lwzx IIC_LdStLoad // mcrf IIC_BrMCR // mcrfs IIC_FPGeneral // mcrxr IIC_BrMCRX // mfcr IIC_SprMFCR // mffs IIC_IntMFFS // mfmsr IIC_SprMFMSR // mfspr IIC_SprMFSPR // mfsr IIC_SprMFSR // mfsrin IIC_SprMFSR // mftb IIC_SprMFTB // mfvscr IIC_IntMFVSCR // mtcrf IIC_BrMCRX // mtfsb0 IIC_IntMTFSB0 // mtfsb1 IIC_IntMTFSB0 // mtfsf IIC_IntMTFSB0 // mtfsfi IIC_IntMTFSB0 // mtmsr IIC_SprMTMSR // mtmsrd IIC_LdStLD // mtspr IIC_SprMTSPR // mtsr IIC_SprMTSR // mtsrd IIC_IntMTSRD // mtsrdin IIC_IntMTSRD // mtsrin IIC_SprMTSRIN // mtvscr IIC_IntMFVSCR // mulhd IIC_IntMulHD // mulhdu IIC_IntMulHD // mulhw IIC_IntMulHW // mulhwu IIC_IntMulHWU // mulld IIC_IntMulHD // mulli IIC_IntMulLI // mullw IIC_IntMulHW // nand IIC_IntSimple // neg IIC_IntSimple // nor IIC_IntSimple // or IIC_IntSimple // orc IIC_IntSimple // ori IIC_IntSimple // oris IIC_IntSimple // rfi IIC_SprRFI // rfid IIC_IntRFID // rldcl IIC_IntRotateD // rldcr IIC_IntRotateD // rldic IIC_IntRotateDI // rldicl IIC_IntRotateDI // rldicr IIC_IntRotateDI // rldimi IIC_IntRotateDI // rlwimi IIC_IntRotate // rlwinm IIC_IntGeneral // rlwnm IIC_IntGeneral // sc IIC_SprSC // slbia IIC_LdStSLBIA // slbie IIC_LdStSLBIE // sld IIC_IntRotateD // slw IIC_IntGeneral // srad IIC_IntRotateD // sradi IIC_IntRotateDI // sraw IIC_IntShift // srawi IIC_IntShift // srd IIC_IntRotateD // srw IIC_IntGeneral // stb IIC_LdStStore // stbu IIC_LdStStoreUpd // stbux IIC_LdStStoreUpd // stbx IIC_LdStStore // std IIC_LdStSTD // stdcx. IIC_LdStSTDCX // stdu IIC_LdStSTDU // stdux IIC_LdStSTDUX // stdx IIC_LdStSTD // stfd IIC_LdStSTFD // stfdu IIC_LdStSTFDU // stfdux IIC_LdStSTFDU // stfdx IIC_LdStSTFD // stfiwx IIC_LdStSTFD // stfs IIC_LdStSTFD // stfsu IIC_LdStSTFDU // stfsux IIC_LdStSTFDU // stfsx IIC_LdStSTFD // sth IIC_LdStStore // sthbrx IIC_LdStStore // sthu IIC_LdStStoreUpd // sthux IIC_LdStStoreUpd // sthx IIC_LdStStore // stmw IIC_LdStLMW // stswi IIC_LdStLMW // stswx IIC_LdStLMW // stvebx IIC_LdStSTVEBX // stvehx IIC_LdStSTVEBX // stvewx IIC_LdStSTVEBX // stvx IIC_LdStSTVEBX // stvxl IIC_LdStSTVEBX // stw IIC_LdStStore // stwbrx IIC_LdStStore // stwcx. IIC_LdStSTWCX // stwu IIC_LdStStoreUpd // stwux IIC_LdStStoreUpd // stwx IIC_LdStStore // subf IIC_IntGeneral // subfc IIC_IntGeneral // subfe IIC_IntGeneral // subfic IIC_IntGeneral // subfme IIC_IntGeneral // subfze IIC_IntGeneral // sync IIC_LdStSync // td IIC_IntTrapD // tdi IIC_IntTrapD // tlbia IIC_LdStSLBIA // tlbie IIC_LdStDCBF // tlbsync IIC_SprTLBSYNC // tw IIC_IntTrapW // twi IIC_IntTrapW // vaddcuw IIC_VecGeneral // vaddfp IIC_VecFP // vaddsbs IIC_VecGeneral // vaddshs IIC_VecGeneral // vaddsws IIC_VecGeneral // vaddubm IIC_VecGeneral // vaddubs IIC_VecGeneral // vadduhm IIC_VecGeneral // vadduhs IIC_VecGeneral // vadduwm IIC_VecGeneral // vadduws IIC_VecGeneral // vand IIC_VecGeneral // vandc IIC_VecGeneral // vavgsb IIC_VecGeneral // vavgsh IIC_VecGeneral // vavgsw IIC_VecGeneral // vavgub IIC_VecGeneral // vavguh IIC_VecGeneral // vavguw IIC_VecGeneral // vcfsx IIC_VecFP // vcfux IIC_VecFP // vcmpbfp IIC_VecFPCompare // vcmpeqfp IIC_VecFPCompare // vcmpequb IIC_VecGeneral // vcmpequh IIC_VecGeneral // vcmpequw IIC_VecGeneral // vcmpgefp IIC_VecFPCompare // vcmpgtfp IIC_VecFPCompare // vcmpgtsb IIC_VecGeneral // vcmpgtsh IIC_VecGeneral // vcmpgtsw IIC_VecGeneral // vcmpgtub IIC_VecGeneral // vcmpgtuh IIC_VecGeneral // vcmpgtuw IIC_VecGeneral // vctsxs IIC_VecFP // vctuxs IIC_VecFP // vexptefp IIC_VecFP // vlogefp IIC_VecFP // vmaddfp IIC_VecFP // vmaxfp IIC_VecFPCompare // vmaxsb IIC_VecGeneral // vmaxsh IIC_VecGeneral // vmaxsw IIC_VecGeneral // vmaxub IIC_VecGeneral // vmaxuh IIC_VecGeneral // vmaxuw IIC_VecGeneral // vmhaddshs IIC_VecComplex // vmhraddshs IIC_VecComplex // vminfp IIC_VecFPCompare // vminsb IIC_VecGeneral // vminsh IIC_VecGeneral // vminsw IIC_VecGeneral // vminub IIC_VecGeneral // vminuh IIC_VecGeneral // vminuw IIC_VecGeneral // vmladduhm IIC_VecComplex // vmrghb IIC_VecPerm // vmrghh IIC_VecPerm // vmrghw IIC_VecPerm // vmrglb IIC_VecPerm // vmrglh IIC_VecPerm // vmrglw IIC_VecPerm // vmsubfp IIC_VecFP // vmsummbm IIC_VecComplex // vmsumshm IIC_VecComplex // vmsumshs IIC_VecComplex // vmsumubm IIC_VecComplex // vmsumuhm IIC_VecComplex // vmsumuhs IIC_VecComplex // vmulesb IIC_VecComplex // vmulesh IIC_VecComplex // vmuleub IIC_VecComplex // vmuleuh IIC_VecComplex // vmulosb IIC_VecComplex // vmulosh IIC_VecComplex // vmuloub IIC_VecComplex // vmulouh IIC_VecComplex // vnor IIC_VecGeneral // vor IIC_VecGeneral // vperm IIC_VecPerm // vpkpx IIC_VecPerm // vpkshss IIC_VecPerm // vpkshus IIC_VecPerm // vpkswss IIC_VecPerm // vpkswus IIC_VecPerm // vpkuhum IIC_VecPerm // vpkuhus IIC_VecPerm // vpkuwum IIC_VecPerm // vpkuwus IIC_VecPerm // vrefp IIC_VecFPRound // vrfim IIC_VecFPRound // vrfin IIC_VecFPRound // vrfip IIC_VecFPRound // vrfiz IIC_VecFPRound // vrlb IIC_VecGeneral // vrlh IIC_VecGeneral // vrlw IIC_VecGeneral // vrsqrtefp IIC_VecFP // vsel IIC_VecGeneral // vsl IIC_VecVSL // vslb IIC_VecGeneral // vsldoi IIC_VecPerm // vslh IIC_VecGeneral // vslo IIC_VecPerm // vslw IIC_VecGeneral // vspltb IIC_VecPerm // vsplth IIC_VecPerm // vspltisb IIC_VecPerm // vspltish IIC_VecPerm // vspltisw IIC_VecPerm // vspltw IIC_VecPerm // vsr IIC_VecVSR // vsrab IIC_VecGeneral // vsrah IIC_VecGeneral // vsraw IIC_VecGeneral // vsrb IIC_VecGeneral // vsrh IIC_VecGeneral // vsro IIC_VecPerm // vsrw IIC_VecGeneral // vsubcuw IIC_VecGeneral // vsubfp IIC_VecFP // vsubsbs IIC_VecGeneral // vsubshs IIC_VecGeneral // vsubsws IIC_VecGeneral // vsububm IIC_VecGeneral // vsububs IIC_VecGeneral // vsubuhm IIC_VecGeneral // vsubuhs IIC_VecGeneral // vsubuwm IIC_VecGeneral // vsubuws IIC_VecGeneral // vsum2sws IIC_VecComplex // vsum4sbs IIC_VecComplex // vsum4shs IIC_VecComplex // vsum4ubs IIC_VecComplex // vsumsws IIC_VecComplex // vupkhpx IIC_VecPerm // vupkhsb IIC_VecPerm // vupkhsh IIC_VecPerm // vupklpx IIC_VecPerm // vupklsb IIC_VecPerm // vupklsh IIC_VecPerm // vxor IIC_VecGeneral // xor IIC_IntSimple // xori IIC_IntSimple // xoris IIC_IntSimple //