//===- 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 | |
// |