1565 lines
39 KiB
C++
1565 lines
39 KiB
C++
//===- TableGen'erated file -------------------------------------*- C++ -*-===//
|
|
//
|
|
// Machine Code Emitter
|
|
//
|
|
// Automatically generated file, do not edit!
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
unsigned PPCCodeEmitter::getBinaryCodeForInstr(const MachineInstr &MI) {
|
|
static const unsigned InstBits[] = {
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
0U,
|
|
2080375316U, // ADD4
|
|
2080375316U, // ADD8
|
|
2080374804U, // ADDC
|
|
2080374804U, // ADDC8
|
|
2080375060U, // ADDE
|
|
2080375060U, // ADDE8
|
|
939524096U, // ADDI
|
|
939524096U, // ADDI8
|
|
805306368U, // ADDIC
|
|
805306368U, // ADDIC8
|
|
872415232U, // ADDICo
|
|
1006632960U, // ADDIS
|
|
1006632960U, // ADDIS8
|
|
2080375252U, // ADDME
|
|
2080375252U, // ADDME8
|
|
2080375188U, // ADDZE
|
|
2080375188U, // ADDZE8
|
|
0U, // ADJCALLSTACKDOWN
|
|
0U, // ADJCALLSTACKUP
|
|
2080374840U, // AND
|
|
2080374840U, // AND8
|
|
2080374904U, // ANDC
|
|
2080374904U, // ANDC8
|
|
1946157056U, // ANDISo
|
|
1946157056U, // ANDISo8
|
|
1879048192U, // ANDIo
|
|
1879048192U, // ANDIo8
|
|
0U, // ATOMIC_CMP_SWAP_I16
|
|
0U, // ATOMIC_CMP_SWAP_I32
|
|
0U, // ATOMIC_CMP_SWAP_I64
|
|
0U, // ATOMIC_CMP_SWAP_I8
|
|
0U, // ATOMIC_LOAD_ADD_I16
|
|
0U, // ATOMIC_LOAD_ADD_I32
|
|
0U, // ATOMIC_LOAD_ADD_I64
|
|
0U, // ATOMIC_LOAD_ADD_I8
|
|
0U, // ATOMIC_LOAD_AND_I16
|
|
0U, // ATOMIC_LOAD_AND_I32
|
|
0U, // ATOMIC_LOAD_AND_I64
|
|
0U, // ATOMIC_LOAD_AND_I8
|
|
0U, // ATOMIC_LOAD_NAND_I16
|
|
0U, // ATOMIC_LOAD_NAND_I32
|
|
0U, // ATOMIC_LOAD_NAND_I64
|
|
0U, // ATOMIC_LOAD_NAND_I8
|
|
0U, // ATOMIC_LOAD_OR_I16
|
|
0U, // ATOMIC_LOAD_OR_I32
|
|
0U, // ATOMIC_LOAD_OR_I64
|
|
0U, // ATOMIC_LOAD_OR_I8
|
|
0U, // ATOMIC_LOAD_SUB_I16
|
|
0U, // ATOMIC_LOAD_SUB_I32
|
|
0U, // ATOMIC_LOAD_SUB_I64
|
|
0U, // ATOMIC_LOAD_SUB_I8
|
|
0U, // ATOMIC_LOAD_XOR_I16
|
|
0U, // ATOMIC_LOAD_XOR_I32
|
|
0U, // ATOMIC_LOAD_XOR_I64
|
|
0U, // ATOMIC_LOAD_XOR_I8
|
|
0U, // ATOMIC_SWAP_I16
|
|
0U, // ATOMIC_SWAP_I32
|
|
0U, // ATOMIC_SWAP_I64
|
|
0U, // ATOMIC_SWAP_I8
|
|
1207959552U, // B
|
|
1073741824U, // BCC
|
|
1317012512U, // BCTR
|
|
1317012513U, // BCTRL8_Darwin
|
|
1317012513U, // BCTRL8_ELF
|
|
1317012513U, // BCTRL_Darwin
|
|
1317012513U, // BCTRL_SVR4
|
|
1207959553U, // BL8_Darwin
|
|
1207959553U, // BL8_ELF
|
|
1207959555U, // BLA8_Darwin
|
|
1207959555U, // BLA8_ELF
|
|
1207959555U, // BLA_Darwin
|
|
1207959555U, // BLA_SVR4
|
|
1275068448U, // BLR
|
|
1207959553U, // BL_Darwin
|
|
1207959553U, // BL_SVR4
|
|
2082471936U, // CMPD
|
|
740294656U, // CMPDI
|
|
2082472000U, // CMPLD
|
|
673185792U, // CMPLDI
|
|
2080374848U, // CMPLW
|
|
671088640U, // CMPLWI
|
|
2080374784U, // CMPW
|
|
738197504U, // CMPWI
|
|
2080374900U, // CNTLZD
|
|
2080374836U, // CNTLZW
|
|
1275068994U, // CREQV
|
|
1275069314U, // CROR
|
|
1275068994U, // CRSET
|
|
2080376300U, // DCBA
|
|
2080374956U, // DCBF
|
|
2080375724U, // DCBI
|
|
2080374892U, // DCBST
|
|
2080375340U, // DCBT
|
|
2080375276U, // DCBTST
|
|
2080376812U, // DCBZ
|
|
2082473964U, // DCBZL
|
|
2080375762U, // DIVD
|
|
2080375698U, // DIVDU
|
|
2080375766U, // DIVW
|
|
2080375702U, // DIVWU
|
|
2080376428U, // DSS
|
|
2080376428U, // DSSALL
|
|
2080375468U, // DST
|
|
2080375468U, // DST64
|
|
2080375532U, // DSTST
|
|
2080375532U, // DSTST64
|
|
2080375532U, // DSTSTT
|
|
2080375532U, // DSTSTT64
|
|
2080375468U, // DSTT
|
|
2080375468U, // DSTT64
|
|
0U, // DYNALLOC
|
|
0U, // DYNALLOC8
|
|
2080375352U, // EQV
|
|
2080375352U, // EQV8
|
|
2080376692U, // EXTSB
|
|
2080376692U, // EXTSB8
|
|
2080376628U, // EXTSH
|
|
2080376628U, // EXTSH8
|
|
2080376756U, // EXTSW
|
|
2080376756U, // EXTSW_32
|
|
2080376756U, // EXTSW_32_64
|
|
4227858960U, // FABSD
|
|
4227858960U, // FABSS
|
|
4227858474U, // FADD
|
|
3959423018U, // FADDS
|
|
4227858474U, // FADDrtz
|
|
4227860124U, // FCFID
|
|
4227858432U, // FCMPUD
|
|
4227858432U, // FCMPUS
|
|
4227860062U, // FCTIDZ
|
|
4227858462U, // FCTIWZ
|
|
4227858468U, // FDIV
|
|
3959423012U, // FDIVS
|
|
4227858490U, // FMADD
|
|
3959423034U, // FMADDS
|
|
4227858576U, // FMR
|
|
4227858488U, // FMSUB
|
|
3959423032U, // FMSUBS
|
|
4227858482U, // FMUL
|
|
3959423026U, // FMULS
|
|
4227858704U, // FNABSD
|
|
4227858704U, // FNABSS
|
|
4227858512U, // FNEGD
|
|
4227858512U, // FNEGS
|
|
4227858494U, // FNMADD
|
|
3959423038U, // FNMADDS
|
|
4227858492U, // FNMSUB
|
|
3959423036U, // FNMSUBS
|
|
4227858456U, // FRSP
|
|
4227858478U, // FSELD
|
|
4227858478U, // FSELS
|
|
4227858476U, // FSQRT
|
|
3959423020U, // FSQRTS
|
|
4227858472U, // FSUB
|
|
3959423016U, // FSUBS
|
|
939524096U, // LA
|
|
2281701376U, // LBZ
|
|
2281701376U, // LBZ8
|
|
2348810240U, // LBZU
|
|
2348810240U, // LBZU8
|
|
2080374958U, // LBZX
|
|
2080374958U, // LBZX8
|
|
3892314112U, // LD
|
|
2080374952U, // LDARX
|
|
3892314113U, // LDU
|
|
2080374826U, // LDX
|
|
3896508448U, // LDinto_toc
|
|
3892314112U, // LDtoc
|
|
3896574112U, // LDtoc_restore
|
|
3355443200U, // LFD
|
|
3422552064U, // LFDU
|
|
2080375982U, // LFDX
|
|
3221225472U, // LFS
|
|
3288334336U, // LFSU
|
|
2080375854U, // LFSX
|
|
2818572288U, // LHA
|
|
2818572288U, // LHA8
|
|
2885681152U, // LHAU
|
|
2885681152U, // LHAU8
|
|
2080375470U, // LHAX
|
|
2080375470U, // LHAX8
|
|
2080376364U, // LHBRX
|
|
2684354560U, // LHZ
|
|
2684354560U, // LHZ8
|
|
2751463424U, // LHZU
|
|
2751463424U, // LHZU8
|
|
2080375342U, // LHZX
|
|
2080375342U, // LHZX8
|
|
939524096U, // LI
|
|
939524096U, // LI8
|
|
1006632960U, // LIS
|
|
1006632960U, // LIS8
|
|
2080374798U, // LVEBX
|
|
2080374862U, // LVEHX
|
|
2080374926U, // LVEWX
|
|
2080374796U, // LVSL
|
|
2080374860U, // LVSR
|
|
2080374990U, // LVX
|
|
2080375502U, // LVXL
|
|
3892314114U, // LWA
|
|
2080374824U, // LWARX
|
|
2080375466U, // LWAX
|
|
2080375852U, // LWBRX
|
|
2147483648U, // LWZ
|
|
2147483648U, // LWZ8
|
|
2214592512U, // LWZU
|
|
2214592512U, // LWZU8
|
|
2080374830U, // LWZX
|
|
2080374830U, // LWZX8
|
|
1275068416U, // MCRF
|
|
2080374822U, // MFCRpseud
|
|
2080965286U, // MFCTR
|
|
2080965286U, // MFCTR8
|
|
4227859598U, // MFFS
|
|
2080899750U, // MFLR
|
|
2080899750U, // MFLR8
|
|
2081423398U, // MFOCRF
|
|
2080391846U, // MFVRSAVE
|
|
268436996U, // MFVSCR
|
|
2080375072U, // MTCRF
|
|
2080965542U, // MTCTR
|
|
2080965542U, // MTCTR8
|
|
4227858572U, // MTFSB0
|
|
4227858508U, // MTFSB1
|
|
4227859854U, // MTFSF
|
|
2080900006U, // MTLR
|
|
2080900006U, // MTLR8
|
|
2080392102U, // MTVRSAVE
|
|
268437060U, // MTVSCR
|
|
2080374930U, // MULHD
|
|
2080374802U, // MULHDU
|
|
2080374934U, // MULHW
|
|
2080374806U, // MULHWU
|
|
2080375250U, // MULLD
|
|
469762048U, // MULLI
|
|
2080375254U, // MULLW
|
|
0U, // MovePCtoLR
|
|
0U, // MovePCtoLR8
|
|
2080375736U, // NAND
|
|
2080375736U, // NAND8
|
|
2080374992U, // NEG
|
|
2080374992U, // NEG8
|
|
1610612736U, // NOP
|
|
2080375032U, // NOR
|
|
2080375032U, // NOR8
|
|
2080375672U, // OR
|
|
2080375672U, // OR4To8
|
|
2080375672U, // OR8
|
|
2080375672U, // OR8To4
|
|
2080375608U, // ORC
|
|
2080375608U, // ORC8
|
|
1610612736U, // ORI
|
|
1610612736U, // ORI8
|
|
1677721600U, // ORIS
|
|
1677721600U, // ORIS8
|
|
2013265920U, // RLDCL
|
|
2013265920U, // RLDICL
|
|
2013265924U, // RLDICR
|
|
2013265932U, // RLDIMI
|
|
1342177280U, // RLWIMI
|
|
1409286144U, // RLWINM
|
|
1409286145U, // RLWINMo
|
|
1543503872U, // RLWNM
|
|
0U, // SELECT_CC_F4
|
|
0U, // SELECT_CC_F8
|
|
0U, // SELECT_CC_I4
|
|
0U, // SELECT_CC_I8
|
|
0U, // SELECT_CC_VRRC
|
|
2080374838U, // SLD
|
|
2080374832U, // SLW
|
|
0U, // SPILL_CR
|
|
2080376372U, // SRAD
|
|
2080376436U, // SRADI
|
|
2080376368U, // SRAW
|
|
2080376432U, // SRAWI
|
|
2080375862U, // SRD
|
|
2080375856U, // SRW
|
|
2550136832U, // STB
|
|
2550136832U, // STB8
|
|
2617245696U, // STBU
|
|
2550136832U, // STBU8
|
|
2080375214U, // STBX
|
|
2080375214U, // STBX8
|
|
4160749568U, // STD
|
|
2080375213U, // STDCX
|
|
4160749569U, // STDU
|
|
2080375146U, // STDUX
|
|
2080375082U, // STDX
|
|
2080375082U, // STDX_32
|
|
4160749568U, // STD_32
|
|
3623878656U, // STFD
|
|
2483027968U, // STFDU
|
|
2080376238U, // STFDX
|
|
2080376750U, // STFIWX
|
|
3489660928U, // STFS
|
|
2483027968U, // STFSU
|
|
2080376110U, // STFSX
|
|
2952790016U, // STH
|
|
2952790016U, // STH8
|
|
2080376620U, // STHBRX
|
|
3019898880U, // STHU
|
|
3019898880U, // STHU8
|
|
2080375598U, // STHX
|
|
2080375598U, // STHX8
|
|
2080375054U, // STVEBX
|
|
2080375118U, // STVEHX
|
|
2080375182U, // STVEWX
|
|
2080375246U, // STVX
|
|
2080375758U, // STVXL
|
|
2415919104U, // STW
|
|
2415919104U, // STW8
|
|
2080376108U, // STWBRX
|
|
2080375085U, // STWCX
|
|
2483027968U, // STWU
|
|
2080375150U, // STWUX
|
|
2080375086U, // STWX
|
|
2080375086U, // STWX8
|
|
2080374864U, // SUBF
|
|
2080374864U, // SUBF8
|
|
2080374800U, // SUBFC
|
|
2080374800U, // SUBFC8
|
|
2080375056U, // SUBFE
|
|
2080375056U, // SUBFE8
|
|
536870912U, // SUBFIC
|
|
536870912U, // SUBFIC8
|
|
2080375248U, // SUBFME
|
|
2080375248U, // SUBFME8
|
|
2080375184U, // SUBFZE
|
|
2080375184U, // SUBFZE8
|
|
2080375980U, // SYNC
|
|
1207959552U, // TAILB
|
|
1207959552U, // TAILB8
|
|
1207959552U, // TAILBA
|
|
1207959552U, // TAILBA8
|
|
1317012512U, // TAILBCTR
|
|
1317012512U, // TAILBCTR8
|
|
0U, // TCRETURNai
|
|
0U, // TCRETURNai8
|
|
0U, // TCRETURNdi
|
|
0U, // TCRETURNdi8
|
|
0U, // TCRETURNri
|
|
0U, // TCRETURNri8
|
|
2145386504U, // TRAP
|
|
0U, // UPDATE_VRSAVE
|
|
268435840U, // VADDCUW
|
|
268435466U, // VADDFP
|
|
268436224U, // VADDSBS
|
|
268436288U, // VADDSHS
|
|
268436352U, // VADDSWS
|
|
268435456U, // VADDUBM
|
|
268435968U, // VADDUBS
|
|
268435520U, // VADDUHM
|
|
268436032U, // VADDUHS
|
|
268435584U, // VADDUWM
|
|
268436096U, // VADDUWS
|
|
268436484U, // VAND
|
|
268436548U, // VANDC
|
|
268436738U, // VAVGSB
|
|
268436802U, // VAVGSH
|
|
268436866U, // VAVGSW
|
|
268436482U, // VAVGUB
|
|
268436546U, // VAVGUH
|
|
268436610U, // VAVGUW
|
|
268436298U, // VCFSX
|
|
268436234U, // VCFUX
|
|
268436422U, // VCMPBFP
|
|
268437446U, // VCMPBFPo
|
|
268435654U, // VCMPEQFP
|
|
268436678U, // VCMPEQFPo
|
|
268435462U, // VCMPEQUB
|
|
268436486U, // VCMPEQUBo
|
|
268435526U, // VCMPEQUH
|
|
268436550U, // VCMPEQUHo
|
|
268435590U, // VCMPEQUW
|
|
268436614U, // VCMPEQUWo
|
|
268435910U, // VCMPGEFP
|
|
268436934U, // VCMPGEFPo
|
|
268436166U, // VCMPGTFP
|
|
268437190U, // VCMPGTFPo
|
|
268436230U, // VCMPGTSB
|
|
268437254U, // VCMPGTSBo
|
|
268436294U, // VCMPGTSH
|
|
268437318U, // VCMPGTSHo
|
|
268436358U, // VCMPGTSW
|
|
268437382U, // VCMPGTSWo
|
|
268435974U, // VCMPGTUB
|
|
268436998U, // VCMPGTUBo
|
|
268436038U, // VCMPGTUH
|
|
268437062U, // VCMPGTUHo
|
|
268436102U, // VCMPGTUW
|
|
268437126U, // VCMPGTUWo
|
|
268436426U, // VCTSXS
|
|
268436362U, // VCTUXS
|
|
268435850U, // VEXPTEFP
|
|
268435914U, // VLOGEFP
|
|
268435502U, // VMADDFP
|
|
268436490U, // VMAXFP
|
|
268435714U, // VMAXSB
|
|
268435778U, // VMAXSH
|
|
268435842U, // VMAXSW
|
|
268435458U, // VMAXUB
|
|
268435522U, // VMAXUH
|
|
268435586U, // VMAXUW
|
|
268435488U, // VMHADDSHS
|
|
268435489U, // VMHRADDSHS
|
|
268436554U, // VMINFP
|
|
268436226U, // VMINSB
|
|
268436290U, // VMINSH
|
|
268436354U, // VMINSW
|
|
268435970U, // VMINUB
|
|
268436034U, // VMINUH
|
|
268436098U, // VMINUW
|
|
268435490U, // VMLADDUHM
|
|
268435468U, // VMRGHB
|
|
268435532U, // VMRGHH
|
|
268435596U, // VMRGHW
|
|
268435724U, // VMRGLB
|
|
268435788U, // VMRGLH
|
|
268435852U, // VMRGLW
|
|
268435493U, // VMSUMMBM
|
|
268435496U, // VMSUMSHM
|
|
268435497U, // VMSUMSHS
|
|
268435492U, // VMSUMUBM
|
|
268435494U, // VMSUMUHM
|
|
268435495U, // VMSUMUHS
|
|
268436232U, // VMULESB
|
|
268436296U, // VMULESH
|
|
268435976U, // VMULEUB
|
|
268436040U, // VMULEUH
|
|
268435720U, // VMULOSB
|
|
268435784U, // VMULOSH
|
|
268435464U, // VMULOUB
|
|
268435528U, // VMULOUH
|
|
268435503U, // VNMSUBFP
|
|
268436740U, // VNOR
|
|
268436612U, // VOR
|
|
268435499U, // VPERM
|
|
268436238U, // VPKPX
|
|
268435854U, // VPKSHSS
|
|
268435726U, // VPKSHUS
|
|
268435918U, // VPKSWSS
|
|
268435790U, // VPKSWUS
|
|
268435470U, // VPKUHUM
|
|
268435598U, // VPKUHUS
|
|
268435534U, // VPKUWUM
|
|
268435662U, // VPKUWUS
|
|
268435722U, // VREFP
|
|
268436170U, // VRFIM
|
|
268435978U, // VRFIN
|
|
268436106U, // VRFIP
|
|
268436042U, // VRFIZ
|
|
268435460U, // VRLB
|
|
268435524U, // VRLH
|
|
268435588U, // VRLW
|
|
268435786U, // VRSQRTEFP
|
|
268435498U, // VSEL
|
|
268435908U, // VSL
|
|
268435716U, // VSLB
|
|
268435500U, // VSLDOI
|
|
268435780U, // VSLH
|
|
268436492U, // VSLO
|
|
268435844U, // VSLW
|
|
268435980U, // VSPLTB
|
|
268436044U, // VSPLTH
|
|
268436236U, // VSPLTISB
|
|
268436300U, // VSPLTISH
|
|
268436364U, // VSPLTISW
|
|
268436108U, // VSPLTW
|
|
268436164U, // VSR
|
|
268436228U, // VSRAB
|
|
268436292U, // VSRAH
|
|
268436356U, // VSRAW
|
|
268435972U, // VSRB
|
|
268436036U, // VSRH
|
|
268436556U, // VSRO
|
|
268436100U, // VSRW
|
|
268435530U, // VSUBCUW
|
|
268435530U, // VSUBFP
|
|
268437248U, // VSUBSBS
|
|
268437312U, // VSUBSHS
|
|
268437376U, // VSUBSWS
|
|
268436480U, // VSUBUBM
|
|
268436992U, // VSUBUBS
|
|
268436544U, // VSUBUHM
|
|
268437056U, // VSUBUHS
|
|
268436608U, // VSUBUWM
|
|
268437120U, // VSUBUWS
|
|
268437128U, // VSUM2SWS
|
|
268437128U, // VSUM4SBS
|
|
268437064U, // VSUM4SHS
|
|
268437000U, // VSUM4UBS
|
|
268437384U, // VSUMSWS
|
|
268436302U, // VUPKHPX
|
|
268435982U, // VUPKHSB
|
|
268436046U, // VUPKHSH
|
|
268436430U, // VUPKLPX
|
|
268436110U, // VUPKLSB
|
|
268436174U, // VUPKLSH
|
|
268436676U, // VXOR
|
|
268436676U, // V_SET0
|
|
2080375416U, // XOR
|
|
2080375416U, // XOR8
|
|
1744830464U, // XORI
|
|
1744830464U, // XORI8
|
|
1811939328U, // XORIS
|
|
1811939328U, // XORIS8
|
|
0U
|
|
};
|
|
const unsigned opcode = MI.getOpcode();
|
|
unsigned Value = InstBits[opcode];
|
|
unsigned op = 0;
|
|
op = op; // suppress warning
|
|
switch (opcode) {
|
|
case PPC::ADJCALLSTACKDOWN:
|
|
case PPC::ADJCALLSTACKUP:
|
|
case PPC::ATOMIC_CMP_SWAP_I16:
|
|
case PPC::ATOMIC_CMP_SWAP_I32:
|
|
case PPC::ATOMIC_CMP_SWAP_I64:
|
|
case PPC::ATOMIC_CMP_SWAP_I8:
|
|
case PPC::ATOMIC_LOAD_ADD_I16:
|
|
case PPC::ATOMIC_LOAD_ADD_I32:
|
|
case PPC::ATOMIC_LOAD_ADD_I64:
|
|
case PPC::ATOMIC_LOAD_ADD_I8:
|
|
case PPC::ATOMIC_LOAD_AND_I16:
|
|
case PPC::ATOMIC_LOAD_AND_I32:
|
|
case PPC::ATOMIC_LOAD_AND_I64:
|
|
case PPC::ATOMIC_LOAD_AND_I8:
|
|
case PPC::ATOMIC_LOAD_NAND_I16:
|
|
case PPC::ATOMIC_LOAD_NAND_I32:
|
|
case PPC::ATOMIC_LOAD_NAND_I64:
|
|
case PPC::ATOMIC_LOAD_NAND_I8:
|
|
case PPC::ATOMIC_LOAD_OR_I16:
|
|
case PPC::ATOMIC_LOAD_OR_I32:
|
|
case PPC::ATOMIC_LOAD_OR_I64:
|
|
case PPC::ATOMIC_LOAD_OR_I8:
|
|
case PPC::ATOMIC_LOAD_SUB_I16:
|
|
case PPC::ATOMIC_LOAD_SUB_I32:
|
|
case PPC::ATOMIC_LOAD_SUB_I64:
|
|
case PPC::ATOMIC_LOAD_SUB_I8:
|
|
case PPC::ATOMIC_LOAD_XOR_I16:
|
|
case PPC::ATOMIC_LOAD_XOR_I32:
|
|
case PPC::ATOMIC_LOAD_XOR_I64:
|
|
case PPC::ATOMIC_LOAD_XOR_I8:
|
|
case PPC::ATOMIC_SWAP_I16:
|
|
case PPC::ATOMIC_SWAP_I32:
|
|
case PPC::ATOMIC_SWAP_I64:
|
|
case PPC::ATOMIC_SWAP_I8:
|
|
case PPC::BCTR:
|
|
case PPC::BCTRL8_Darwin:
|
|
case PPC::BCTRL8_ELF:
|
|
case PPC::BCTRL_Darwin:
|
|
case PPC::BCTRL_SVR4:
|
|
case PPC::DYNALLOC:
|
|
case PPC::DYNALLOC8:
|
|
case PPC::LDtoc_restore:
|
|
case PPC::MovePCtoLR:
|
|
case PPC::MovePCtoLR8:
|
|
case PPC::NOP:
|
|
case PPC::SELECT_CC_F4:
|
|
case PPC::SELECT_CC_F8:
|
|
case PPC::SELECT_CC_I4:
|
|
case PPC::SELECT_CC_I8:
|
|
case PPC::SELECT_CC_VRRC:
|
|
case PPC::SPILL_CR:
|
|
case PPC::SYNC:
|
|
case PPC::TAILBCTR:
|
|
case PPC::TAILBCTR8:
|
|
case PPC::TCRETURNai:
|
|
case PPC::TCRETURNai8:
|
|
case PPC::TCRETURNdi:
|
|
case PPC::TCRETURNdi8:
|
|
case PPC::TCRETURNri:
|
|
case PPC::TCRETURNri8:
|
|
case PPC::TRAP:
|
|
case PPC::UPDATE_VRSAVE: {
|
|
break;
|
|
}
|
|
case PPC::DCBA:
|
|
case PPC::DCBF:
|
|
case PPC::DCBI:
|
|
case PPC::DCBST:
|
|
case PPC::DCBT:
|
|
case PPC::DCBTST:
|
|
case PPC::DCBZ:
|
|
case PPC::DCBZL: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::SRADI: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RS
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
// op: SH
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
Value |= (op & 32U) >> 4;
|
|
break;
|
|
}
|
|
case PPC::CNTLZD:
|
|
case PPC::CNTLZW:
|
|
case PPC::EXTSB:
|
|
case PPC::EXTSB8:
|
|
case PPC::EXTSH:
|
|
case PPC::EXTSH8:
|
|
case PPC::EXTSW:
|
|
case PPC::EXTSW_32:
|
|
case PPC::EXTSW_32_64: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
break;
|
|
}
|
|
case PPC::AND:
|
|
case PPC::AND8:
|
|
case PPC::ANDC:
|
|
case PPC::ANDC8:
|
|
case PPC::EQV:
|
|
case PPC::EQV8:
|
|
case PPC::NAND:
|
|
case PPC::NAND8:
|
|
case PPC::NOR:
|
|
case PPC::NOR8:
|
|
case PPC::OR:
|
|
case PPC::OR4To8:
|
|
case PPC::OR8:
|
|
case PPC::OR8To4:
|
|
case PPC::ORC:
|
|
case PPC::ORC8:
|
|
case PPC::SLD:
|
|
case PPC::SLW:
|
|
case PPC::SRAD:
|
|
case PPC::SRAW:
|
|
case PPC::SRAWI:
|
|
case PPC::SRD:
|
|
case PPC::SRW:
|
|
case PPC::XOR:
|
|
case PPC::XOR8: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::ADDI:
|
|
case PPC::ADDI8:
|
|
case PPC::ADDIC:
|
|
case PPC::ADDIC8:
|
|
case PPC::ADDICo:
|
|
case PPC::ADDIS:
|
|
case PPC::ADDIS8:
|
|
case PPC::LA:
|
|
case PPC::MULLI:
|
|
case PPC::SUBFIC:
|
|
case PPC::SUBFIC8: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: C
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= op & 65535U;
|
|
break;
|
|
}
|
|
case PPC::LI:
|
|
case PPC::LI8:
|
|
case PPC::LIS:
|
|
case PPC::LIS8: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= op & 65535U;
|
|
break;
|
|
}
|
|
case PPC::LBZ:
|
|
case PPC::LBZ8:
|
|
case PPC::LFD:
|
|
case PPC::LFS:
|
|
case PPC::LHA:
|
|
case PPC::LHA8:
|
|
case PPC::LHZ:
|
|
case PPC::LHZ8:
|
|
case PPC::LWZ:
|
|
case PPC::LWZ8:
|
|
case PPC::STB:
|
|
case PPC::STB8:
|
|
case PPC::STFD:
|
|
case PPC::STFS:
|
|
case PPC::STH:
|
|
case PPC::STH8:
|
|
case PPC::STW:
|
|
case PPC::STW8: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: C
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= op & 65535U;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::LBZU:
|
|
case PPC::LBZU8:
|
|
case PPC::LFDU:
|
|
case PPC::LFSU:
|
|
case PPC::LHAU:
|
|
case PPC::LHAU8:
|
|
case PPC::LHZU:
|
|
case PPC::LHZU8:
|
|
case PPC::LWZU:
|
|
case PPC::LWZU8: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: C
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= op & 65535U;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::STBU:
|
|
case PPC::STBU8:
|
|
case PPC::STFDU:
|
|
case PPC::STFSU:
|
|
case PPC::STHU:
|
|
case PPC::STHU8:
|
|
case PPC::STWU: {
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
// op: C
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= op & 65535U;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::ANDISo:
|
|
case PPC::ANDISo8:
|
|
case PPC::ANDIo:
|
|
case PPC::ANDIo8:
|
|
case PPC::ORI:
|
|
case PPC::ORI8:
|
|
case PPC::ORIS:
|
|
case PPC::ORIS8:
|
|
case PPC::XORI:
|
|
case PPC::XORI8:
|
|
case PPC::XORIS:
|
|
case PPC::XORIS8: {
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
// op: C
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= op & 65535U;
|
|
break;
|
|
}
|
|
case PPC::MCRF: {
|
|
// op: BF
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 7U) << 23;
|
|
// op: BFA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 7U) << 18;
|
|
break;
|
|
}
|
|
case PPC::FCMPUD:
|
|
case PPC::FCMPUS: {
|
|
// op: BF
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 7U) << 23;
|
|
// op: FRA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: FRB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::CMPDI:
|
|
case PPC::CMPLDI:
|
|
case PPC::CMPLWI:
|
|
case PPC::CMPWI: {
|
|
// op: BF
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 7U) << 23;
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: I
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= op & 65535U;
|
|
break;
|
|
}
|
|
case PPC::CMPD:
|
|
case PPC::CMPLD:
|
|
case PPC::CMPLW:
|
|
case PPC::CMPW: {
|
|
// op: BF
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 7U) << 23;
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::BCC: {
|
|
// op: BIBO
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
Value |= (op & 96U) << 11;
|
|
// op: CR
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 7U) << 18;
|
|
// op: BD
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 16383U) << 2;
|
|
break;
|
|
}
|
|
case PPC::BLR: {
|
|
// op: BIBO
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 4U) << 23;
|
|
Value |= (op & 8U) << 21;
|
|
Value |= (op & 16U) << 19;
|
|
Value |= (op & 32U) << 17;
|
|
Value |= (op & 64U) << 15;
|
|
Value |= (op & 3U) << 16;
|
|
// op: CR
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 1U) << 20;
|
|
Value |= (op & 2U) << 18;
|
|
Value |= (op & 4U) << 16;
|
|
break;
|
|
}
|
|
case PPC::CREQV:
|
|
case PPC::CROR: {
|
|
// op: CRD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: CRA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: CRB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::CRSET: {
|
|
// op: CRD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
Value |= (op & 31U) << 16;
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::MTFSF: {
|
|
// op: FM
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 255U) << 17;
|
|
// op: RT
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::MTFSB0:
|
|
case PPC::MTFSB1: {
|
|
// op: FM
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
break;
|
|
}
|
|
case PPC::FADD:
|
|
case PPC::FADDS:
|
|
case PPC::FADDrtz:
|
|
case PPC::FDIV:
|
|
case PPC::FDIVS:
|
|
case PPC::FSUB:
|
|
case PPC::FSUBS: {
|
|
// op: FRT
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: FRA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: FRB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::FMUL:
|
|
case PPC::FMULS: {
|
|
// op: FRT
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: FRA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: FRC
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 6;
|
|
break;
|
|
}
|
|
case PPC::FMADD:
|
|
case PPC::FMADDS:
|
|
case PPC::FMSUB:
|
|
case PPC::FMSUBS:
|
|
case PPC::FNMADD:
|
|
case PPC::FNMADDS:
|
|
case PPC::FNMSUB:
|
|
case PPC::FNMSUBS:
|
|
case PPC::FSELD:
|
|
case PPC::FSELS: {
|
|
// op: FRT
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: FRA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: FRC
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 6;
|
|
// op: FRB
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::MTCRF: {
|
|
// op: FXM
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 255U) << 12;
|
|
// op: ST
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
break;
|
|
}
|
|
case PPC::B:
|
|
case PPC::BL8_Darwin:
|
|
case PPC::BL8_ELF:
|
|
case PPC::BLA8_Darwin:
|
|
case PPC::BLA8_ELF:
|
|
case PPC::BLA_Darwin:
|
|
case PPC::BLA_SVR4:
|
|
case PPC::BL_Darwin:
|
|
case PPC::BL_SVR4:
|
|
case PPC::TAILB:
|
|
case PPC::TAILB8:
|
|
case PPC::TAILBA:
|
|
case PPC::TAILBA8: {
|
|
// op: LI
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 16777215U) << 2;
|
|
break;
|
|
}
|
|
case PPC::LDinto_toc: {
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::RLWINM:
|
|
case PPC::RLWINMo:
|
|
case PPC::RLWNM: {
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RS
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
// op: RB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
// op: MB
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 6;
|
|
// op: ME
|
|
op = getMachineOpValue(MI, MI.getOperand(4));
|
|
Value |= (op & 31U) << 1;
|
|
break;
|
|
}
|
|
case PPC::RLDCL:
|
|
case PPC::RLDICL:
|
|
case PPC::RLDICR: {
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RS
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
// op: SH
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
Value |= (op & 32U) >> 4;
|
|
// op: MBE
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 6;
|
|
Value |= op & 32U;
|
|
break;
|
|
}
|
|
case PPC::RLWIMI: {
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RS
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 21;
|
|
// op: RB
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 11;
|
|
// op: MB
|
|
op = getMachineOpValue(MI, MI.getOperand(4));
|
|
Value |= (op & 31U) << 6;
|
|
// op: ME
|
|
op = getMachineOpValue(MI, MI.getOperand(5));
|
|
Value |= (op & 31U) << 1;
|
|
break;
|
|
}
|
|
case PPC::RLDIMI: {
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RS
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 21;
|
|
// op: SH
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 11;
|
|
Value |= (op & 32U) >> 4;
|
|
// op: MBE
|
|
op = getMachineOpValue(MI, MI.getOperand(4));
|
|
Value |= (op & 31U) << 6;
|
|
Value |= op & 32U;
|
|
break;
|
|
}
|
|
case PPC::MFFS: {
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
break;
|
|
}
|
|
case PPC::LBZX:
|
|
case PPC::LBZX8:
|
|
case PPC::LDARX:
|
|
case PPC::LDX:
|
|
case PPC::LFDX:
|
|
case PPC::LFSX:
|
|
case PPC::LHAX:
|
|
case PPC::LHAX8:
|
|
case PPC::LHBRX:
|
|
case PPC::LHZX:
|
|
case PPC::LHZX8:
|
|
case PPC::LVEBX:
|
|
case PPC::LVEHX:
|
|
case PPC::LVEWX:
|
|
case PPC::LVSL:
|
|
case PPC::LVSR:
|
|
case PPC::LVX:
|
|
case PPC::LVXL:
|
|
case PPC::LWARX:
|
|
case PPC::LWAX:
|
|
case PPC::LWBRX:
|
|
case PPC::LWZX:
|
|
case PPC::LWZX8:
|
|
case PPC::STBX:
|
|
case PPC::STBX8:
|
|
case PPC::STDCX:
|
|
case PPC::STDUX:
|
|
case PPC::STDX:
|
|
case PPC::STDX_32:
|
|
case PPC::STFDX:
|
|
case PPC::STFIWX:
|
|
case PPC::STFSX:
|
|
case PPC::STHBRX:
|
|
case PPC::STHX:
|
|
case PPC::STHX8:
|
|
case PPC::STVEBX:
|
|
case PPC::STVEHX:
|
|
case PPC::STVEWX:
|
|
case PPC::STVX:
|
|
case PPC::STVXL:
|
|
case PPC::STWBRX:
|
|
case PPC::STWCX:
|
|
case PPC::STWUX:
|
|
case PPC::STWX:
|
|
case PPC::STWX8: {
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::FABSD:
|
|
case PPC::FABSS:
|
|
case PPC::FCFID:
|
|
case PPC::FCTIDZ:
|
|
case PPC::FCTIWZ:
|
|
case PPC::FMR:
|
|
case PPC::FNABSD:
|
|
case PPC::FNABSS:
|
|
case PPC::FNEGD:
|
|
case PPC::FNEGS:
|
|
case PPC::FRSP:
|
|
case PPC::FSQRT:
|
|
case PPC::FSQRTS: {
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::LD:
|
|
case PPC::LDtoc:
|
|
case PPC::LWA:
|
|
case PPC::STD:
|
|
case PPC::STD_32: {
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: DS
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 16383U) << 2;
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::LDU: {
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: DS
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 16383U) << 2;
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::STDU: {
|
|
// op: RST
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 21;
|
|
// op: DS
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 16383U) << 2;
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::MFCRpseud:
|
|
case PPC::MFCTR:
|
|
case PPC::MFCTR8:
|
|
case PPC::MFLR:
|
|
case PPC::MFLR8:
|
|
case PPC::MFVRSAVE:
|
|
case PPC::MTCTR:
|
|
case PPC::MTCTR8:
|
|
case PPC::MTLR:
|
|
case PPC::MTLR8:
|
|
case PPC::MTVRSAVE: {
|
|
// op: RT
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
break;
|
|
}
|
|
case PPC::ADDME:
|
|
case PPC::ADDME8:
|
|
case PPC::ADDZE:
|
|
case PPC::ADDZE8:
|
|
case PPC::NEG:
|
|
case PPC::NEG8:
|
|
case PPC::SUBFME:
|
|
case PPC::SUBFME8:
|
|
case PPC::SUBFZE:
|
|
case PPC::SUBFZE8: {
|
|
// op: RT
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::ADD4:
|
|
case PPC::ADD8:
|
|
case PPC::ADDC:
|
|
case PPC::ADDC8:
|
|
case PPC::ADDE:
|
|
case PPC::ADDE8:
|
|
case PPC::DIVD:
|
|
case PPC::DIVDU:
|
|
case PPC::DIVW:
|
|
case PPC::DIVWU:
|
|
case PPC::MULHD:
|
|
case PPC::MULHDU:
|
|
case PPC::MULHW:
|
|
case PPC::MULHWU:
|
|
case PPC::MULLD:
|
|
case PPC::MULLW:
|
|
case PPC::SUBF:
|
|
case PPC::SUBF8:
|
|
case PPC::SUBFC:
|
|
case PPC::SUBFC8:
|
|
case PPC::SUBFE:
|
|
case PPC::SUBFE8: {
|
|
// op: RT
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: RA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: RB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::MFOCRF: {
|
|
// op: ST
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: FXM
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 255U) << 12;
|
|
break;
|
|
}
|
|
case PPC::DSS:
|
|
case PPC::DSSALL:
|
|
case PPC::DST:
|
|
case PPC::DST64:
|
|
case PPC::DSTST:
|
|
case PPC::DSTST64:
|
|
case PPC::DSTSTT:
|
|
case PPC::DSTSTT64:
|
|
case PPC::DSTT:
|
|
case PPC::DSTT64: {
|
|
// op: T
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 1U) << 25;
|
|
// op: STRM
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 3U) << 21;
|
|
// op: A
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 16;
|
|
// op: B
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::MTVSCR: {
|
|
// op: VB
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::MFVSCR: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
break;
|
|
}
|
|
case PPC::VSPLTISB:
|
|
case PPC::VSPLTISH:
|
|
case PPC::VSPLTISW: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: IMM
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
break;
|
|
}
|
|
case PPC::VADDCUW:
|
|
case PPC::VADDFP:
|
|
case PPC::VADDSBS:
|
|
case PPC::VADDSHS:
|
|
case PPC::VADDSWS:
|
|
case PPC::VADDUBM:
|
|
case PPC::VADDUBS:
|
|
case PPC::VADDUHM:
|
|
case PPC::VADDUHS:
|
|
case PPC::VADDUWM:
|
|
case PPC::VADDUWS:
|
|
case PPC::VAND:
|
|
case PPC::VANDC:
|
|
case PPC::VAVGSB:
|
|
case PPC::VAVGSH:
|
|
case PPC::VAVGSW:
|
|
case PPC::VAVGUB:
|
|
case PPC::VAVGUH:
|
|
case PPC::VAVGUW:
|
|
case PPC::VCFSX:
|
|
case PPC::VCFUX:
|
|
case PPC::VCMPBFP:
|
|
case PPC::VCMPBFPo:
|
|
case PPC::VCMPEQFP:
|
|
case PPC::VCMPEQFPo:
|
|
case PPC::VCMPEQUB:
|
|
case PPC::VCMPEQUBo:
|
|
case PPC::VCMPEQUH:
|
|
case PPC::VCMPEQUHo:
|
|
case PPC::VCMPEQUW:
|
|
case PPC::VCMPEQUWo:
|
|
case PPC::VCMPGEFP:
|
|
case PPC::VCMPGEFPo:
|
|
case PPC::VCMPGTFP:
|
|
case PPC::VCMPGTFPo:
|
|
case PPC::VCMPGTSB:
|
|
case PPC::VCMPGTSBo:
|
|
case PPC::VCMPGTSH:
|
|
case PPC::VCMPGTSHo:
|
|
case PPC::VCMPGTSW:
|
|
case PPC::VCMPGTSWo:
|
|
case PPC::VCMPGTUB:
|
|
case PPC::VCMPGTUBo:
|
|
case PPC::VCMPGTUH:
|
|
case PPC::VCMPGTUHo:
|
|
case PPC::VCMPGTUW:
|
|
case PPC::VCMPGTUWo:
|
|
case PPC::VCTSXS:
|
|
case PPC::VCTUXS:
|
|
case PPC::VMAXFP:
|
|
case PPC::VMAXSB:
|
|
case PPC::VMAXSH:
|
|
case PPC::VMAXSW:
|
|
case PPC::VMAXUB:
|
|
case PPC::VMAXUH:
|
|
case PPC::VMAXUW:
|
|
case PPC::VMINFP:
|
|
case PPC::VMINSB:
|
|
case PPC::VMINSH:
|
|
case PPC::VMINSW:
|
|
case PPC::VMINUB:
|
|
case PPC::VMINUH:
|
|
case PPC::VMINUW:
|
|
case PPC::VMRGHB:
|
|
case PPC::VMRGHH:
|
|
case PPC::VMRGHW:
|
|
case PPC::VMRGLB:
|
|
case PPC::VMRGLH:
|
|
case PPC::VMRGLW:
|
|
case PPC::VMULESB:
|
|
case PPC::VMULESH:
|
|
case PPC::VMULEUB:
|
|
case PPC::VMULEUH:
|
|
case PPC::VMULOSB:
|
|
case PPC::VMULOSH:
|
|
case PPC::VMULOUB:
|
|
case PPC::VMULOUH:
|
|
case PPC::VNOR:
|
|
case PPC::VOR:
|
|
case PPC::VPKPX:
|
|
case PPC::VPKSHSS:
|
|
case PPC::VPKSHUS:
|
|
case PPC::VPKSWSS:
|
|
case PPC::VPKSWUS:
|
|
case PPC::VPKUHUM:
|
|
case PPC::VPKUHUS:
|
|
case PPC::VPKUWUM:
|
|
case PPC::VPKUWUS:
|
|
case PPC::VRLB:
|
|
case PPC::VRLH:
|
|
case PPC::VRLW:
|
|
case PPC::VSL:
|
|
case PPC::VSLB:
|
|
case PPC::VSLH:
|
|
case PPC::VSLO:
|
|
case PPC::VSLW:
|
|
case PPC::VSPLTB:
|
|
case PPC::VSPLTH:
|
|
case PPC::VSPLTW:
|
|
case PPC::VSR:
|
|
case PPC::VSRAB:
|
|
case PPC::VSRAH:
|
|
case PPC::VSRAW:
|
|
case PPC::VSRB:
|
|
case PPC::VSRH:
|
|
case PPC::VSRO:
|
|
case PPC::VSRW:
|
|
case PPC::VSUBCUW:
|
|
case PPC::VSUBFP:
|
|
case PPC::VSUBSBS:
|
|
case PPC::VSUBSHS:
|
|
case PPC::VSUBSWS:
|
|
case PPC::VSUBUBM:
|
|
case PPC::VSUBUBS:
|
|
case PPC::VSUBUHM:
|
|
case PPC::VSUBUHS:
|
|
case PPC::VSUBUWM:
|
|
case PPC::VSUBUWS:
|
|
case PPC::VSUM2SWS:
|
|
case PPC::VSUM4SBS:
|
|
case PPC::VSUM4SHS:
|
|
case PPC::VSUM4UBS:
|
|
case PPC::VSUMSWS:
|
|
case PPC::VXOR: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: VA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: VB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::VSLDOI: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: VA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: VB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
// op: SH
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 15U) << 6;
|
|
break;
|
|
}
|
|
case PPC::VMHADDSHS:
|
|
case PPC::VMHRADDSHS:
|
|
case PPC::VMLADDUHM:
|
|
case PPC::VMSUMMBM:
|
|
case PPC::VMSUMSHM:
|
|
case PPC::VMSUMSHS:
|
|
case PPC::VMSUMUBM:
|
|
case PPC::VMSUMUHM:
|
|
case PPC::VMSUMUHS:
|
|
case PPC::VPERM:
|
|
case PPC::VSEL: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: VA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: VB
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 11;
|
|
// op: VC
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 6;
|
|
break;
|
|
}
|
|
case PPC::VMADDFP:
|
|
case PPC::VNMSUBFP: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: VA
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 16;
|
|
// op: VC
|
|
op = getMachineOpValue(MI, MI.getOperand(2));
|
|
Value |= (op & 31U) << 6;
|
|
// op: VB
|
|
op = getMachineOpValue(MI, MI.getOperand(3));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::VEXPTEFP:
|
|
case PPC::VLOGEFP:
|
|
case PPC::VREFP:
|
|
case PPC::VRFIM:
|
|
case PPC::VRFIN:
|
|
case PPC::VRFIP:
|
|
case PPC::VRFIZ:
|
|
case PPC::VRSQRTEFP:
|
|
case PPC::VUPKHPX:
|
|
case PPC::VUPKHSB:
|
|
case PPC::VUPKHSH:
|
|
case PPC::VUPKLPX:
|
|
case PPC::VUPKLSB:
|
|
case PPC::VUPKLSH: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
// op: VB
|
|
op = getMachineOpValue(MI, MI.getOperand(1));
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
case PPC::V_SET0: {
|
|
// op: VD
|
|
op = getMachineOpValue(MI, MI.getOperand(0));
|
|
Value |= (op & 31U) << 21;
|
|
Value |= (op & 31U) << 16;
|
|
Value |= (op & 31U) << 11;
|
|
break;
|
|
}
|
|
default:
|
|
std::string msg;
|
|
raw_string_ostream Msg(msg);
|
|
Msg << "Not supported instr: " << MI;
|
|
report_fatal_error(Msg.str());
|
|
}
|
|
return Value;
|
|
}
|
|
|