mirror of
https://github.com/jeremysrand/llvm-65816.git
synced 2024-11-05 00:06:07 +00:00
528 lines
15 KiB
TableGen
528 lines
15 KiB
TableGen
|
//===-- 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
|
||
|
//
|