mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-23 12:08:25 +00:00
514a74d946
Note that when adding new instructions that you should refer to the table at the bottom of PPCSchedule.td. llvm-svn: 23830
509 lines
14 KiB
TableGen
509 lines
14 KiB
TableGen
//===- PPCSchedule.td - PowerPC Scheduling Definitions -----*- tablegen -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file was developed by James M. Laskey and 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 IU3 : FuncUnit; // integer unit 3 (7450 simple)
|
|
def IU4 : FuncUnit; // integer unit 4 (7450 simple)
|
|
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
|
|
//
|