blob: 5906564810864588ae72b69199a60a180f41fbf3 [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 the itinerary class data for 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, 0 input operands
def : InstRW<[P10W_BR_2C, P10W_DISP_ANY],
(instrs
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
)>;
// 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,
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,
BCL, BCLalways, BCLn, BDNZL, BDNZLm, BDNZLp, BDZL, BDZLm, BDZLp, gBCL, gBCLat,
BLA, BLA8, BLA8_NOP, BLA8_NOP_RM, BLA8_RM, BLA_RM
)>;
// 2 Cycles Branch operations, 3 input operands
def : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read, P10BR_Read, P10BR_Read],
(instrs
BCCTR, BCCTR8, BCCTR8n, BCCTRn, gBCCTR,
BCCTRL, BCCTRL8, BCCTRL8n, BCCTRLn, gBCCTRL
)>;
// 2 Cycles Branch operations, 4 input operands
def : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read, P10BR_Read, P10BR_Read, P10BR_Read],
(instrs
BDNZA, BDNZAm, BDNZAp, BDZA, BDZAm, BDZAp, gBCA, gBCAat,
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
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,
VGNB,
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
)>;
// 13 Cycles Decimal Floating Point operations, 2 input operands
def : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
(instrs
XSADDQP,
XSADDQPO,
XSSUBQP,
XSSUBQPO
)>;
// 13 Cycles Decimal Floating Point operations, 3 input operands
def : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read, P10DF_Read, P10DF_Read],
(instrs
BCDSR_rec,
XSRQPI,
XSRQPIX,
XSRQPXP
)>;
// 2-way crack instructions
// 13 Cycles Decimal Floating Point operations, and 3 Cycles Store operations, 2 input operands
def : InstRW<[P10W_DF_13C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY],
(instrs
HASHST,
HASHSTP
)>;
// 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, 2 input operands
def : InstRW<[P10W_DF_38C, P10W_DISP_ANY, P10DF_Read, 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
BCDCTN_rec,
VMUL10CUQ,
VMUL10UQ,
XSXSIGQP
)>;
// 5 Cycles Fixed-Point and BCD operations, 2 input operands
def : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read, P10DX_Read],
(instrs
BCDCFN_rec,
BCDCFZ_rec,
BCDCPSGN_rec,
BCDCTZ_rec,
BCDSETSGN_rec,
BCDUS_rec,
BCDUTRUNC_rec,
VADDCUQ,
VADDUQM,
VMUL10ECUQ,
VMUL10EUQ,
VSUBCUQ,
VSUBUQM,
XSCMPEXPQP,
XSCMPOQP,
XSCMPUQP,
XSTSTDCQP,
XXGENPCVBM
)>;
// 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
BCDADD_rec,
BCDS_rec,
BCDSUB_rec,
BCDTRUNC_rec,
VADDECUQ,
VADDEUQM,
VSUBECUQ,
VSUBEUQM
)>;
// 4 Cycles ALU2 operations, 0 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY],
(instrs
TRAP, TW
)>;
// 4 Cycles ALU2 operations, 1 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read],
(instrs
CNTLZD,
CNTLZD_rec,
CNTLZW, CNTLZW8,
CNTLZW8_rec, CNTLZW_rec,
CNTTZD,
CNTTZD_rec,
CNTTZW, CNTTZW8,
CNTTZW8_rec, CNTTZW_rec,
FTSQRT,
MTVSRBM,
MTVSRBMI,
MTVSRDM,
MTVSRHM,
MTVSRQM,
MTVSRWM,
POPCNTB, POPCNTB8,
POPCNTD,
POPCNTW,
VCLZB,
VCLZD,
VCLZH,
VCLZW,
VCTZB,
VCTZD,
VCTZH,
VCTZW,
VEXPANDBM,
VEXPANDDM,
VEXPANDHM,
VEXPANDQM,
VEXPANDWM,
VEXTRACTBM,
VEXTRACTDM,
VEXTRACTHM,
VEXTRACTQM,
VEXTRACTWM,
VPOPCNTB,
VPOPCNTD,
VPOPCNTH,
VPOPCNTW,
VPRTYBD,
VPRTYBW,
XSCVHPDP,
XSCVSPDPN,
XSTSQRTDP,
XVCVHPSP,
XVTLSBB,
XVTSQRTDP,
XVTSQRTSP
)>;
// 4 Cycles ALU2 operations, 2 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
(instrs
CMPEQB,
EXTSWSLI_32_64_rec, EXTSWSLI_rec,
FCMPOD, FCMPOS,
FCMPUD, FCMPUS,
FTDIV,
SLD_rec,
SLW8_rec, SLW_rec,
SRD_rec,
SRW8_rec, SRW_rec,
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,
VCNTMBB,
VCNTMBD,
VCNTMBH,
VCNTMBW,
VMAXFP,
VMINFP,
VSUBCUW,
VSUBSBS,
VSUBSHS,
VSUBSWS,
VSUBUBS,
VSUBUHS,
VSUBUWS,
XSCMPEQDP,
XSCMPEXPDP,
XSCMPGEDP,
XSCMPGTDP,
XSCMPODP,
XSCMPUDP,
XSMAXCDP,
XSMAXDP,
XSMAXJDP,
XSMINCDP,
XSMINDP,
XSMINJDP,
XSTDIVDP,
XSTSTDCDP,
XSTSTDCSP,
XVCMPEQDP,
XVCMPEQDP_rec,
XVCMPEQSP,
XVCMPEQSP_rec,
XVCMPGEDP,
XVCMPGEDP_rec,
XVCMPGESP,
XVCMPGESP_rec,
XVCMPGTDP,
XVCMPGTDP_rec,
XVCMPGTSP,
XVCMPGTSP_rec,
XVMAXDP,
XVMAXSP,
XVMINDP,
XVMINSP,
XVTDIVDP,
XVTDIVSP,
XVTSTDCDP,
XVTSTDCSP
)>;
// 4 Cycles ALU2 operations, 3 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read],
(instrs
CMPRB, CMPRB8,
RLDCL_rec,
RLDCR_rec,
RLDIC_rec,
RLDICL_32_rec, RLDICL_rec,
RLDICR_rec,
TD,
TDI,
TWI,
VSHASIGMAD,
VSHASIGMAW
)>;
// 4 Cycles ALU2 operations, 4 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read, P10F2_Read],
(instrs
RLDIMI_rec,
RLWINM8_rec, RLWINM_rec,
RLWNM8_rec, RLWNM_rec
)>;
// 4 Cycles ALU2 operations, 5 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read, P10F2_Read, P10F2_Read],
(instrs
RLWIMI8_rec, RLWIMI_rec
)>;
// 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,
SRADI_rec,
SRAW_rec,
SRAWI_rec
)>;
// Single crack instructions
// 4 Cycles ALU2 operations, 3 input operands
def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read],
(instrs
TABORTDC,
TABORTDCI,
TABORTWC,
TABORTWCI
)>;
// 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
CR6SET, CREQV, CRSET,
DSS, DSSALL,
MCRXRX,
MFCTR, MFCTR8,
MFLR, MFLR8,
NOP, NOP_GT_PWR6, NOP_GT_PWR7, ORI, ORI8,
VXOR, V_SET0, V_SET0B, V_SET0H,
XXLEQV, XXLEQVOnes,
XXLXOR, XXLXORdpz, XXLXORspz, XXLXORz
)>;
// 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,
ADDIS, ADDIS8, ADDISdtprelHA32, ADDIStocHA, ADDIStocHA8, LIS, LIS8,
ADDME, ADDME8,
ADDME8O, ADDMEO,
ADDZE, ADDZE8,
ADDZE8O, ADDZEO,
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,
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,
SETB, SETB8,
SETBC, SETBC8,
SETBCR, SETBCR8,
SETNBC, SETNBC8,
SETNBCR, SETNBCR8,
SUBFME, SUBFME8,
SUBFME8O, SUBFMEO,
SUBFZE, SUBFZE8,
SUBFZE8O, SUBFZEO,
VEXTSB2D, VEXTSB2Ds,
VEXTSB2W, VEXTSB2Ws,
VEXTSD2Q,
VEXTSH2D, VEXTSH2Ds,
VEXTSH2W, VEXTSH2Ws,
VEXTSW2D, VEXTSW2Ds,
VNEGD,
VNEGW,
WAIT,
XSABSDP,
XSABSQP,
XSNABSDP,
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,
ADDIC, ADDIC8,
ADD4O, ADD8O,
AND, AND8,
AND8_rec, AND_rec,
ANDC, ANDC8,
ANDC8_rec, ANDC_rec,
ANDI8_rec, ANDI_rec,
ANDIS8_rec, ANDIS_rec,
CMPD, CMPW,
CMPB, CMPB8,
CMPDI, CMPWI,
CMPLD, CMPLW,
CMPLDI, CMPLWI,
CRAND,
CRANDC,
CRNAND,
CRNOR,
CROR,
CRORC,
CR6UNSET, CRUNSET, CRXOR,
EQV, EQV8,
EQV8_rec, EQV_rec,
EXTSWSLI, EXTSWSLI_32_64,
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,
ORIS, ORIS8,
SLD,
SLW, SLW8,
SRAD,
SRADI, SRADI_32,
SRAW,
SRAWI,
SRD,
SRW, SRW8,
SUBF, SUBF8,
SUBF8_rec, SUBF_rec,
SUBFE, SUBFE8,
SUBFE8O, SUBFEO,
SUBFIC, SUBFIC8,
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,
XOR, XOR8,
XOR8_rec, XOR_rec,
XORI, XORI8,
XORIS, XORIS8,
XSCPSGNDP,
XSCPSGNQP,
XSIEXPDP,
XSIEXPQP,
XVCPSGNDP,
XVCPSGNSP,
XVIEXPDP,
XVIEXPSP,
XXLAND,
XXLANDC,
XXLNAND,
XXLNOR,
XXLOR, XXLORf,
XXLORC
)>;
// 3 Cycles ALU operations, 3 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read],
(instrs
ADDEX, ADDEX8,
DST, DST64, DSTT, DSTT64,
DSTST, DSTST64, DSTSTT, DSTSTT64,
ISEL, ISEL8,
RLDCL,
RLDCR,
RLDIC,
RLDICL, RLDICL_32, RLDICL_32_64,
RLDICR, RLDICR_32,
VRLDMI,
VRLWMI,
VSEL,
XXSEL
)>;
// 3 Cycles ALU operations, 4 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read],
(instrs
RLDIMI,
RLWINM, RLWINM8,
RLWNM, RLWNM8
)>;
// 3 Cycles ALU operations, 5 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read],
(instrs
RLWIMI, RLWIMI8
)>;
// 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,
MFFSL,
MFVSCR,
TRECHKPT
)>;
// Single crack instructions
// 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10FX_Read],
(instrs
ADDME8_rec, ADDME_rec,
ADDME8O_rec, ADDMEO_rec,
ADDZE8_rec, ADDZE_rec,
ADDZE8O_rec, ADDZEO_rec,
MCRFS,
MFFSCDRN,
MFFSCDRNI,
MFFSCRN,
MFFSCRNI,
MTFSB0,
MTVSCR,
NEG8O_rec, NEGO_rec,
SUBFME8_rec, SUBFME_rec,
SUBFME8O_rec, SUBFMEO_rec,
SUBFZE8_rec, SUBFZE_rec,
SUBFZE8O_rec, SUBFZEO_rec,
TABORT,
TBEGIN,
TRECLAIM,
TSR
)>;
// 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,
ADDIC_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 3 Cycles ALU operations, 0 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
HRFID,
MFFSCE,
RFID,
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,
MTFSB1,
RFEBB,
SC
)>;
// 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,
MTFSF, MTFSFb,
MTFSFI, MTFSFIb,
SUBFC, SUBFC8,
SUBFC8_rec, SUBFC_rec,
SUBFC8O, SUBFCO
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 3 Cycles ALU operations, 3 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read],
(instrs
MTFSFI_rec
)>;
// 2-way crack instructions
// 3 Cycles ALU operations, and 3 Cycles ALU operations, 4 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read],
(instrs
MTFSF_rec
)>;
// 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, 2 input operands
def : InstRW<[P10W_FX_3C, P10W_DISP_PAIR, P10W_FX_3C, P10FX_Read, P10FX_Read],
(instrs
MTCRF, MTCRF8
)>;
// 6 Cycles Load operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_ANY, P10LD_Read],
(instrs
LBZ, LBZ8,
LD, LDtoc, LDtocBA, LDtocCPT, LDtocJTI, LDtocL, SPILLTOVSR_LD,
LDBRX,
DFLOADf32, DFLOADf64, LFD,
LFDX, XFLOADf32, XFLOADf64,
LFIWAX, LIWAX,
LFIWZX, LIWZX,
LHA, LHA8,
LHAX, LHAX8,
LHBRX, LHBRX8,
LHZ, LHZ8,
LVEBX,
LVEHX,
LVEWX,
LVX,
LVXL,
LWA, LWA_32,
LWAX, LWAX_32,
LWBRX, LWBRX8,
LWZ, LWZ8, LWZtoc, LWZtocL,
LXSD,
LXSDX,
LXSIBZX,
LXSIHZX,
LXSIWAX,
LXSIWZX,
LXV,
LXVB16X,
LXVD2X,
LXVDSX,
LXVH8X,
LXVRBX,
LXVRDX,
LXVRHX,
LXVRWX,
LXVW4X,
LXVWSX,
LXVX
)>;
// 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,
LDX, LDXTLS, LDXTLS_, SPILLTOVSR_LDX,
LHZX, LHZX8, LHZXTLS, LHZXTLS_, LHZXTLS_32,
LWZX, LWZX8, LWZXTLS, LWZXTLS_, LWZXTLS_32,
LXVL,
LXVLL
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 13 Cycles Decimal Floating Point operations, 2 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DF_13C, P10W_DISP_ANY],
(instrs
HASHCHK,
HASHCHKP
)>;
// Single crack instructions
// 6 Cycles Load operations, 0 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY],
(instrs
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
DARN,
LBARX, LBARXL,
LDARX, LDARXL,
LHARX, LHARXL,
LWARX, LWARXL,
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
LBZCIX,
LDCIX,
LHZCIX,
LWZCIX,
MTSPR, MTSPR8, MTSR, MTVRSAVE, MTVRSAVEv
)>;
// 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
LMW
)>;
// Expand instructions
// 6 Cycles Load operations, 6 Cycles Load operations, 6 Cycles Load operations, and 6 Cycles Load operations, 2 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, P10LD_Read],
(instrs
LSWI
)>;
// 2-way crack instructions
// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_SX_3C, P10W_DISP_ANY],
(instrs
LBZU, LBZU8,
LBZUX, LBZUX8,
LDU,
LDUX,
LFDU,
LFDUX,
LHAU, LHAU8,
LHAUX, LHAUX8,
LHZU, LHZU8,
LHZUX, LHZUX8,
LWAUX,
LWZU, LWZU8,
LWZUX, LWZUX8
)>;
// 6 Cycles Load operations, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read],
(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, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C],
(instrs
LFS,
LFSX,
LXSSP,
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, 1 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,
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, 1 input operands
def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_SX_3C],
(instrs
LXVP,
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, 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, 4 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read],
(instrs
PMXVF32GER,
PMXVF64GER
)>;
// 10 Cycles SIMD Matrix Multiply Engine operations, 5 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read],
(instrs
PMXVBF16GER2,
PMXVF16GER2,
PMXVF32GERNN,
PMXVF32GERNP,
PMXVF32GERPN,
PMXVF32GERPP,
PMXVF64GERNN,
PMXVF64GERNP,
PMXVF64GERPN,
PMXVF64GERPP,
PMXVI16GER2,
PMXVI16GER2S,
PMXVI4GER8,
PMXVI8GER4
)>;
// 10 Cycles SIMD Matrix Multiply Engine operations, 6 input operands
def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read],
(instrs
PMXVBF16GER2NN,
PMXVBF16GER2NP,
PMXVBF16GER2PN,
PMXVBF16GER2PP,
PMXVF16GER2NN,
PMXVF16GER2NP,
PMXVF16GER2PN,
PMXVF16GER2PP,
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, 2 input operands
def : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read, P10MU_Read],
(instrs
MULHD,
MULHDU,
MULHW,
MULHWU,
MULLD,
MULLDO,
MULLI, MULLI8,
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
VSPLTISW, V_SETALLONES, V_SETALLONESB, V_SETALLONESH
)>;
// 4 Cycles Permute operations, 1 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read],
(instrs
LVSL,
LVSR,
MFVSRLD,
MTVSRWS,
VCLZLSBB,
VCTZLSBB,
VGBBD,
VPRTYBQ,
VSPLTISB,
VSPLTISH,
VSTRIBL,
VSTRIBR,
VSTRIHL,
VSTRIHR,
VUPKHPX,
VUPKHSB,
VUPKHSH,
VUPKHSW,
VUPKLPX,
VUPKLSB,
VUPKLSH,
VUPKLSW,
XVCVBF16SPN,
XXBRD,
XXBRH,
XXBRQ,
XXBRW,
XXSPLTIB
)>;
// 4 Cycles Permute operations, 2 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read, P10PM_Read],
(instrs
BPERMD,
MTVSRDD,
VBPERMD,
VBPERMQ,
VCLRLB,
VCLRRB,
VEXTRACTD,
VEXTRACTUB,
VEXTRACTUH,
VEXTRACTUW,
VEXTUBLX,
VEXTUBRX,
VEXTUHLX,
VEXTUHRX,
VEXTUWLX,
VEXTUWRX,
VINSERTD,
VINSERTW,
VMRGHB,
VMRGHH,
VMRGHW,
VMRGLB,
VMRGLH,
VMRGLW,
VPKPX,
VPKSDSS,
VPKSDUS,
VPKSHSS,
VPKSHUS,
VPKSWSS,
VPKSWUS,
VPKUDUM,
VPKUDUS,
VPKUHUM,
VPKUHUS,
VPKUWUM,
VPKUWUS,
VSL,
VSLO,
VSLV,
VSPLTB, VSPLTBs,
VSPLTH, VSPLTHs,
VSPLTW,
VSR,
VSRO,
VSRV,
XXEXTRACTUW,
XXGENPCVDM,
XXGENPCVHM,
XXGENPCVWM,
XXMRGHW,
XXMRGLW,
XXPERM,
XXPERMDI, XXPERMDIs,
XXPERMR,
XXSLDWI, XXSLDWIs,
XXSPLTW, XXSPLTWs
)>;
// 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,
VINSD,
VINSDLX,
VINSDRX,
VINSERTB,
VINSERTH,
VINSHLX,
VINSHRX,
VINSHVLX,
VINSHVRX,
VINSW,
VINSWLX,
VINSWRX,
VINSWVLX,
VINSWVRX,
VPERM,
VPERMR,
VPERMXOR,
VSLDBI,
VSLDOI,
VSRDBI,
XXINSERTW
)>;
// 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, 1 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read],
(instrs
XXSPLTIDP,
XXSPLTIW
)>;
// 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,
XXSPLTI32DX
)>;
// 4 Cycles Permute operations, 4 input operands
def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read, P10PM_Read, P10PM_Read, P10PM_Read],
(instrs
XXEVAL,
XXPERMX
)>;
// 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read],
(instrs
DCBST,
DCBZ,
ICBI
)>;
// 3 Cycles Store operations, 2 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
(instrs
DCBF,
PSTXVP, PSTXVPpc,
STB, STB8,
STBU, STBU8,
STBUX, STBUX8,
SPILLTOVSR_ST, STD,
STDBRX,
STDU,
STDUX,
DFSTOREf32, DFSTOREf64, STFD,
STFDU,
STFDUX,
STFDX,
STFIWX, STIWX,
STFS,
STFSU,
STFSUX,
STFSX,
STH, STH8,
STHBRX,
STHU, STHU8,
STHUX, STHUX8,
STVEBX,
STVEHX,
STVEWX,
STVX,
STVXL,
STW, STW8,
STWBRX,
STWU, STWU8,
STWUX, STWUX8,
STXSD,
STXSDX,
STXSIBX, STXSIBXv,
STXSIHX, STXSIHXv,
STXSIWX,
STXSSP,
STXSSPX,
STXV,
STXVB16X,
STXVD2X,
STXVH8X,
STXVRBX,
STXVRDX,
STXVRHX,
STXVRWX,
STXVW4X,
STXVX
)>;
// 3 Cycles Store operations, 3 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
(instrs
CP_COPY, CP_COPY8,
STBX, STBX8, STBXTLS, STBXTLS_, STBXTLS_32,
SPILLTOVSR_STX, STDX, STDXTLS, STDXTLS_,
STHX, STHX8, STHXTLS, STHXTLS_, STHXTLS_32,
STWX, STWX8, STWXTLS, STWXTLS_, STWXTLS_32,
STXVL,
STXVLL
)>;
// 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,
TLBSYNC
)>;
// Single crack instructions
// 3 Cycles Store operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read],
(instrs
TEND
)>;
// 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
SLBIEG,
STBCX,
STDCX,
STHCX,
STWCX,
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
CP_PASTE8_rec, CP_PASTE_rec,
STBCIX,
STDCIX,
STHCIX,
STWCIX
)>;
// 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
)>;
// 2-way crack instructions
// 3 Cycles Store operations, and 3 Cycles ALU operations, 1 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
(instrs
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, 2 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, 3 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, 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
STMW
)>;
// Expand instructions
// 3 Cycles Store operations, 3 Cycles Store operations, 3 Cycles Store operations, and 3 Cycles Store operations, 3 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, P10ST_Read],
(instrs
STSWI
)>;
// 3 Cycles Store operations, 2 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10ST_Read, 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, 2 input operands
def : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10W_ST_3C, P10ST_Read, P10ST_Read],
(instrs
STXVP,
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,
DCBA,
DCBI,
DCBZL,
DCCCI,
ICBLC,
ICBLQ,
ICBTLS,
ICCCI,
LA,
LDMX,
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,
MFMSR
)>;
// 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
MFTB
)>;
// Single crack instructions
// 3 Cycles Simple Fixed-point (SFX) operations, 2 input operands
def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10SX_Read, P10SX_Read],
(instrs
MFBHRBE,
MTMSR,
MTMSRD
)>;
// 2-way crack instructions
// 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 1 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
)>;