//===--- 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, 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, 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, XSCMPEQQP, XSCMPEXPQP, XSCMPGEQP, XSCMPGTQP, XSCMPOQP, XSCMPUQP, XSMAXCQP, XSMINCQP, 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, 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, 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, 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 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, MTUDSCR, 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, 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, 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 BRD, BRH, BRH8, BRW, BRW8, LVSL, LVSR, LXVKQ, 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, XXPERMDI, XXPERMDIs, 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, 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, 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, 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, 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 )>;