blob: 0827e528a80f46056934067eae06ad566f00ce1c [file] [log] [blame]
//===--- P10InstrResources.td - P10 Scheduling Definitions -*- tablegen -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// Automatically generated file, do not edit!
//
// This file defines instruction data for SchedModel of the POWER10 processor.
//
//===----------------------------------------------------------------------===//
// 22 Cycles Binary Floating Point operations, 2 input operands
def : InstRW<[P10W_BF_22C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
(instrs
FDIVS,
XSDIVSP
)>;
// 2-way crack instructions
// 22 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_BF_22C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
FDIVS_rec
)>;
// 24 Cycles Binary Floating Point operations, 2 input operands
def : InstRW<[P10W_BF_24C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
(instrs
XVDIVSP
)>;
// 26 Cycles Binary Floating Point operations, 1 input operands
def : InstRW<[P10W_BF_26C, P10W_DISP_ANY, P10BF_Read],
(instrs
FSQRTS,
XSSQRTSP
)>;
// 2-way crack instructions
// 26 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_BF_26C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
FSQRTS_rec
)>;
// 27 Cycles Binary Floating Point operations, 1 input operands
def : InstRW<[P10W_BF_27C, P10W_DISP_ANY, P10BF_Read],
(instrs
XVSQRTSP
)>;
// 27 Cycles Binary Floating Point operations, 2 input operands
def : InstRW<[P10W_BF_27C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
(instrs
FDIV,
XSDIVDP,
XVDIVDP
)>;
// 2-way crack instructions
// 27 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_BF_27C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
FDIV_rec
)>;
// 36 Cycles Binary Floating Point operations, 1 input operands
def : InstRW<[P10W_BF_36C, P10W_DISP_ANY, P10BF_Read],
(instrs
FSQRT,
XSSQRTDP,
XVSQRTDP
)>;
// 2-way crack instructions
// 36 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_BF_36C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
FSQRT_rec
)>;
// 7 Cycles Binary Floating Point operations, 1 input operands
def : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read],
(instrs
FCFID,
FCFIDS,
FCFIDU,
FCFIDUS,
FCTID,
FCTIDU,
FCTIDUZ,
FCTIDZ,
FCTIW,
FCTIWU,
FCTIWUZ,
FCTIWZ,
FRE,
FRES,
FRIMD, FRIMS,
FRIND, FRINS,
FRIPD, FRIPS,
FRIZD, FRIZS,
FRSP,
FRSQRTE,
FRSQRTES,
VCFSX, VCFSX_0,
VCFUX, VCFUX_0,
VCTSXS, VCTSXS_0,
VCTUXS, VCTUXS_0,
VLOGEFP,
VREFP,
VRFIM,
VRFIN,
VRFIP,
VRFIZ,
VRSQRTEFP,
XSCVDPHP,
XSCVDPSP,
XSCVDPSPN,
XSCVDPSXDS, XSCVDPSXDSs,
XSCVDPSXWS, XSCVDPSXWSs,
XSCVDPUXDS, XSCVDPUXDSs,
XSCVDPUXWS, XSCVDPUXWSs,
XSCVSPDP,
XSCVSXDDP,
XSCVSXDSP,
XSCVUXDDP,
XSCVUXDSP,
XSRDPI,
XSRDPIC,
XSRDPIM,
XSRDPIP,
XSRDPIZ,
XSREDP,
XSRESP,
XSRSP,
XSRSQRTEDP,
XSRSQRTESP,
XVCVDPSP,
XVCVDPSXDS,
XVCVDPSXWS,
XVCVDPUXDS,
XVCVDPUXWS,
XVCVSPBF16,
XVCVSPDP,
XVCVSPHP,
XVCVSPSXDS,
XVCVSPSXWS,
XVCVSPUXDS,
XVCVSPUXWS,
XVCVSXDDP,
XVCVSXDSP,
XVCVSXWDP,
XVCVSXWSP,
XVCVUXDDP,
XVCVUXDSP,
XVCVUXWDP,
XVCVUXWSP,
XVRDPI,
XVRDPIC,
XVRDPIM,
XVRDPIP,
XVRDPIZ,
XVREDP,
XVRESP,
XVRSPI,
XVRSPIC,
XVRSPIM,
XVRSPIP,
XVRSPIZ,
XVRSQRTEDP,
XVRSQRTESP
)>;
// 7 Cycles Binary Floating Point operations, 2 input operands
def : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
(instrs
FADD,
FADDS,
FMUL,
FMULS,
FSUB,
FSUBS,
VADDFP,
VSUBFP,
XSADDDP,
XSADDSP,
XSMULDP,
XSMULSP,
XSSUBDP,
XSSUBSP,
XVADDDP,
XVADDSP,
XVMULDP,
XVMULSP,
XVSUBDP,
XVSUBSP
)>;
// 7 Cycles Binary Floating Point operations, 3 input operands
def : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read, P10BF_Read, P10BF_Read],
(instrs
FMADD,
FMADDS,
FMSUB,
FMSUBS,
FNMADD,
FNMADDS,
FNMSUB,
FNMSUBS,
FSELD, FSELS,
VMADDFP,
VNMSUBFP,
XSMADDADP,
XSMADDASP,
XSMADDMDP,
XSMADDMSP,
XSMSUBADP,
XSMSUBASP,
XSMSUBMDP,
XSMSUBMSP,
XSNMADDADP,
XSNMADDASP,
XSNMADDMDP,
XSNMADDMSP,
XSNMSUBADP,
XSNMSUBASP,
XSNMSUBMDP,
XSNMSUBMSP,
XVMADDADP,
XVMADDASP,
XVMADDMDP,
XVMADDMSP,
XVMSUBADP,
XVMSUBASP,
XVMSUBMDP,
XVMSUBMSP,
XVNMADDADP,
XVNMADDASP,
XVNMADDMDP,
XVNMADDMSP,
XVNMSUBADP,
XVNMSUBASP,
XVNMSUBMDP,
XVNMSUBMSP
)>;
// 2-way crack instructions
// 7 Cycles Binary Floating Point operations, and 7 Cycles Binary Floating Point operations, 1 input operands
def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_BF_7C, P10W_DISP_ANY, P10BF_Read],
(instrs
VEXPTEFP
)>;
// 2-way crack instructions
// 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
FADD_rec,
FADDS_rec,
FMUL_rec,
FMULS_rec,
FSUB_rec,
FSUBS_rec
)>;
// 2-way crack instructions
// 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
FCFID_rec,
FCFIDS_rec,
FCFIDU_rec,
FCFIDUS_rec,
FCTID_rec,
FCTIDU_rec,
FCTIDUZ_rec,
FCTIDZ_rec,
FCTIW_rec,
FCTIWU_rec,
FCTIWUZ_rec,
FCTIWZ_rec,
FRE_rec,
FRES_rec,
FRIMD_rec, FRIMS_rec,
FRIND_rec, FRINS_rec,
FRIPD_rec, FRIPS_rec,
FRIZD_rec, FRIZS_rec,
FRSP_rec,
FRSQRTE_rec,
FRSQRTES_rec
)>;
// 2-way crack instructions
// 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 3 input operands
def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
FMADD_rec,
FMADDS_rec,
FMSUB_rec,
FMSUBS_rec,
FNMADD_rec,
FNMADDS_rec,
FNMSUB_rec,
FNMSUBS_rec,
FSELD_rec, FSELS_rec
)>;
// 2 Cycles Branch operations, 1 input operands
def : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read],
(instrs
B, BCC, BCCA, BCCCTR, BCCCTR8, BCCCTRL, BCCCTRL8, BCCL, BCCLA, BCCLR, BCCLRL, CTRL_DEP, TAILB, TAILB8,
BA, TAILBA, TAILBA8,
BCCTR, BCCTR8, BCCTR8n, BCCTRn, gBCCTR,
BCCTRL, BCCTRL8, BCCTRL8n, BCCTRLn, gBCCTRL,
BCLR, BCLRn, BDNZLR, BDNZLR8, BDNZLRm, BDNZLRp, BDZLR, BDZLR8, BDZLRm, BDZLRp, gBCLR,
BCLRL, BCLRLn, BDNZLRL, BDNZLRLm, BDNZLRLp, BDZLRL, BDZLRLm, BDZLRLp, gBCLRL,
BL, BL8, BL8_NOP, BL8_NOP_RM, BL8_NOP_TLS, BL8_NOTOC, BL8_NOTOC_RM, BL8_NOTOC_TLS, BL8_RM, BL8_TLS, BL8_TLS_, BLR, BLR8, BLRL, BL_NOP, BL_NOP_RM, BL_RM, BL_TLS,
BLA, BLA8, BLA8_NOP, BLA8_NOP_RM, BLA8_RM, BLA_RM
)>;
// 2 Cycles Branch operations, 2 input operands
def : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read, P10BR_Read],
(instrs
BC, BCTR, BCTR8, BCTRL, BCTRL8, BCTRL8_LDinto_toc, BCTRL8_LDinto_toc_RM, BCTRL8_RM, BCTRL_LWZinto_toc, BCTRL_LWZinto_toc_RM, BCTRL_RM, BCn, BDNZ, BDNZ8, BDNZm, BDNZp, BDZ, BDZ8, BDZm, BDZp, TAILBCTR, TAILBCTR8, gBC, gBCat,
BDNZA, BDNZAm, BDNZAp, BDZA, BDZAm, BDZAp, gBCA, gBCAat,
BCL, BCLalways, BCLn, BDNZL, BDNZLm, BDNZLp, BDZL, BDZLm, BDZLp, gBCL, gBCLat,
BDNZLA, BDNZLAm, BDNZLAp, BDZLA, BDZLAm, BDZLAp, gBCLA, gBCLAat
)>;
// 7 Cycles Crypto operations, 1 input operands
def : InstRW<[P10W_CY_7C, P10W_DISP_ANY, P10CY_Read],
(instrs
VGNB,
VSBOX
)>;
// 7 Cycles Crypto operations, 2 input operands
def : InstRW<[P10W_CY_7C, P10W_DISP_ANY, P10CY_Read, P10CY_Read],
(instrs
CFUGED,
CNTLZDM,
CNTTZDM,
PDEPD,
PEXTD,
VCFUGED,
VCIPHER,
VCIPHERLAST,
VCLZDM,
VCTZDM,
VNCIPHER,
VNCIPHERLAST,
VPDEPD,
VPEXTD,
VPMSUMB,
VPMSUMD,
VPMSUMH,
VPMSUMW
)>;
// 13 Cycles Decimal Floating Point operations, 1 input operands
def : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read],
(instrs
XSCVDPQP,
XSCVQPDP,
XSCVQPDPO,
XSCVQPSDZ,
XSCVQPSQZ,
XSCVQPSWZ,
XSCVQPUDZ,
XSCVQPUQZ,
XSCVQPUWZ,
XSCVSDQP,
XSCVSQQP,
XSCVUDQP,
XSCVUQQP,
XSRQPI,
XSRQPIX,
XSRQPXP
)>;
// 13 Cycles Decimal Floating Point operations, 2 input operands
def : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
(instrs
BCDSR_rec,
XSADDQP,
XSADDQPO,
XSSUBQP,
XSSUBQPO
)>;
// 2-way crack instructions
// 13 Cycles Decimal Floating Point operations, and 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_DF_13C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY],
(instrs
HASHST, HASHST8,
HASHSTP, HASHSTP8
)>;
// 24 Cycles Decimal Floating Point operations, 1 input operands
def : InstRW<[P10W_DF_24C, P10W_DISP_ANY, P10DF_Read],
(instrs
BCDCTSQ_rec
)>;
// 25 Cycles Decimal Floating Point operations, 2 input operands
def : InstRW<[P10W_DF_25C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
(instrs
XSMULQP,
XSMULQPO
)>;
// 25 Cycles Decimal Floating Point operations, 3 input operands
def : InstRW<[P10W_DF_25C, P10W_DISP_ANY, P10DF_Read, P10DF_Read, P10DF_Read],
(instrs
XSMADDQP,
XSMADDQPO,
XSMSUBQP,
XSMSUBQPO,
XSNMADDQP,
XSNMADDQPO,
XSNMSUBQP,
XSNMSUBQPO
)>;
// 38 Cycles Decimal Floating Point operations, 1 input operands
def : InstRW<[P10W_DF_38C, P10W_DISP_ANY, P10DF_Read],
(instrs
BCDCFSQ_rec
)>;
// 59 Cycles Decimal Floating Point operations, 2 input operands
def : InstRW<[P10W_DF_59C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
(instrs
XSDIVQP,
XSDIVQPO
)>;
// 61 Cycles Decimal Floating Point operations, 2 input operands
def : InstRW<[P10W_DF_61C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
(instrs
VDIVESQ,
VDIVEUQ,
VDIVSQ,
VDIVUQ
)>;
// 68 Cycles Decimal Floating Point operations, 2 input operands
def : InstRW<[P10W_DF_68C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
(instrs
VMODSQ,
VMODUQ
)>;
// 77 Cycles Decimal Floating Point operations, 1 input operands
def : InstRW<[P10W_DF_77C, P10W_DISP_ANY, P10DF_Read],
(instrs
XSSQRTQP,
XSSQRTQPO
)>;
// 20 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_20C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
DIVW,
DIVWO,
DIVWU,
DIVWUO,
MODSW
)>;
// 2-way crack instructions
// 20 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_DV_20C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
DIVW_rec,
DIVWO_rec,
DIVWU_rec,
DIVWUO_rec
)>;
// 25 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_25C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
DIVD,
DIVDO,
DIVDU,
DIVDUO,
DIVWE,
DIVWEO,
DIVWEU,
DIVWEUO
)>;
// 2-way crack instructions
// 25 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_DV_25C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
DIVD_rec,
DIVDO_rec,
DIVDU_rec,
DIVDUO_rec,
DIVWE_rec,
DIVWEO_rec,
DIVWEU_rec,
DIVWEUO_rec
)>;
// 27 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_27C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
MODSD,
MODUD,
MODUW
)>;
// 41 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_41C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
DIVDE,
DIVDEO,
DIVDEU,
DIVDEUO
)>;
// 2-way crack instructions
// 41 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_DV_41C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
DIVDE_rec,
DIVDEO_rec,
DIVDEU_rec,
DIVDEUO_rec
)>;
// 43 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_43C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
VDIVSD,
VDIVUD
)>;
// 47 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_47C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
VMODSD,
VMODUD
)>;
// 54 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_54C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
VDIVSW,
VDIVUW
)>;
// 60 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_60C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
VMODSW,
VMODUW
)>;
// 75 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_75C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
VDIVESD,
VDIVEUD
)>;
// 83 Cycles Scalar Fixed-Point Divide operations, 2 input operands
def : InstRW<[P10W_DV_83C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
(instrs
VDIVESW,
VDIVEUW
)>;
// 5 Cycles Fixed-Point and BCD operations, 1 input operands
def : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read],
(instrs
BCDCFN_rec,
BCDCFZ_rec,
BCDCTN_rec,
BCDCTZ_rec,
BCDSETSGN_rec,
VMUL10CUQ,
VMUL10UQ,
XSTSTDCQP,
XSXSIGQP,
XXGENPCVBM
)>;
// 5 Cycles Fixed-Point and BCD operations, 2 input operands
def : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read, P10DX_Read],
(instrs
BCDADD_rec,
BCDCPSGN_rec,
BCDS_rec,
BCDSUB_rec,
BCDTRUNC_rec,
BCDUS_rec,
BCDUTRUNC_rec,
VADDCUQ,
VADDUQM,
VMUL10ECUQ,
VMUL10EUQ,
VSUBCUQ,
VSUBUQM,
XSCMPEQQP,
XSCMPEXPQP,
XSCMPGEQP,
XSCMPGTQP,
XSCMPOQP,
XSCMPUQP,
XSMAXCQP,
XSMINCQP
)>;
// 5 Cycles Fixed-Point and BCD operations, 3 input operands
def : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read, P10DX_Read, P10DX_Read],
(instrs
VADDECUQ,
VADDEUQM,
VSUBECUQ,
VSUBEUQM
)>;
// 4 Cycles ALU2 operations, 0 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY],
(instrs
MTVSRBMI
)>;
// 4 Cycles ALU2 operations, 1 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read],
(instrs
CBCDTD, CBCDTD8,
CDTBCD, CDTBCD8,
CNTLZD,
CNTLZD_rec,
CNTLZW, CNTLZW8,
CNTLZW8_rec, CNTLZW_rec,
CNTTZD,
CNTTZD_rec,
CNTTZW, CNTTZW8,
CNTTZW8_rec, CNTTZW_rec,
EXTSWSLI_32_64_rec, EXTSWSLI_rec,
FTSQRT,
MTVSRBM,
MTVSRDM,
MTVSRHM,
MTVSRQM,
MTVSRWM,
POPCNTB, POPCNTB8,
POPCNTD,
POPCNTW,
RLDIC_rec,
RLDICL_32_rec, RLDICL_rec,
RLDICR_rec,
RLWINM8_rec, RLWINM_rec,
VCLZB,
VCLZD,
VCLZH,
VCLZW,
VCNTMBB,
VCNTMBD,
VCNTMBH,
VCNTMBW,
VCTZB,
VCTZD,
VCTZH,
VCTZW,
VEXPANDBM,
VEXPANDDM,
VEXPANDHM,
VEXPANDQM,
VEXPANDWM,
VEXTRACTBM,
VEXTRACTDM,
VEXTRACTHM,
VEXTRACTQM,
VEXTRACTWM,
VPOPCNTB,
VPOPCNTD,
VPOPCNTH,
VPOPCNTW,
VPRTYBD,
VPRTYBW,
VSHASIGMAD,
VSHASIGMAW,
XSCVHPDP,
XSCVSPDPN,
XSTSQRTDP,
XSTSTDCDP,
XSTSTDCSP,
XVCVHPSP,
XVTLSBB,
XVTSQRTDP,
XVTSQRTSP,
XVTSTDCDP,
XVTSTDCSP
)>;
// 4 Cycles ALU2 operations, 2 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
(instrs
CMPEQB,
CMPRB, CMPRB8,
FCMPOD, FCMPOS,
FCMPUD, FCMPUS,
FTDIV,
RLDCL_rec,
RLDCR_rec,
RLDIMI_rec,
RLWIMI8_rec, RLWIMI_rec,
RLWNM8_rec, RLWNM_rec,
SLD_rec,
SLW8_rec, SLW_rec,
SRD_rec,
SRW8_rec, SRW_rec,
TDI,
TWI,
VABSDUB,
VABSDUH,
VABSDUW,
VADDCUW,
VADDSBS,
VADDSHS,
VADDSWS,
VADDUBS,
VADDUHS,
VADDUWS,
VAVGSB,
VAVGSH,
VAVGSW,
VAVGUB,
VAVGUH,
VAVGUW,
VCMPBFP,
VCMPBFP_rec,
VCMPEQFP,
VCMPEQFP_rec,
VCMPEQUB_rec,
VCMPEQUD_rec,
VCMPEQUH_rec,
VCMPEQUQ,
VCMPEQUQ_rec,
VCMPEQUW_rec,
VCMPGEFP,
VCMPGEFP_rec,
VCMPGTFP,
VCMPGTFP_rec,
VCMPGTSB_rec,
VCMPGTSD_rec,
VCMPGTSH_rec,
VCMPGTSQ,
VCMPGTSQ_rec,
VCMPGTSW_rec,
VCMPGTUB_rec,
VCMPGTUD_rec,
VCMPGTUH_rec,
VCMPGTUQ,
VCMPGTUQ_rec,
VCMPGTUW_rec,
VCMPNEB_rec,
VCMPNEH_rec,
VCMPNEW_rec,
VCMPNEZB_rec,
VCMPNEZH_rec,
VCMPNEZW_rec,
VCMPSQ,
VCMPUQ,
VMAXFP,
VMINFP,
VSUBCUW,
VSUBSBS,
VSUBSHS,
VSUBSWS,
VSUBUBS,
VSUBUHS,
VSUBUWS,
XSCMPEQDP,
XSCMPEXPDP,
XSCMPGEDP,
XSCMPGTDP,
XSCMPODP,
XSCMPUDP,
XSMAXCDP,
XSMAXDP,
XSMAXJDP,
XSMINCDP,
XSMINDP,
XSMINJDP,
XSTDIVDP,
XVCMPEQDP,
XVCMPEQDP_rec,
XVCMPEQSP,
XVCMPEQSP_rec,
XVCMPGEDP,
XVCMPGEDP_rec,
XVCMPGESP,
XVCMPGESP_rec,
XVCMPGTDP,
XVCMPGTDP_rec,
XVCMPGTSP,
XVCMPGTSP_rec,
XVMAXDP,
XVMAXSP,
XVMINDP,
XVMINSP,
XVTDIVDP,
XVTDIVSP
)>;
// 4 Cycles ALU2 operations, 3 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read],
(instrs
TD,
TRAP, TW
)>;
// Single crack instructions
// 4 Cycles ALU2 operations, 1 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read],
(instrs
SRADI_rec,
SRAWI_rec,
TABORTDCI,
TABORTWCI
)>;
// Single crack instructions
// 4 Cycles ALU2 operations, 2 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
(instrs
SRAD_rec,
SRAW_rec,
TABORTDC,
TABORTWC
)>;
// 2-way crack instructions
// 4 Cycles ALU2 operations, and 4 Cycles Permute operations, 2 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
(instrs
VRLQ,
VRLQNM,
VSLQ,
VSRAQ,
VSRQ
)>;
// 2-way crack instructions
// 4 Cycles ALU2 operations, and 4 Cycles Permute operations, 3 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
(instrs
VRLQMI
)>;
// 2-way crack instructions
// 4 Cycles ALU2 operations, and 4 Cycles ALU2 operations, 0 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_PAIR, P10W_F2_4C],
(instrs
MFCR, MFCR8
)>;
// 2 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_FX_2C, P10W_DISP_ANY, P10FX_Read],
(instrs
MTCTR, MTCTR8, MTCTR8loop, MTCTRloop,
MTLR, MTLR8
)>;
// 3 Cycles ALU operations, 0 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY],
(instrs
DSS, DSSALL,
MCRXRX,
MFCTR, MFCTR8,
MFLR, MFLR8,
WAIT
)>;
// 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read],
(instrs
ADDI, ADDI8, ADDIdtprelL32, ADDItlsldLADDR32, ADDItocL, LI, LI8,
ADDIC, ADDIC8,
ADDIS, ADDIS8, ADDISdtprelHA32, ADDIStocHA, ADDIStocHA8, LIS, LIS8,
ADDME, ADDME8,
ADDME8O, ADDMEO,
ADDZE, ADDZE8,
ADDZE8O, ADDZEO,
ANDI8_rec, ANDI_rec,
ANDIS8_rec, ANDIS_rec,
CMPDI, CMPWI,
CMPLDI, CMPLWI,
EXTSB, EXTSB8, EXTSB8_32_64,
EXTSB8_rec, EXTSB_rec,
EXTSH, EXTSH8, EXTSH8_32_64,
EXTSH8_rec, EXTSH_rec,
EXTSW, EXTSW_32, EXTSW_32_64,
EXTSW_32_64_rec, EXTSW_rec,
EXTSWSLI, EXTSWSLI_32_64,
FABSD, FABSS,
FMR,
FNABSD, FNABSS,
FNEGD, FNEGS,
MCRF,
MFOCRF, MFOCRF8,
MFVRD, MFVSRD,
MFVRWZ, MFVSRWZ,
MTOCRF, MTOCRF8,
MTVRD, MTVSRD,
MTVRWA, MTVSRWA,
MTVRWZ, MTVSRWZ,
NEG, NEG8,
NEG8_rec, NEG_rec,
NEG8O, NEGO,
NOP, NOP_GT_PWR6, NOP_GT_PWR7, ORI, ORI8,
ORIS, ORIS8,
RLDIC,
RLDICL, RLDICL_32, RLDICL_32_64,
RLDICR, RLDICR_32,
RLWINM, RLWINM8,
SETB, SETB8,
SETBC, SETBC8,
SETBCR, SETBCR8,
SETNBC, SETNBC8,
SETNBCR, SETNBCR8,
SRADI, SRADI_32,
SRAWI,
SUBFIC, SUBFIC8,
SUBFME, SUBFME8,
SUBFME8O, SUBFMEO,
SUBFZE, SUBFZE8,
SUBFZE8O, SUBFZEO,
VEXTSB2D, VEXTSB2Ds,
VEXTSB2W, VEXTSB2Ws,
VEXTSD2Q,
VEXTSH2D, VEXTSH2Ds,
VEXTSH2W, VEXTSH2Ws,
VEXTSW2D, VEXTSW2Ds,
VNEGD,
VNEGW,
XORI, XORI8,
XORIS, XORIS8,
XSABSDP,
XSABSQP,
XSNABSDP, XSNABSDPs,
XSNABSQP,
XSNEGDP,
XSNEGQP,
XSXEXPDP,
XSXEXPQP,
XSXSIGDP,
XVABSDP,
XVABSSP,
XVNABSDP,
XVNABSSP,
XVNEGDP,
XVNEGSP,
XVXEXPDP,
XVXEXPSP,
XVXSIGDP,
XVXSIGSP
)>;
// 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
(instrs
ADD4, ADD4TLS, ADD8, ADD8TLS, ADD8TLS_,
ADD4_rec, ADD8_rec,
ADDE, ADDE8,
ADDE8O, ADDEO,
ADDEX, ADDEX8,
ADD4O, ADD8O,
AND, AND8,
AND8_rec, AND_rec,
ANDC, ANDC8,
ANDC8_rec, ANDC_rec,
CMPD, CMPW,
CMPB, CMPB8,
CMPLD, CMPLW,
CRAND,
CRANDC,
CR6SET, CREQV, CRSET,
CRNAND,
CRNOR,
CROR,
CRORC,
CR6UNSET, CRUNSET, CRXOR,
DST, DST64, DSTT, DSTT64,
DSTST, DSTST64, DSTSTT, DSTSTT64,
EQV, EQV8,
EQV8_rec, EQV_rec,
FCPSGND, FCPSGNS,
NAND, NAND8,
NAND8_rec, NAND_rec,
NOR, NOR8,
NOR8_rec, NOR_rec,
COPY, OR, OR8,
OR8_rec, OR_rec,
ORC, ORC8,
ORC8_rec, ORC_rec,
RLDCL,
RLDCR,
RLDIMI,
RLWIMI, RLWIMI8,
RLWNM, RLWNM8,
SLD,
SLW, SLW8,
SRAD,
SRAW,
SRD,
SRW, SRW8,
SUBF, SUBF8,
SUBF8_rec, SUBF_rec,
SUBFE, SUBFE8,
SUBFE8O, SUBFEO,
SUBF8O, SUBFO,
VADDUBM,
VADDUDM,
VADDUHM,
VADDUWM,
VAND,
VANDC,
VCMPEQUB,
VCMPEQUD,
VCMPEQUH,
VCMPEQUW,
VCMPGTSB,
VCMPGTSD,
VCMPGTSH,
VCMPGTSW,
VCMPGTUB,
VCMPGTUD,
VCMPGTUH,
VCMPGTUW,
VCMPNEB,
VCMPNEH,
VCMPNEW,
VCMPNEZB,
VCMPNEZH,
VCMPNEZW,
VEQV,
VMAXSB,
VMAXSD,
VMAXSH,
VMAXSW,
VMAXUB,
VMAXUD,
VMAXUH,
VMAXUW,
VMINSB,
VMINSD,
VMINSH,
VMINSW,
VMINUB,
VMINUD,
VMINUH,
VMINUW,
VMRGEW,
VMRGOW,
VNAND,
VNOR,
VOR,
VORC,
VRLB,
VRLD,
VRLDNM,
VRLH,
VRLW,
VRLWNM,
VSLB,
VSLD,
VSLH,
VSLW,
VSRAB,
VSRAD,
VSRAH,
VSRAW,
VSRB,
VSRD,
VSRH,
VSRW,
VSUBUBM,
VSUBUDM,
VSUBUHM,
VSUBUWM,
VXOR, V_SET0, V_SET0B, V_SET0H,
XOR, XOR8,
XOR8_rec, XOR_rec,
XSCPSGNDP,
XSCPSGNQP,
XSIEXPDP,
XSIEXPQP,
XVCPSGNDP,
XVCPSGNSP,
XVIEXPDP,
XVIEXPSP,
XXLAND,
XXLANDC,
XXLEQV, XXLEQVOnes,
XXLNAND,
XXLNOR,
XXLOR, XXLORf,
XXLORC,
XXLXOR, XXLXORdpz, XXLXORspz, XXLXORz
)>;
// 3 Cycles ALU operations, 3 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read],
(instrs
ISEL, ISEL8,
VRLDMI,
VRLWMI,
VSEL,
XXSEL
)>;
// Single crack instructions
// 3 Cycles ALU operations, 0 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
(instrs
MFFS,
MFFS_rec,
MFFSCDRNI,
MFFSCRNI,
MFFSL,
MFVSCR,
MTFSB0,
TBEGIN,
TRECHKPT,
TSR
)>;
// Single crack instructions
// 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10FX_Read],
(instrs
ADDIC_rec,
ADDME8_rec, ADDME_rec,
ADDME8O_rec, ADDMEO_rec,
ADDZE8_rec, ADDZE_rec,
ADDZE8O_rec, ADDZEO_rec,
MCRFS,
MFFSCDRN,
MFFSCRN,
MTVSCR,
NEG8O_rec, NEGO_rec,
SUBFME8_rec, SUBFME_rec,
SUBFME8O_rec, SUBFMEO_rec,
SUBFZE8_rec, SUBFZE_rec,
SUBFZE8O_rec, SUBFZEO_rec,
TABORT,
TRECLAIM
)>;
// Single crack instructions
// 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
(instrs
ADDE8_rec, ADDE_rec,
ADDE8O_rec, ADDEO_rec,
ADD4O_rec, ADD8O_rec,
SUBFE8_rec, SUBFE_rec,
SUBFE8O_rec, SUBFEO_rec,
SUBF8O_rec, SUBFO_rec
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 4 Cycles ALU2 operations, 2 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_F2_4C, P10W_DISP_ANY],
(instrs
ADDG6S, ADDG6S8
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 3 Cycles ALU operations, 0 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
HRFID,
MFFSCE,
MTFSB1,
MTFSFI, MTFSFIb,
MTFSFI_rec,
RFEBB,
RFID,
SC,
STOP
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read],
(instrs
FABSD_rec, FABSS_rec,
FMR_rec,
FNABSD_rec, FNABSS_rec,
FNEGD_rec, FNEGS_rec,
MTFSF, MTFSFb,
MTFSF_rec
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
(instrs
ADDC, ADDC8,
ADDC8_rec, ADDC_rec,
ADDC8O, ADDCO,
FCPSGND_rec, FCPSGNS_rec,
SUBFC, SUBFC8,
SUBFC8_rec, SUBFC_rec,
SUBFC8O, SUBFCO
)>;
// 4-way crack instructions
// 3 Cycles ALU operations, 3 Cycles ALU operations, 3 Cycles ALU operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
(instrs
ADDC8O_rec, ADDCO_rec,
SUBFC8O_rec, SUBFCO_rec
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 4 Cycles Permute operations, 1 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
(instrs
VSTRIBL_rec,
VSTRIBR_rec,
VSTRIHL_rec,
VSTRIHR_rec
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_PAIR, P10W_FX_3C, P10FX_Read],
(instrs
MTCRF, MTCRF8
)>;
// 6 Cycles Load operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_ANY],
(instrs
LBZ, LBZ8,
LD, LDtoc, LDtocBA, LDtocCPT, LDtocJTI, LDtocL, SPILLTOVSR_LD,
DFLOADf32, DFLOADf64, LFD,
LHA, LHA8,
LHZ, LHZ8,
LWA, LWA_32,
LWZ, LWZ8, LWZtoc, LWZtocL,
LXSD,
LXV
)>;
// 6 Cycles Load operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_ANY, P10LD_Read],
(instrs
LXVL,
LXVLL
)>;
// 6 Cycles Load operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_ANY, P10LD_Read, P10LD_Read],
(instrs
DCBT,
DCBTST,
ICBT,
LBZX, LBZX8, LBZXTLS, LBZXTLS_, LBZXTLS_32,
LDBRX,
LDX, LDXTLS, LDXTLS_, SPILLTOVSR_LDX,
LFDX, LFDXTLS, LFDXTLS_, XFLOADf32, XFLOADf64,
LFIWAX, LIWAX,
LFIWZX, LIWZX,
LHAX, LHAX8, LHAXTLS, LHAXTLS_, LHAXTLS_32,
LHBRX, LHBRX8,
LHZX, LHZX8, LHZXTLS, LHZXTLS_, LHZXTLS_32,
LVEBX,
LVEHX,
LVEWX,
LVX,
LVXL,
LWAX, LWAXTLS, LWAXTLS_, LWAXTLS_32, LWAX_32,
LWBRX, LWBRX8,
LWZX, LWZX8, LWZXTLS, LWZXTLS_, LWZXTLS_32,
LXSDX,
LXSIBZX,
LXSIHZX,
LXSIWAX,
LXSIWZX,
LXVB16X,
LXVD2X,
LXVDSX,
LXVH8X,
LXVRBX,
LXVRDX,
LXVRHX,
LXVRWX,
LXVW4X,
LXVWSX,
LXVX
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 13 Cycles Decimal Floating Point operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DF_13C, P10W_DISP_ANY],
(instrs
HASHCHK, HASHCHK8,
HASHCHKP, HASHCHKP8
)>;
// Single crack instructions
// 6 Cycles Load operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY],
(instrs
DARN,
SLBIA
)>;
// Single crack instructions
// 6 Cycles Load operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY, P10LD_Read],
(instrs
MTSPR, MTSPR8, MTSR, MTUDSCR, MTVRSAVE, MTVRSAVEv,
SLBFEE_rec,
SLBIE,
SLBMFEE,
SLBMFEV
)>;
// Single crack instructions
// 6 Cycles Load operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY, P10LD_Read, P10LD_Read],
(instrs
LBARX, LBARXL,
LBZCIX,
LDARX, LDARXL,
LDCIX,
LHARX, LHARXL,
LHZCIX,
LWARX, LWARXL,
LWZCIX
)>;
// Expand instructions
// 6 Cycles Load operations, 6 Cycles Load operations, 6 Cycles Load operations, and 6 Cycles Load operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY],
(instrs
LMW
)>;
// Expand instructions
// 6 Cycles Load operations, 6 Cycles Load operations, 6 Cycles Load operations, and 6 Cycles Load operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10LD_Read],
(instrs
LSWI
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_SX_3C, P10W_DISP_ANY],
(instrs
LBZU, LBZU8,
LDU,
LFDU,
LHAU, LHAU8,
LHZU, LHZU8,
LWZU, LWZU8
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_SX_3C, P10W_DISP_ANY],
(instrs
LBZUX, LBZUX8,
LDUX,
LFDUX,
LHAUX, LHAUX8,
LHZUX, LHZUX8,
LWAUX,
LWZUX, LWZUX8
)>;
// 6 Cycles Load operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR],
(instrs
PLBZ, PLBZ8, PLBZ8pc, PLBZpc,
PLD, PLDpc,
PLFD, PLFDpc,
PLFS, PLFSpc,
PLHA, PLHA8, PLHA8pc, PLHApc,
PLHZ, PLHZ8, PLHZ8pc, PLHZpc,
PLWA, PLWA8, PLWA8pc, PLWApc,
PLWZ, PLWZ8, PLWZ8pc, PLWZpc,
PLXSD, PLXSDpc,
PLXSSP, PLXSSPpc,
PLXV, PLXVpc,
PLXVP, PLXVPpc
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 4 Cycles ALU2 operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C],
(instrs
LFS,
LXSSP
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 4 Cycles ALU2 operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C],
(instrs
LFSX, LFSXTLS, LFSXTLS_,
LXSSPX
)>;
// 4-way crack instructions
// 6 Cycles Load operations, 4 Cycles ALU2 operations, 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C, P10W_SX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY],
(instrs
LFSU
)>;
// 4-way crack instructions
// 6 Cycles Load operations, 4 Cycles ALU2 operations, 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C, P10W_SX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY],
(instrs
LFSUX
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 6 Cycles Load operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read],
(instrs
TLBIEL
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 6 Cycles Load operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read, P10LD_Read],
(instrs
SLBMTE
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_SX_3C],
(instrs
LXVP
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_SX_3C],
(instrs
LXVPX
)>;
// Single crack instructions
// 13 Cycles Unknown operations, 1 input operands
def : InstRW<[P10W_MFL_13C, P10W_DISP_EVEN, P10W_DISP_ANY],
(instrs
MFSPR, MFSPR8, MFSR, MFTB8, MFUDSCR, MFVRSAVE, MFVRSAVEv
)>;
// 10 Cycles SIMD Matrix Multiply Engine operations, 0 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_ANY],
(instrs
XXSETACCZ
)>;
// 10 Cycles SIMD Matrix Multiply Engine operations, 2 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_ANY, P10MM_Read, P10MM_Read],
(instrs
XVBF16GER2,
XVF16GER2,
XVF32GER,
XVF64GER,
XVI16GER2,
XVI16GER2S,
XVI4GER8,
XVI8GER4
)>;
// 10 Cycles SIMD Matrix Multiply Engine operations, 3 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_ANY, P10MM_Read, P10MM_Read, P10MM_Read],
(instrs
XVBF16GER2NN,
XVBF16GER2NP,
XVBF16GER2PN,
XVBF16GER2PP,
XVF16GER2NN,
XVF16GER2NP,
XVF16GER2PN,
XVF16GER2PP,
XVF32GERNN,
XVF32GERNP,
XVF32GERPN,
XVF32GERPP,
XVF64GERNN,
XVF64GERNP,
XVF64GERPN,
XVF64GERPP,
XVI16GER2PP,
XVI16GER2SPP,
XVI4GER8PP,
XVI8GER4PP,
XVI8GER4SPP
)>;
// 10 Cycles SIMD Matrix Multiply Engine operations, 2 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read],
(instrs
PMXVBF16GER2,
PMXVF16GER2,
PMXVF32GER,
PMXVF64GER,
PMXVI16GER2,
PMXVI16GER2S,
PMXVI4GER8,
PMXVI8GER4
)>;
// 10 Cycles SIMD Matrix Multiply Engine operations, 3 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read],
(instrs
PMXVBF16GER2NN,
PMXVBF16GER2NP,
PMXVBF16GER2PN,
PMXVBF16GER2PP,
PMXVF16GER2NN,
PMXVF16GER2NP,
PMXVF16GER2PN,
PMXVF16GER2PP,
PMXVF32GERNN,
PMXVF32GERNP,
PMXVF32GERPN,
PMXVF32GERPP,
PMXVF64GERNN,
PMXVF64GERNP,
PMXVF64GERPN,
PMXVF64GERPP,
PMXVI16GER2PP,
PMXVI16GER2SPP,
PMXVI4GER8PP,
PMXVI8GER4PP,
PMXVI8GER4SPP
)>;
// 2-way crack instructions
// 10 Cycles SIMD Matrix Multiply Engine operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C],
(instrs
XXMTACC
)>;
// 4-way crack instructions
// 10 Cycles SIMD Matrix Multiply Engine operations, 3 Cycles ALU operations, 10 Cycles SIMD Matrix Multiply Engine operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C, P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C],
(instrs
XXMFACC
)>;
// 5 Cycles GPR Multiply operations, 1 input operands
def : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read],
(instrs
MULLI, MULLI8
)>;
// 5 Cycles GPR Multiply operations, 2 input operands
def : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read, P10MU_Read],
(instrs
MULHD,
MULHDU,
MULHW,
MULHWU,
MULLD,
MULLDO,
MULLW,
MULLWO,
VMULHSD,
VMULHUD,
VMULLD
)>;
// 5 Cycles GPR Multiply operations, 3 input operands
def : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read, P10MU_Read, P10MU_Read],
(instrs
MADDHD,
MADDHDU,
MADDLD, MADDLD8
)>;
// 2-way crack instructions
// 5 Cycles GPR Multiply operations, and 3 Cycles ALU operations, 2 input operands
def : InstRW<[P10W_MU_5C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
MULHD_rec,
MULHDU_rec,
MULHW_rec,
MULHWU_rec,
MULLD_rec,
MULLDO_rec,
MULLW_rec,
MULLWO_rec
)>;
// 4 Cycles Permute operations, 0 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_ANY],
(instrs
LXVKQ,
VSPLTISB,
VSPLTISH,
VSPLTISW, V_SETALLONES, V_SETALLONESB, V_SETALLONESH,
XXSPLTIB
)>;
// 4 Cycles Permute operations, 1 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read],
(instrs
BRD,
BRH, BRH8,
BRW, BRW8,
MFVSRLD,
MTVSRWS,
VCLZLSBB,
VCTZLSBB,
VEXTRACTD,
VEXTRACTUB,
VEXTRACTUH,
VEXTRACTUW,
VGBBD,
VINSERTD,
VINSERTW,
VPRTYBQ,
VSPLTB, VSPLTBs,
VSPLTH, VSPLTHs,
VSPLTW,
VSTRIBL,
VSTRIBR,
VSTRIHL,
VSTRIHR,
VUPKHPX,
VUPKHSB,
VUPKHSH,
VUPKHSW,
VUPKLPX,
VUPKLSB,
VUPKLSH,
VUPKLSW,
XVCVBF16SPN,
XXBRD,
XXBRH,
XXBRQ,
XXBRW,
XXEXTRACTUW,
XXGENPCVDM,
XXGENPCVHM,
XXGENPCVWM,
XXSPLTW, XXSPLTWs
)>;
// 4 Cycles Permute operations, 2 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read, P10PM_Read],
(instrs
BPERMD,
LVSL,
LVSR,
MTVSRDD,
VBPERMD,
VBPERMQ,
VCLRLB,
VCLRRB,
VEXTUBLX,
VEXTUBRX,
VEXTUHLX,
VEXTUHRX,
VEXTUWLX,
VEXTUWRX,
VINSD,
VINSERTB,
VINSERTH,
VINSW,
VMRGHB,
VMRGHH,
VMRGHW,
VMRGLB,
VMRGLH,
VMRGLW,
VPKPX,
VPKSDSS,
VPKSDUS,
VPKSHSS,
VPKSHUS,
VPKSWSS,
VPKSWUS,
VPKUDUM,
VPKUDUS,
VPKUHUM,
VPKUHUS,
VPKUWUM,
VPKUWUS,
VSL,
VSLDBI,
VSLDOI,
VSLO,
VSLV,
VSR,
VSRDBI,
VSRO,
VSRV,
XXINSERTW,
XXMRGHW,
XXMRGLW,
XXPERMDI, XXPERMDIs,
XXSLDWI, XXSLDWIs
)>;
// 4 Cycles Permute operations, 3 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read, P10PM_Read, P10PM_Read],
(instrs
VEXTDDVLX,
VEXTDDVRX,
VEXTDUBVLX,
VEXTDUBVRX,
VEXTDUHVLX,
VEXTDUHVRX,
VEXTDUWVLX,
VEXTDUWVRX,
VINSBLX,
VINSBRX,
VINSBVLX,
VINSBVRX,
VINSDLX,
VINSDRX,
VINSHLX,
VINSHRX,
VINSHVLX,
VINSHVRX,
VINSWLX,
VINSWRX,
VINSWVLX,
VINSWVRX,
VPERM,
VPERMR,
VPERMXOR,
XXPERM,
XXPERMR
)>;
// 2-way crack instructions
// 4 Cycles Permute operations, and 7 Cycles VMX Multiply operations, 2 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_EVEN, P10W_vMU_7C, P10W_DISP_ANY],
(instrs
VSUMSWS
)>;
// 4 Cycles Permute operations, 0 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR],
(instrs
XXSPLTIDP,
XXSPLTIW
)>;
// 4 Cycles Permute operations, 1 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read],
(instrs
XXSPLTI32DX
)>;
// 4 Cycles Permute operations, 3 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read, P10PM_Read, P10PM_Read],
(instrs
XXBLENDVB,
XXBLENDVD,
XXBLENDVH,
XXBLENDVW,
XXEVAL,
XXPERMX
)>;
// 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read],
(instrs
PSTXVP, PSTXVPpc,
STB, STB8,
STBU, STBU8,
SPILLTOVSR_ST, STD,
STDU,
DFSTOREf32, DFSTOREf64, STFD,
STFDU,
STFS,
STFSU,
STH, STH8,
STHU, STHU8,
STW, STW8,
STWU, STWU8,
STXSD,
STXSSP,
STXV
)>;
// 3 Cycles Store operations, 2 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
(instrs
CP_COPY, CP_COPY8,
DCBF,
DCBST,
DCBZ,
ICBI,
STXVL,
STXVLL
)>;
// 3 Cycles Store operations, 3 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
(instrs
STBUX, STBUX8,
STBX, STBX8, STBXTLS, STBXTLS_, STBXTLS_32,
STDBRX,
STDUX,
SPILLTOVSR_STX, STDX, STDXTLS, STDXTLS_,
STFDUX,
STFDX, STFDXTLS, STFDXTLS_,
STFIWX, STIWX,
STFSUX,
STFSX, STFSXTLS, STFSXTLS_,
STHBRX,
STHUX, STHUX8,
STHX, STHX8, STHXTLS, STHXTLS_, STHXTLS_32,
STVEBX,
STVEHX,
STVEWX,
STVX,
STVXL,
STWBRX,
STWUX, STWUX8,
STWX, STWX8, STWXTLS, STWXTLS_, STWXTLS_32,
STXSDX,
STXSIBX, STXSIBXv,
STXSIHX, STXSIHXv,
STXSIWX,
STXSSPX,
STXVB16X,
STXVD2X,
STXVH8X,
STXVRBX,
STXVRDX,
STXVRHX,
STXVRWX,
STXVW4X,
STXVX
)>;
// Single crack instructions
// 3 Cycles Store operations, 0 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
(instrs
EnforceIEIO,
MSGSYNC,
SLBSYNC,
TCHECK,
TEND,
TLBSYNC
)>;
// Single crack instructions
// 3 Cycles Store operations, 2 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
(instrs
CP_PASTE8_rec, CP_PASTE_rec,
SLBIEG,
TLBIE
)>;
// Single crack instructions
// 3 Cycles Store operations, 3 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
(instrs
STBCIX,
STBCX,
STDCIX,
STDCX,
STHCIX,
STHCX,
STWCIX,
STWCX
)>;
// 2-way crack instructions
// 3 Cycles Store operations, and 3 Cycles ALU operations, 0 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
ISYNC,
SYNC
)>;
// Expand instructions
// 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, 3 Cycles ALU operations, 6 Cycles Load operations, and 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY],
(instrs
LDAT,
LWAT
)>;
// 4-way crack instructions
// 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, and 3 Cycles Store operations, 2 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY],
(instrs
STDAT,
STWAT
)>;
// Expand instructions
// 3 Cycles Store operations, 3 Cycles Store operations, 3 Cycles Store operations, and 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10ST_Read],
(instrs
STMW
)>;
// Expand instructions
// 3 Cycles Store operations, 3 Cycles Store operations, 3 Cycles Store operations, and 3 Cycles Store operations, 2 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
(instrs
STSWI
)>;
// 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10ST_Read],
(instrs
PSTB, PSTB8, PSTB8pc, PSTBpc,
PSTD, PSTDpc,
PSTFD, PSTFDpc,
PSTFS, PSTFSpc,
PSTH, PSTH8, PSTH8pc, PSTHpc,
PSTW, PSTW8, PSTW8pc, PSTWpc,
PSTXSD, PSTXSDpc,
PSTXSSP, PSTXSSPpc,
PSTXV, PSTXVpc
)>;
// 2-way crack instructions
// 3 Cycles Store operations, and 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10W_ST_3C, P10ST_Read],
(instrs
STXVP
)>;
// 2-way crack instructions
// 3 Cycles Store operations, and 3 Cycles Store operations, 3 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10W_ST_3C, P10ST_Read, P10ST_Read, P10ST_Read],
(instrs
STXVPX
)>;
// FIXME - Miss scheduling information from datasheet
// Temporary set it as 1 Cycles Simple Fixed-point (SFX) operations, 0 input operands
def : InstRW<[P10W_SX, P10W_DISP_ANY],
(instrs
ATTN,
CP_ABORT,
CRNOT,
DCBA,
DCBI,
DCBZL,
DCCCI,
ICBLC,
ICBLQ,
ICBTLS,
ICCCI,
LA, LA8,
MFDCR,
MFPMR,
MFSRIN,
MSYNC,
MTDCR,
MTPMR,
MTSRIN,
NAP,
TLBIA,
TLBLD,
TLBLI,
TLBRE2,
TLBSX2,
TLBSX2D,
TLBWE2
)>;
// Single crack instructions
// 3 Cycles Simple Fixed-point (SFX) operations, 0 input operands
def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
(instrs
CLRBHRB,
MFBHRBE,
MFMSR,
MFTB
)>;
// Single crack instructions
// 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10SX_Read],
(instrs
MTMSR,
MTMSRD
)>;
// 2-way crack instructions
// 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 0 input operands
def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
ADDPCIS
)>;
// 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
def : InstRW<[P10W_SX_3C, P10W_DISP_PAIR, P10SX_Read],
(instrs
PADDI, PADDI8, PADDI8pc, PADDIpc, PLI, PLI8
)>;
// 7 Cycles VMX Multiply operations, 2 input operands
def : InstRW<[P10W_vMU_7C, P10W_DISP_ANY, P10vMU_Read, P10vMU_Read],
(instrs
VMULESB,
VMULESD,
VMULESH,
VMULESW,
VMULEUB,
VMULEUD,
VMULEUH,
VMULEUW,
VMULHSW,
VMULHUW,
VMULOSB,
VMULOSD,
VMULOSH,
VMULOSW,
VMULOUB,
VMULOUD,
VMULOUH,
VMULOUW,
VMULUWM,
VSUM2SWS,
VSUM4SBS,
VSUM4SHS,
VSUM4UBS
)>;
// 7 Cycles VMX Multiply operations, 3 input operands
def : InstRW<[P10W_vMU_7C, P10W_DISP_ANY, P10vMU_Read, P10vMU_Read, P10vMU_Read],
(instrs
VMHADDSHS,
VMHRADDSHS,
VMLADDUHM,
VMSUMCUD,
VMSUMMBM,
VMSUMSHM,
VMSUMSHS,
VMSUMUBM,
VMSUMUDM,
VMSUMUHM,
VMSUMUHS
)>;