17f2b7720SXuan Hupackage xiangshan.backend.decode 27f2b7720SXuan Hu 3d91483a6Sfdyimport chipsalliance.rocketchip.config.Parameters 4d91483a6Sfdyimport chisel3._ 5912e2179SXuan Huimport chisel3.util.BitPat.bitPatToUInt 67f2b7720SXuan Huimport chisel3.util._ 73b739f49SXuan Huimport freechips.rocketchip.util.uintToBitPat 8d91483a6Sfdyimport freechips.rocketchip.rocket.Instructions._ 9d91483a6Sfdyimport utils._ 10d91483a6Sfdyimport xiangshan.ExceptionNO.illegalInstr 11730cfbc0SXuan Huimport xiangshan.backend.fu.FuType 12d91483a6Sfdyimport xiangshan._ 13efdf5c1cSxiaofeibao-xjtuimport yunsuan.{VfpuType, VipuType, VimacType, VpermType, VialuFixType, VfaluType, VfmaType, VfdivType} 147f2b7720SXuan Hu 15b65b9ebaSXuan Huabstract class VecDecode extends XSDecodeBase { 167f2b7720SXuan Hu def generate() : List[BitPat] 177f2b7720SXuan Hu def asOldDecodeOutput(): List[BitPat] = { 18912e2179SXuan Hu val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate() 197f2b7720SXuan Hu List (src1, src2, src3, fu, fuOp, xWen, fWen, xsTrap, noSpec, blockBack, flushPipe, selImm) 207f2b7720SXuan Hu } 21912e2179SXuan Hu def asFirstStageDecodeOutput(): List[BitPat] = { 22912e2179SXuan Hu val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate() 23912e2179SXuan Hu List (src1, src2, src3, fu, fuOp, xWen, fWen, bitPatToUInt(vWen) | bitPatToUInt(mWen), xsTrap, noSpec, blockBack, flushPipe, selImm) 24912e2179SXuan Hu } 257f2b7720SXuan Hu} 267f2b7720SXuan Hu 2717ec87f2SXuan Hucase class OPIVV(fu: Int, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopSplitType: BitPat = UopSplitType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 287f2b7720SXuan Hu def generate() : List[BitPat] = { 29e2695e90SzhanglyGit XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType, 30b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 317f2b7720SXuan Hu } 327f2b7720SXuan Hu} 337f2b7720SXuan Hu 3417ec87f2SXuan Hucase class OPIVX(fu: Int, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopSplitType: BitPat = UopSplitType.VEC_VXV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 3558c35d23Shuxuan0307 def generate() : List[BitPat] = { 36e2695e90SzhanglyGit XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType, 37b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 3858c35d23Shuxuan0307 } 397f2b7720SXuan Hu} 407f2b7720SXuan Hu 4117ec87f2SXuan Hucase class OPIVI(fu: Int, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, selImm: BitPat = SelImm.IMM_OPIVIS, uopSplitType: BitPat = UopSplitType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 4258c35d23Shuxuan0307 def generate() : List[BitPat] = { 43e2695e90SzhanglyGit XSDecode(SrcType.imm, SrcType.vp, src3, fu, fuOp, selImm, uopSplitType, 44b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 4558c35d23Shuxuan0307 } 467f2b7720SXuan Hu} 477f2b7720SXuan Hu 4817ec87f2SXuan Hucase class OPMVV(vdRen: Boolean, fu: Int, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase { 49c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 507f2b7720SXuan Hu def generate() : List[BitPat] = { 51e2695e90SzhanglyGit XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType, xWen, F, vWen, mWen, F, F, F, F).generate() 527f2b7720SXuan Hu } 537f2b7720SXuan Hu} 547f2b7720SXuan Hu 5517ec87f2SXuan Hucase class OPMVX(vdRen: Boolean, fu: Int, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase { 56c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 57c6661c33SHaojin Tang def generate() : List[BitPat] = { 58e2695e90SzhanglyGit XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType, 59b65b9ebaSXuan Hu xWen = xWen, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 60c6661c33SHaojin Tang } 617f2b7720SXuan Hu} 627f2b7720SXuan Hu 6317ec87f2SXuan Hucase class OPFVV(src1: BitPat, src3: BitPat, fu: Int, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase { 64b448988dSczw def generate() : List[BitPat] = { 65e2695e90SzhanglyGit XSDecode(src1, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType, 66b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 67b448988dSczw } 687f2b7720SXuan Hu} 697f2b7720SXuan Hu 70bdda74fdSxiaofeibao-xjtucase class OPFFF(src1: BitPat, src3: BitPat, fu: Int, fuOp: BitPat, xWen: Boolean, fWen: Boolean, vWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase { 71bdda74fdSxiaofeibao-xjtu def generate() : List[BitPat] = { 72bdda74fdSxiaofeibao-xjtu XSDecode(src1, SrcType.fp, src3, fu, fuOp, SelImm.X, uopSplitType, 73bdda74fdSxiaofeibao-xjtu xWen = xWen, fWen = fWen, vWen = vWen, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F, canRobCompress = T).generate() 74bdda74fdSxiaofeibao-xjtu } 75bdda74fdSxiaofeibao-xjtu} 76bdda74fdSxiaofeibao-xjtu 779bb931c8Sxiaofeibao-xjtucase class OPFVF(src1: BitPat, src3: BitPat, fu: Int, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy, src2: BitPat = SrcType.vp) extends XSDecodeBase { 787f2b7720SXuan Hu def generate() : List[BitPat] = { 799bb931c8Sxiaofeibao-xjtu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 80b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 817f2b7720SXuan Hu } 827f2b7720SXuan Hu} 837f2b7720SXuan Hu 84e2695e90SzhanglyGitcase class VSET(vli: Boolean, vtypei: Boolean, fuOp: BitPat, flushPipe: Boolean, selImm: BitPat, uopSplitType: BitPat = UopSplitType.DIR) extends XSDecodeBase { 85912e2179SXuan Hu def generate() : List[BitPat] = { 86912e2179SXuan Hu val src1 = if (vli) SrcType.imm else SrcType.xp 87912e2179SXuan Hu val src2 = if (vtypei) SrcType.imm else SrcType.xp 8817ec87f2SXuan Hu XSDecode(src1, src2, SrcType.X, FuType.vsetiwf, fuOp, selImm, uopSplitType, 899896b9c4Sfdy xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = flushPipe).generate() 90912e2179SXuan Hu } 917f2b7720SXuan Hu} 927f2b7720SXuan Hu 93912e2179SXuan Hucase class VLD(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, ff: Boolean = false, 944ee69032SzhanglyGit mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.VEC_US_LD) extends XSDecodeBase { 95912e2179SXuan Hu def generate() : List[BitPat] = { 96912e2179SXuan Hu val fu = FuType.vldu 97912e2179SXuan Hu val src1 = SrcType.xp 98912e2179SXuan Hu val src3 = SrcType.X 99e2695e90SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 100b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 101912e2179SXuan Hu } 102912e2179SXuan Hu} 103912e2179SXuan Hu 104912e2179SXuan Hucase class VST(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, 105e2695e90SzhanglyGit mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase { 106912e2179SXuan Hu def generate() : List[BitPat] = { 107912e2179SXuan Hu val fu = FuType.vstu 108912e2179SXuan Hu val src1 = SrcType.xp 109912e2179SXuan Hu val src3 = SrcType.vp 110e2695e90SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 111b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 112912e2179SXuan Hu } 1137f2b7720SXuan Hu} 1147f2b7720SXuan Hu 1157f2b7720SXuan Huobject VecDecoder extends DecodeConstants { 116b65b9ebaSXuan Hu val opivv: Array[(BitPat, XSDecodeBase)] = Array( 117d91483a6Sfdy VADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 118d91483a6Sfdy VSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 1197f2b7720SXuan Hu 120d91483a6Sfdy VMINU_VV -> OPIVV(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 121d91483a6Sfdy VMIN_VV -> OPIVV(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 122d91483a6Sfdy VMAXU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 123d91483a6Sfdy VMAX_VV -> OPIVV(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 12458c35d23Shuxuan0307 125d91483a6Sfdy VAND_VV -> OPIVV(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 126d91483a6Sfdy VOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 127d91483a6Sfdy VXOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 12858c35d23Shuxuan0307 129e2695e90SzhanglyGit VRGATHER_VV -> OPIVV(FuType.vppu, VpermType.vrgather, T, F, F, UopSplitType.VEC_RGATHER), 130e2695e90SzhanglyGit VRGATHEREI16_VV -> OPIVV(FuType.vppu, VpermType.vrgatherei16, T, F, F, UopSplitType.VEC_RGATHEREI16), 13158c35d23Shuxuan0307 132d91483a6Sfdy VADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 133e2695e90SzhanglyGit VMADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VVM), 134e2695e90SzhanglyGit VMADC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VVM), 13558c35d23Shuxuan0307 136d91483a6Sfdy VSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 137e2695e90SzhanglyGit VMSBC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VVM), 138e2695e90SzhanglyGit VMSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VVM), 13958c35d23Shuxuan0307 140d91483a6Sfdy VMERGE_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 14158c35d23Shuxuan0307 142d91483a6Sfdy VMV_V_V -> OPIVV(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 14358c35d23Shuxuan0307 144e2695e90SzhanglyGit VMSEQ_VV -> OPIVV(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VVM), 145e2695e90SzhanglyGit VMSNE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VVM), 146e2695e90SzhanglyGit VMSLTU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VVM), 147e2695e90SzhanglyGit VMSLT_VV -> OPIVV(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VVM), 148e2695e90SzhanglyGit VMSLEU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VVM), 149e2695e90SzhanglyGit VMSLE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VVM), 15058c35d23Shuxuan0307 151d91483a6Sfdy VSLL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 152d91483a6Sfdy VSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 153d91483a6Sfdy VSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 154e2695e90SzhanglyGit VNSRL_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WVV), 155e2695e90SzhanglyGit VNSRA_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WVV), 15658c35d23Shuxuan0307 157d91483a6Sfdy VSADDU_VV -> OPIVV(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 158d91483a6Sfdy VSADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 159d91483a6Sfdy VSSUBU_VV -> OPIVV(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 160d91483a6Sfdy VSSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 16158c35d23Shuxuan0307 162adf68ff3Sczw VSMUL_VV -> OPIVV(FuType.vimac, VimacType.vsmul, T, F, T, UopSplitType.VEC_VVV), 16358c35d23Shuxuan0307 164d91483a6Sfdy VSSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 165d91483a6Sfdy VSSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 16658c35d23Shuxuan0307 167e2695e90SzhanglyGit VNCLIPU_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WVV), 168e2695e90SzhanglyGit VNCLIP_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WVV), 169d91483a6Sfdy 170e2695e90SzhanglyGit VWREDSUMU_VS -> OPIVV(FuType.vipu, VipuType.vwredsumu_vs, T, F, F, UopSplitType.VEC_VWW), 171e2695e90SzhanglyGit VWREDSUM_VS -> OPIVV(FuType.vipu, VipuType.vwredsum_vs, T, F, F, UopSplitType.VEC_VWW), 1727f2b7720SXuan Hu ) 1737f2b7720SXuan Hu 174b65b9ebaSXuan Hu val opivx: Array[(BitPat, XSDecodeBase)] = Array( 175d91483a6Sfdy VADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 176d91483a6Sfdy VSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 177d91483a6Sfdy VRSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 17858c35d23Shuxuan0307 179d91483a6Sfdy VMINU_VX -> OPIVX(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 180d91483a6Sfdy VMIN_VX -> OPIVX(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 181d91483a6Sfdy VMAXU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 182d91483a6Sfdy VMAX_VX -> OPIVX(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 18358c35d23Shuxuan0307 184d91483a6Sfdy VAND_VX -> OPIVX(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 185d91483a6Sfdy VOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 186d91483a6Sfdy VXOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 18758c35d23Shuxuan0307 188e2695e90SzhanglyGit VRGATHER_VX -> OPIVX(FuType.vppu, VpermType.vrgather_vx, T, F, F, UopSplitType.VEC_RGATHER_VX), 18958c35d23Shuxuan0307 190e2695e90SzhanglyGit VSLIDEUP_VX -> OPIVX(FuType.vppu, VpermType.vslideup, T, F, F, UopSplitType.VEC_SLIDEUP), 191e2695e90SzhanglyGit VSLIDEDOWN_VX -> OPIVX(FuType.vppu, VpermType.vslidedown, T, F, F, UopSplitType.VEC_SLIDEDOWN), 19258c35d23Shuxuan0307 193d91483a6Sfdy VADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 194e2695e90SzhanglyGit VMADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VXM), 195e2695e90SzhanglyGit VMADC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VXM), 196d91483a6Sfdy VSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 197e2695e90SzhanglyGit VMSBC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VXM), 198e2695e90SzhanglyGit VMSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VXM), 19958c35d23Shuxuan0307 200d91483a6Sfdy VMERGE_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 20158c35d23Shuxuan0307 202d91483a6Sfdy VMV_V_X -> OPIVX(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 20358c35d23Shuxuan0307 204e2695e90SzhanglyGit VMSEQ_VX -> OPIVX(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VXM), 205e2695e90SzhanglyGit VMSNE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VXM), 206e2695e90SzhanglyGit VMSLTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VXM), 207e2695e90SzhanglyGit VMSLT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VXM), 208e2695e90SzhanglyGit VMSLEU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VXM), 209e2695e90SzhanglyGit VMSLE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VXM), 210e2695e90SzhanglyGit VMSGTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, UopSplitType.VEC_VXM), 211e2695e90SzhanglyGit VMSGT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, UopSplitType.VEC_VXM), 21258c35d23Shuxuan0307 213d91483a6Sfdy VSLL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 214d91483a6Sfdy VSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 215d91483a6Sfdy VSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 216e2695e90SzhanglyGit VNSRL_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WXV), 217e2695e90SzhanglyGit VNSRA_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WXV), 218d91483a6Sfdy 219d91483a6Sfdy VSADDU_VX -> OPIVX(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 220d91483a6Sfdy VSADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 221d91483a6Sfdy VSSUBU_VX -> OPIVX(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 222d91483a6Sfdy VSSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 22358c35d23Shuxuan0307 2248fb63ad6SXuan Hu VSMUL_VX -> OPIVX(FuType.vimac, VimacType.vsmul, T, F, T, UopSplitType.VEC_VXV), 22558c35d23Shuxuan0307 226d91483a6Sfdy VSSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 227d91483a6Sfdy VSSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 22858c35d23Shuxuan0307 229e2695e90SzhanglyGit VNCLIPU_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WXV), 230e2695e90SzhanglyGit VNCLIP_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WXV), 23158c35d23Shuxuan0307 ) 23258c35d23Shuxuan0307 233b65b9ebaSXuan Hu val opivi: Array[(BitPat, XSDecodeBase)] = Array( 234d91483a6Sfdy VADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 235d91483a6Sfdy VRSUB_VI -> OPIVI(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 23658c35d23Shuxuan0307 237d91483a6Sfdy VAND_VI -> OPIVI(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 238d91483a6Sfdy VOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 239d91483a6Sfdy VXOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 24058c35d23Shuxuan0307 241e2695e90SzhanglyGit VRGATHER_VI -> OPIVI(FuType.vppu, VpermType.vrgather, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_RGATHER), 24258c35d23Shuxuan0307 243e2695e90SzhanglyGit VSLIDEUP_VI -> OPIVI(FuType.vppu, VpermType.vslideup, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_ISLIDEUP), 244e2695e90SzhanglyGit VSLIDEDOWN_VI -> OPIVI(FuType.vppu, VpermType.vslidedown, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_ISLIDEDOWN), 24558c35d23Shuxuan0307 246d91483a6Sfdy VADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 247e2695e90SzhanglyGit VMADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vvm, T, F, F, uopSplitType = UopSplitType.VEC_VVM), 248e2695e90SzhanglyGit VMADC_VI -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vv, T, F, F, uopSplitType = UopSplitType.VEC_VVM), 24958c35d23Shuxuan0307 250d91483a6Sfdy VMERGE_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 25158c35d23Shuxuan0307 252d91483a6Sfdy VMV_V_I -> OPIVI(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 25358c35d23Shuxuan0307 254e2695e90SzhanglyGit VMSEQ_VI -> OPIVI(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM), 255e2695e90SzhanglyGit VMSNE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM), 256e2695e90SzhanglyGit VMSLEU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_VVM), 257e2695e90SzhanglyGit VMSLE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM), 258e2695e90SzhanglyGit VMSGTU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_VVM), 259e2695e90SzhanglyGit VMSGT_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM), 26058c35d23Shuxuan0307 261d91483a6Sfdy VSLL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsll_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 262d91483a6Sfdy VSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 263d91483a6Sfdy VSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vsra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 264e2695e90SzhanglyGit VNSRL_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WVV), 265e2695e90SzhanglyGit VNSRA_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WVV), 26658c35d23Shuxuan0307 267d91483a6Sfdy VSADDU_VI -> OPIVI(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T, selImm = SelImm.IMM_OPIVIU), 268d91483a6Sfdy VSADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 26958c35d23Shuxuan0307 270d91483a6Sfdy VSSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 271d91483a6Sfdy VSSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vssra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 27258c35d23Shuxuan0307 273e2695e90SzhanglyGit VNCLIPU_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WVV), 274e2695e90SzhanglyGit VNCLIP_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, uopSplitType = UopSplitType.VEC_WVV), 275d91483a6Sfdy 276d91483a6Sfdy VMV1R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 277d91483a6Sfdy VMV2R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 278d91483a6Sfdy VMV4R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 279d91483a6Sfdy VMV8R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 28058c35d23Shuxuan0307 ) 2817f2b7720SXuan Hu 282b65b9ebaSXuan Hu val opmvv: Array[(BitPat, XSDecodeBase)] = Array( 283e2695e90SzhanglyGit VAADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VVV), 284e2695e90SzhanglyGit VAADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VVV), 285e2695e90SzhanglyGit VASUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VVV), 286e2695e90SzhanglyGit VASUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VVV), 287adf68ff3Sczw VCOMPRESS_VM -> OPMVV(T, FuType.vppu, VpermType.vcompress, F, T, F, UopSplitType.VEC_COMPRESS), 288e2695e90SzhanglyGit VCPOP_M -> OPMVV(T, FuType.vipu, VipuType.vcpop_m, T, F, F, UopSplitType.VEC_M0X), 289d91483a6Sfdy VDIV_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 290d91483a6Sfdy VDIVU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 291e2695e90SzhanglyGit VFIRST_M -> OPMVV(T, FuType.vipu, VipuType.vfirst_m, T, F, F, UopSplitType.VEC_M0X_VFIRST), 292e2695e90SzhanglyGit VID_V -> OPMVV(T, FuType.vipu, VipuType.vid_v, F, T, F, UopSplitType.VEC_MVV), 293e2695e90SzhanglyGit VIOTA_M -> OPMVV(T, FuType.vipu, VipuType.viota_m, F, T, F, UopSplitType.VEC_MVV), 294b65b9ebaSXuan Hu 295adf68ff3Sczw VMACC_VV -> OPMVV(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VVV), 296b65b9ebaSXuan Hu 297adf68ff3Sczw VMADD_VV -> OPMVV(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VVV), 298e2695e90SzhanglyGit VMAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmand_mm, F, T, F, UopSplitType.VEC_MMM), 299e2695e90SzhanglyGit VMANDN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmandn_mm, F, T, F, UopSplitType.VEC_MMM), 300e2695e90SzhanglyGit VMNAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnand_mm, F, T, F, UopSplitType.VEC_MMM), 301e2695e90SzhanglyGit VMNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnor_mm, F, T, F, UopSplitType.VEC_MMM), 302e2695e90SzhanglyGit VMOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmor_mm, F, T, F, UopSplitType.VEC_MMM), 303e2695e90SzhanglyGit VMORN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmorn_mm, F, T, F, UopSplitType.VEC_MMM), 304e2695e90SzhanglyGit VMXNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxnor_mm, F, T, F, UopSplitType.VEC_MMM), 305e2695e90SzhanglyGit VMXOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxor_mm, F, T, F, UopSplitType.VEC_MMM), 306e2695e90SzhanglyGit VMSBF_M -> OPMVV(T, FuType.vipu, VipuType.vmsbf_m, F, T, F, UopSplitType.VEC_M0M), 307e2695e90SzhanglyGit VMSIF_M -> OPMVV(T, FuType.vipu, VipuType.vmsif_m, F, T, F, UopSplitType.VEC_M0M), 308e2695e90SzhanglyGit VMSOF_M -> OPMVV(T, FuType.vipu, VipuType.vmsof_m, F, T, F, UopSplitType.VEC_M0M), 309adf68ff3Sczw VMUL_VV -> OPMVV(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VVV), 310adf68ff3Sczw VMULH_VV -> OPMVV(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VVV), 311adf68ff3Sczw VMULHSU_VV -> OPMVV(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VVV), 312adf68ff3Sczw VMULHU_VV -> OPMVV(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VVV), 313b65b9ebaSXuan Hu 314d91483a6Sfdy VMV_X_S -> OPMVV(T, FuType.vipu, VipuType.dummy, T, F, F), 315adf68ff3Sczw VNMSAC_VV -> OPMVV(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VVV), 316adf68ff3Sczw VNMSUB_VV -> OPMVV(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VVV), 317e2695e90SzhanglyGit VREDAND_VS -> OPMVV(T, FuType.vipu, VipuType.vredand_vs, F, T, F, UopSplitType.VEC_VRED), 318e2695e90SzhanglyGit VREDMAX_VS -> OPMVV(T, FuType.vipu, VipuType.vredmax_vs, F, T, F, UopSplitType.VEC_VRED), 319e2695e90SzhanglyGit VREDMAXU_VS -> OPMVV(T, FuType.vipu, VipuType.vredmaxu_vs, F, T, F, UopSplitType.VEC_VRED), 320e2695e90SzhanglyGit VREDMIN_VS -> OPMVV(T, FuType.vipu, VipuType.vredmin_vs, F, T, F, UopSplitType.VEC_VRED), 321e2695e90SzhanglyGit VREDMINU_VS -> OPMVV(T, FuType.vipu, VipuType.vredminu_vs, F, T, F, UopSplitType.VEC_VRED), 322e2695e90SzhanglyGit VREDOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredor_vs, F, T, F, UopSplitType.VEC_VRED), 323e2695e90SzhanglyGit VREDSUM_VS -> OPMVV(T, FuType.vipu, VipuType.vredsum_vs, F, T, F, UopSplitType.VEC_VRED), 324e2695e90SzhanglyGit VREDXOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredxor_vs, F, T, F, UopSplitType.VEC_VRED), 325d91483a6Sfdy VREM_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 326d91483a6Sfdy VREMU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 327e2695e90SzhanglyGit VSEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf2, F, T, F, UopSplitType.VEC_EXT2), 328e2695e90SzhanglyGit VSEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf4, F, T, F, UopSplitType.VEC_EXT4), 329e2695e90SzhanglyGit VSEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf8, F, T, F, UopSplitType.VEC_EXT8), 330e2695e90SzhanglyGit VZEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf2, F, T, F, UopSplitType.VEC_EXT2), 331e2695e90SzhanglyGit VZEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf4, F, T, F, UopSplitType.VEC_EXT4), 332e2695e90SzhanglyGit VZEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf8, F, T, F, UopSplitType.VEC_EXT8), 333e2695e90SzhanglyGit VWADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VVW), 334e2695e90SzhanglyGit VWADD_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WVW), 335e2695e90SzhanglyGit VWADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VVW), 336e2695e90SzhanglyGit VWADDU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WVW), 337adf68ff3Sczw VWMACC_VV -> OPMVV(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VVW), 338adf68ff3Sczw VWMACCSU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VVW), 339adf68ff3Sczw VWMACCU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VVW), 340adf68ff3Sczw VWMUL_VV -> OPMVV(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VVW), 341adf68ff3Sczw VWMULSU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VVW), 342adf68ff3Sczw VWMULU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VVW), 343e2695e90SzhanglyGit VWSUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VVW), 344e2695e90SzhanglyGit VWSUB_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WVW), 345e2695e90SzhanglyGit VWSUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VVW), 346e2695e90SzhanglyGit VWSUBU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WVW), 347c6661c33SHaojin Tang ) 348912e2179SXuan Hu 349b65b9ebaSXuan Hu val opmvx: Array[(BitPat, XSDecodeBase)] = Array( 350e2695e90SzhanglyGit VAADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VXV), 351e2695e90SzhanglyGit VAADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VXV), 352e2695e90SzhanglyGit VASUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VXV), 353e2695e90SzhanglyGit VASUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VXV), 354d91483a6Sfdy VDIV_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 355d91483a6Sfdy VDIVU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 356adf68ff3Sczw VMACC_VX -> OPMVX(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VXV), 357adf68ff3Sczw VMADD_VX -> OPMVX(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VXV), 358adf68ff3Sczw VMUL_VX -> OPMVX(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VXV), 359adf68ff3Sczw VMULH_VX -> OPMVX(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VXV), 360adf68ff3Sczw VMULHSU_VX -> OPMVX(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VXV), 361adf68ff3Sczw VMULHU_VX -> OPMVX(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VXV), 362e2695e90SzhanglyGit VMV_S_X -> OPMVX(T, FuType.vipu, VipuType.vmv_s_x, F, T, F, UopSplitType.VEC_0XV), 363b65b9ebaSXuan Hu 364adf68ff3Sczw VNMSAC_VX -> OPMVX(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VXV), 365adf68ff3Sczw VNMSUB_VX -> OPMVX(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VXV), 366d91483a6Sfdy VREM_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 367d91483a6Sfdy VREMU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 368b65b9ebaSXuan Hu 369e2695e90SzhanglyGit VSLIDE1DOWN_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1down, F, T, F, UopSplitType.VEC_SLIDE1DOWN), 370e2695e90SzhanglyGit VSLIDE1UP_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1up, F, T, F, UopSplitType.VEC_SLIDE1UP), 371e2695e90SzhanglyGit VWADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VXW), 372e2695e90SzhanglyGit VWADD_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WXW), 373e2695e90SzhanglyGit VWADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VXW), 374e2695e90SzhanglyGit VWADDU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WXW), 375b65b9ebaSXuan Hu 376b65b9ebaSXuan Hu // OutOfMemoryError 377adf68ff3Sczw VWMACC_VX -> OPMVX(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VXW), 378adf68ff3Sczw VWMACCSU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VXW), 379adf68ff3Sczw VWMACCU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VXW), 380b65b9ebaSXuan Hu 381adf68ff3Sczw VWMACCUS_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccus, F, T, F, UopSplitType.VEC_VXW), 382adf68ff3Sczw VWMUL_VX -> OPMVX(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VXW), 383adf68ff3Sczw VWMULSU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VXW), 384b65b9ebaSXuan Hu // Ok 385adf68ff3Sczw VWMULU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VXW), 386e2695e90SzhanglyGit VWSUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VXW), 387e2695e90SzhanglyGit VWSUB_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WXW), 388e2695e90SzhanglyGit VWSUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VXW), 389e2695e90SzhanglyGit VWSUBU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WXW), 390c6661c33SHaojin Tang ) 3917f2b7720SXuan Hu 392bdda74fdSxiaofeibao-xjtu val opfff: Array[(BitPat, XSDecodeBase)] = Array( 393bdda74fdSxiaofeibao-xjtu // Scalar Float Point 394bdda74fdSxiaofeibao-xjtu FADD_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.SCA_SIM), 395bdda74fdSxiaofeibao-xjtu FADD_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.SCA_SIM), 396bdda74fdSxiaofeibao-xjtu FSUB_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsub, F, T, F, UopSplitType.SCA_SIM), 397bdda74fdSxiaofeibao-xjtu FSUB_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsub, F, T, F, UopSplitType.SCA_SIM), 398bdda74fdSxiaofeibao-xjtu FEQ_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfeq , T, F, F, UopSplitType.SCA_SIM), 399bdda74fdSxiaofeibao-xjtu FLT_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vflt , T, F, F, UopSplitType.SCA_SIM), 400bdda74fdSxiaofeibao-xjtu FLE_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfle , T, F, F, UopSplitType.SCA_SIM), 401bdda74fdSxiaofeibao-xjtu FEQ_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfeq , T, F, F, UopSplitType.SCA_SIM), 402bdda74fdSxiaofeibao-xjtu FLT_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vflt , T, F, F, UopSplitType.SCA_SIM), 403bdda74fdSxiaofeibao-xjtu FLE_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfle , T, F, F, UopSplitType.SCA_SIM), 404bdda74fdSxiaofeibao-xjtu FMIN_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.SCA_SIM), 405bdda74fdSxiaofeibao-xjtu FMIN_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.SCA_SIM), 406bdda74fdSxiaofeibao-xjtu FMAX_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.SCA_SIM), 407bdda74fdSxiaofeibao-xjtu FMAX_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.SCA_SIM), 408bdda74fdSxiaofeibao-xjtu // donot wflags 409bdda74fdSxiaofeibao-xjtu FCLASS_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfclass, T, F, F, UopSplitType.SCA_SIM), 410bdda74fdSxiaofeibao-xjtu FCLASS_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfclass, T, F, F, UopSplitType.SCA_SIM), 411bdda74fdSxiaofeibao-xjtu FSGNJ_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnj , F, T, F, UopSplitType.SCA_SIM), 412bdda74fdSxiaofeibao-xjtu FSGNJ_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnj , F, T, F, UopSplitType.SCA_SIM), 413bdda74fdSxiaofeibao-xjtu FSGNJX_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjx, F, T, F, UopSplitType.SCA_SIM), 414bdda74fdSxiaofeibao-xjtu FSGNJX_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjx, F, T, F, UopSplitType.SCA_SIM), 415bdda74fdSxiaofeibao-xjtu FSGNJN_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjn, F, T, F, UopSplitType.SCA_SIM), 416bdda74fdSxiaofeibao-xjtu FSGNJN_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjn, F, T, F, UopSplitType.SCA_SIM), 417bdda74fdSxiaofeibao-xjtu 418bdda74fdSxiaofeibao-xjtu FMUL_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfma , VfmaType.vfmul, F, T, F, UopSplitType.SCA_SIM), 419bdda74fdSxiaofeibao-xjtu FMUL_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfma , VfmaType.vfmul, F, T, F, UopSplitType.SCA_SIM), 420bdda74fdSxiaofeibao-xjtu 421bdda74fdSxiaofeibao-xjtu FDIV_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfdiv , F, T, F, UopSplitType.SCA_SIM), 422bdda74fdSxiaofeibao-xjtu FDIV_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfdiv , F, T, F, UopSplitType.SCA_SIM), 423bdda74fdSxiaofeibao-xjtu FSQRT_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfsqrt, F, T, F, UopSplitType.SCA_SIM), 424bdda74fdSxiaofeibao-xjtu FSQRT_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfsqrt, F, T, F, UopSplitType.SCA_SIM), 425bdda74fdSxiaofeibao-xjtu 426bdda74fdSxiaofeibao-xjtu FMADD_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.SCA_SIM), 427bdda74fdSxiaofeibao-xjtu FMSUB_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.SCA_SIM), 428bdda74fdSxiaofeibao-xjtu FNMADD_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.SCA_SIM), 429bdda74fdSxiaofeibao-xjtu FNMSUB_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.SCA_SIM), 430bdda74fdSxiaofeibao-xjtu FMADD_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.SCA_SIM), 431bdda74fdSxiaofeibao-xjtu FMSUB_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.SCA_SIM), 432bdda74fdSxiaofeibao-xjtu FNMADD_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.SCA_SIM), 433bdda74fdSxiaofeibao-xjtu FNMSUB_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.SCA_SIM), 434bdda74fdSxiaofeibao-xjtu ) 435bdda74fdSxiaofeibao-xjtu 436b65b9ebaSXuan Hu val opfvv: Array[(BitPat, XSDecodeBase)] = Array( 437b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 438*cb81ef42Sxiaofeibao-xjtu VFADD_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.VEC_VVV), 439*cb81ef42Sxiaofeibao-xjtu VFSUB_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsub, F, T, F, UopSplitType.VEC_VVV), 440b448988dSczw 441b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 442*cb81ef42Sxiaofeibao-xjtu VFWADD_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd , F, T, F, UopSplitType.VEC_VVW), 443*cb81ef42Sxiaofeibao-xjtu VFWSUB_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub , F, T, F, UopSplitType.VEC_VVW), 444*cb81ef42Sxiaofeibao-xjtu VFWADD_WV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd_w, F, T, F, UopSplitType.VEC_WVW), 445*cb81ef42Sxiaofeibao-xjtu VFWSUB_WV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub_w, F, T, F, UopSplitType.VEC_WVW), 446b448988dSczw 447b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 448*cb81ef42Sxiaofeibao-xjtu VFMUL_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfma, VfmaType.vfmul, F, T, F, UopSplitType.VEC_VVV), 449*cb81ef42Sxiaofeibao-xjtu VFDIV_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv , F, T, F, UopSplitType.VEC_VVV), 450b448988dSczw 451b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 452*cb81ef42Sxiaofeibao-xjtu VFWMUL_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfma, VfmaType.vfmul_w, F, T, F, UopSplitType.VEC_VVW), 453b448988dSczw 454b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 455b19366b2Sxiaofeibao-xjtu VFMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.VEC_VVV), 456b19366b2Sxiaofeibao-xjtu VFNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.VEC_VVV), 457b19366b2Sxiaofeibao-xjtu VFMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.VEC_VVV), 458b19366b2Sxiaofeibao-xjtu VFNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.VEC_VVV), 459b19366b2Sxiaofeibao-xjtu VFMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmadd , F, T, F, UopSplitType.VEC_VVV), 460b19366b2Sxiaofeibao-xjtu VFNMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmadd, F, T, F, UopSplitType.VEC_VVV), 461b19366b2Sxiaofeibao-xjtu VFMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsub , F, T, F, UopSplitType.VEC_VVV), 462b19366b2Sxiaofeibao-xjtu VFNMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsub, F, T, F, UopSplitType.VEC_VVV), 463b448988dSczw 464b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 465b19366b2Sxiaofeibao-xjtu VFWMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmacc_w , F, T, F, UopSplitType.VEC_VVW), 466b19366b2Sxiaofeibao-xjtu VFWNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc_w, F, T, F, UopSplitType.VEC_VVW), 467b19366b2Sxiaofeibao-xjtu VFWMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsac_w , F, T, F, UopSplitType.VEC_VVW), 468b19366b2Sxiaofeibao-xjtu VFWNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac_w, F, T, F, UopSplitType.VEC_VVW), 469b448988dSczw 470b448988dSczw // 13.8. Vector Floating-Point Square-Root Instruction 471*cb81ef42Sxiaofeibao-xjtu VFSQRT_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfdiv, VfdivType.vfsqrt, F, T, F, UopSplitType.VEC_VVV), 472b448988dSczw 473b448988dSczw // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction 474912e2179SXuan Hu VFRSQRT7_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 475b448988dSczw 476b448988dSczw // 13.10. Vector Floating-Point Reciprocal Estimate Instruction 477912e2179SXuan Hu VFREC7_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 478b448988dSczw 479b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 480*cb81ef42Sxiaofeibao-xjtu VFMIN_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.VEC_VVV), 481*cb81ef42Sxiaofeibao-xjtu VFMAX_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.VEC_VVV), 482b448988dSczw 483b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 484*cb81ef42Sxiaofeibao-xjtu VFSGNJ_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnj , F, T, F, UopSplitType.VEC_VVV), 485*cb81ef42Sxiaofeibao-xjtu VFSGNJN_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnjn, F, T, F, UopSplitType.VEC_VVV), 486*cb81ef42Sxiaofeibao-xjtu VFSGNJX_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnjx, F, T, F, UopSplitType.VEC_VVV), 487b448988dSczw 488b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 489f06d6d60Sxiaofeibao-xjtu VMFEQ_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfeq, F, T, F, UopSplitType.VEC_VVM), 490f06d6d60Sxiaofeibao-xjtu VMFNE_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfne, F, T, F, UopSplitType.VEC_VVM), 491f06d6d60Sxiaofeibao-xjtu VMFLT_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vflt, F, T, F, UopSplitType.VEC_VVM), 492f06d6d60Sxiaofeibao-xjtu VMFLE_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfle, F, T, F, UopSplitType.VEC_VVM), 493b448988dSczw 494b448988dSczw // 13.14. Vector Floating-Point Classify Instruction 495f06d6d60Sxiaofeibao-xjtu VFCLASS_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfalu, VfaluType.vfclass, F, T, F, UopSplitType.VEC_VVV), 496b448988dSczw 497b448988dSczw // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions 498912e2179SXuan Hu VFCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 499912e2179SXuan Hu VFCVT_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 500912e2179SXuan Hu VFCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 501912e2179SXuan Hu VFCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 502912e2179SXuan Hu VFCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 503912e2179SXuan Hu VFCVT_F_X_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 504b448988dSczw 505b448988dSczw // 13.18. Widening Floating-Point/Integer Type-Convert Instructions 506912e2179SXuan Hu VFWCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 507912e2179SXuan Hu VFWCVT_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 508912e2179SXuan Hu VFWCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 509912e2179SXuan Hu VFWCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 510912e2179SXuan Hu VFWCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 511912e2179SXuan Hu VFWCVT_F_X_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 512912e2179SXuan Hu VFWCVT_F_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 513b448988dSczw 514b65b9ebaSXuan Hu // ! 515b448988dSczw // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions 516912e2179SXuan Hu VFNCVT_XU_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 517912e2179SXuan Hu VFNCVT_X_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 518912e2179SXuan Hu VFNCVT_RTZ_XU_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 519912e2179SXuan Hu VFNCVT_RTZ_X_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 520912e2179SXuan Hu VFNCVT_F_XU_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 521912e2179SXuan Hu VFNCVT_F_X_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 522912e2179SXuan Hu VFNCVT_F_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 523912e2179SXuan Hu VFNCVT_ROD_F_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 524b448988dSczw // 14.3. Vector Single-Width Floating-Point Reduction Instructions 525*cb81ef42Sxiaofeibao-xjtu VFREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredosum, F, T, F, UopSplitType.VEC_VFREDOSUM), 526*cb81ef42Sxiaofeibao-xjtu VFREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredusum, F, T, F, UopSplitType.VEC_VFRED), 527*cb81ef42Sxiaofeibao-xjtu VFREDMAX_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredmax , F, T, F, UopSplitType.VEC_VFRED), 528*cb81ef42Sxiaofeibao-xjtu VFREDMIN_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredmin , F, T, F, UopSplitType.VEC_VFRED), 529b448988dSczw 530b448988dSczw // 14.4. Vector Widening Floating-Point Reduction Instructions 531*cb81ef42Sxiaofeibao-xjtu VFWREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfwredosum, F, T, F, UopSplitType.VEC_VFREDOSUM), 532*cb81ef42Sxiaofeibao-xjtu VFWREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfpuType.dummy, F, T, F), 533b448988dSczw 534b448988dSczw ) 5357f2b7720SXuan Hu 536b65b9ebaSXuan Hu val opfvf: Array[(BitPat, XSDecodeBase)] = Array( 537b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 538*cb81ef42Sxiaofeibao-xjtu VFADD_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.VEC_VFV), 539*cb81ef42Sxiaofeibao-xjtu VFSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsub , F, T, F, UopSplitType.VEC_VFV), 540*cb81ef42Sxiaofeibao-xjtu VFRSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsub , F, T, F, UopSplitType.VEC_VFV), 541b448988dSczw 542b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 543*cb81ef42Sxiaofeibao-xjtu VFWADD_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd, F, T, F, UopSplitType.VEC_VFW), 544*cb81ef42Sxiaofeibao-xjtu VFWSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub, F, T, F, UopSplitType.VEC_VFW), 545*cb81ef42Sxiaofeibao-xjtu VFWADD_WF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd_w, F, T, F, UopSplitType.VEC_WFW), 546*cb81ef42Sxiaofeibao-xjtu VFWSUB_WF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub_w, F, T, F, UopSplitType.VEC_WFW), 547b448988dSczw 548b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 549*cb81ef42Sxiaofeibao-xjtu VFMUL_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfma, VfmaType.vfmul, F, T, F, UopSplitType.VEC_VFV), 550*cb81ef42Sxiaofeibao-xjtu VFDIV_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv, F, T, F, UopSplitType.VEC_VFV), 551*cb81ef42Sxiaofeibao-xjtu VFRDIV_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv, F, T, F, UopSplitType.VEC_VFV), 552b448988dSczw 553b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 554*cb81ef42Sxiaofeibao-xjtu VFWMUL_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfma, VfmaType.vfmul_w, F, T, F, UopSplitType.VEC_VFW), 555b448988dSczw 556b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 557b19366b2Sxiaofeibao-xjtu VFMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.VEC_VFV), 558b19366b2Sxiaofeibao-xjtu VFNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.VEC_VFV), 559b19366b2Sxiaofeibao-xjtu VFMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.VEC_VFV), 560b19366b2Sxiaofeibao-xjtu VFNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.VEC_VFV), 561b19366b2Sxiaofeibao-xjtu VFMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmadd , F, T, F, UopSplitType.VEC_VFV), 562b19366b2Sxiaofeibao-xjtu VFNMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmadd, F, T, F, UopSplitType.VEC_VFV), 563b19366b2Sxiaofeibao-xjtu VFMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsub , F, T, F, UopSplitType.VEC_VFV), 564b19366b2Sxiaofeibao-xjtu VFNMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsub, F, T, F, UopSplitType.VEC_VFV), 565b448988dSczw 566b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 567b19366b2Sxiaofeibao-xjtu VFWMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmacc_w , F, T, F, UopSplitType.VEC_VFW), 568b19366b2Sxiaofeibao-xjtu VFWNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc_w, F, T, F, UopSplitType.VEC_VFW), 569b19366b2Sxiaofeibao-xjtu VFWMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsac_w , F, T, F, UopSplitType.VEC_VFW), 570b19366b2Sxiaofeibao-xjtu VFWNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac_w, F, T, F, UopSplitType.VEC_VFW), 571b448988dSczw 572b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 573*cb81ef42Sxiaofeibao-xjtu VFMIN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.VEC_VFV), 574*cb81ef42Sxiaofeibao-xjtu VFMAX_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.VEC_VFV), 575b448988dSczw 576b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 577*cb81ef42Sxiaofeibao-xjtu VFSGNJ_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnj , F, T, F, UopSplitType.VEC_VFV), 578*cb81ef42Sxiaofeibao-xjtu VFSGNJN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnjn, F, T, F, UopSplitType.VEC_VFV), 579*cb81ef42Sxiaofeibao-xjtu VFSGNJX_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnjx, F, T, F, UopSplitType.VEC_VFV), 580b448988dSczw 581b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 582f06d6d60Sxiaofeibao-xjtu VMFEQ_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfeq, F, F, T, UopSplitType.VEC_VFM), 583f06d6d60Sxiaofeibao-xjtu VMFNE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfne, F, F, T, UopSplitType.VEC_VFM), 584f06d6d60Sxiaofeibao-xjtu VMFLT_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vflt, F, F, T, UopSplitType.VEC_VFM), 585f06d6d60Sxiaofeibao-xjtu VMFLE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfle, F, F, T, UopSplitType.VEC_VFM), 586f06d6d60Sxiaofeibao-xjtu VMFGT_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfgt, F, F, T, UopSplitType.VEC_VFM), 587f06d6d60Sxiaofeibao-xjtu VMFGE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfge, F, F, T, UopSplitType.VEC_VFM), 588b448988dSczw 589b448988dSczw // 13.15. Vector Floating-Point Merge Instruction 590*cb81ef42Sxiaofeibao-xjtu VFMERGE_VFM -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmerge, F, T, F, UopSplitType.VEC_VFV), 591b448988dSczw 592b448988dSczw // 13.16. Vector Floating-Point Move Instruction 593*cb81ef42Sxiaofeibao-xjtu VFMV_V_F -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmv, F, T, F),// src2=SrcType.X 594b448988dSczw 595b448988dSczw // 16.2. Floating-Point Scalar Move Instructions 5969bb931c8Sxiaofeibao-xjtu VFMV_F_S -> OPFVF(SrcType.X, SrcType.X, FuType.vfalu, VfaluType.vfmv_f_s, T, F, F, UopSplitType.SCA_SIM), // f[rd] = vs2[0] (rs1=0) 5979bb931c8Sxiaofeibao-xjtu VFMV_S_F -> OPFVF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmv_s_f, F, T, F, UopSplitType.VEC_VFV, src2 = SrcType.X), 598b448988dSczw // 16.3.3. Vector Slide1up 599e2695e90SzhanglyGit VFSLIDE1UP_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vppu, VpermType.vfslide1up, F, T, F, UopSplitType.VEC_FSLIDE1UP),// vd[0]=f[rs1], vd[i+1] = vs2[i] 600b448988dSczw 601b448988dSczw // 16.3.4. Vector Slide1down Instruction 602b448988dSczw // vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1] 603e2695e90SzhanglyGit VFSLIDE1DOWN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vppu, VpermType.vfslide1down, F, T, F, UopSplitType.VEC_FSLIDE1DOWN),// vd[i] = vs2[i+1], vd[vl-1]=f[rs1] 6047f2b7720SXuan Hu ) 6057f2b7720SXuan Hu 606b65b9ebaSXuan Hu val vset: Array[(BitPat, XSDecodeBase)] = Array( 607a32c56f4SXuan Hu VSETVLI -> VSET(vli = F, vtypei = T, VSETOpType.uvsetvcfg_xi, F, SelImm.IMM_VSETVLI), 608a32c56f4SXuan Hu VSETIVLI -> VSET(vli = T, vtypei = T, VSETOpType.uvsetvcfg_ii, F, SelImm.IMM_VSETIVLI), 609a32c56f4SXuan Hu VSETVL -> VSET(vli = F, vtypei = F, VSETOpType.uvsetvcfg_xx, T, SelImm.X), // flush pipe 610912e2179SXuan Hu ) 6117f2b7720SXuan Hu 612b65b9ebaSXuan Hu val vls: Array[(BitPat, XSDecodeBase)] = Array( 613912e2179SXuan Hu // 7.4. Vector Unit-Stride Instructions 614912e2179SXuan Hu VLE8_V -> VLD(SrcType.X, VlduType.dummy), 615912e2179SXuan Hu VLE16_V -> VLD(SrcType.X, VlduType.dummy), 616912e2179SXuan Hu VLE32_V -> VLD(SrcType.X, VlduType.dummy), 617912e2179SXuan Hu VLE64_V -> VLD(SrcType.X, VlduType.dummy), 618912e2179SXuan Hu VSE8_V -> VST(SrcType.X, VstuType.dummy), 619912e2179SXuan Hu VSE16_V -> VST(SrcType.X, VstuType.dummy), 620912e2179SXuan Hu VSE32_V -> VST(SrcType.X, VstuType.dummy), 621912e2179SXuan Hu VSE64_V -> VST(SrcType.X, VstuType.dummy), 622912e2179SXuan Hu VLM_V -> VLD(SrcType.X, VlduType.dummy, mask = T), 623912e2179SXuan Hu VSM_V -> VST(SrcType.X, VstuType.dummy, mask = T), 624912e2179SXuan Hu // 7.5. Vector Strided Instructions 625912e2179SXuan Hu VLSE8_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 626912e2179SXuan Hu VLSE16_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 627912e2179SXuan Hu VLSE32_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 628912e2179SXuan Hu VLSE64_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 629912e2179SXuan Hu VSSE8_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 630912e2179SXuan Hu VSSE16_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 631912e2179SXuan Hu VSSE32_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 632912e2179SXuan Hu VSSE64_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 633912e2179SXuan Hu // 7.6. Vector Indexed Instructions 634912e2179SXuan Hu VLUXEI8_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 635912e2179SXuan Hu VLUXEI16_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 636912e2179SXuan Hu VLUXEI32_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 637912e2179SXuan Hu VLUXEI64_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 638912e2179SXuan Hu VLOXEI8_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 639912e2179SXuan Hu VLOXEI16_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 640912e2179SXuan Hu VLOXEI32_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 641912e2179SXuan Hu VLOXEI64_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 642912e2179SXuan Hu VSUXEI8_V -> VLD(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 643912e2179SXuan Hu VSUXEI16_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 644912e2179SXuan Hu VSUXEI32_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 645912e2179SXuan Hu VSUXEI64_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 646912e2179SXuan Hu VSOXEI8_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 647912e2179SXuan Hu VSOXEI16_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 648912e2179SXuan Hu VSOXEI32_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 649912e2179SXuan Hu VSOXEI64_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 650912e2179SXuan Hu // 7.7. Unit-stride Fault-Only-First Loads 651912e2179SXuan Hu VLE8FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 652912e2179SXuan Hu VLE16FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 653912e2179SXuan Hu VLE32FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 654912e2179SXuan Hu VLE64FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 655912e2179SXuan Hu // 7.8. Vector Load/Store Segment Instructions 656912e2179SXuan Hu // 7.8.1. Vector Unit-Stride Segment Loads and Stores 657912e2179SXuan Hu // TODO 658912e2179SXuan Hu // 7.8.2. Vector Strided Segment Loads and Stores 659912e2179SXuan Hu // TODO 660912e2179SXuan Hu // 7.8.3. Vector Indexed Segment Loads and Stores 661912e2179SXuan Hu // TODO 662912e2179SXuan Hu // 7.9. Vector Load/Store Whole Register Instructions 663912e2179SXuan Hu VL1RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 664912e2179SXuan Hu VL1RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 665912e2179SXuan Hu VL1RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 666912e2179SXuan Hu VL1RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 667912e2179SXuan Hu VL2RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 668912e2179SXuan Hu VL2RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 669912e2179SXuan Hu VL2RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 670912e2179SXuan Hu VL2RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 671912e2179SXuan Hu VL4RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 672912e2179SXuan Hu VL4RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 673912e2179SXuan Hu VL4RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 674912e2179SXuan Hu VL4RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 675912e2179SXuan Hu VL8RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 676912e2179SXuan Hu VL8RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 677912e2179SXuan Hu VL8RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 678912e2179SXuan Hu VL8RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 679912e2179SXuan Hu VS1R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 680912e2179SXuan Hu VS2R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 681912e2179SXuan Hu VS4R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 682912e2179SXuan Hu VS8R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 683912e2179SXuan Hu ) 684912e2179SXuan Hu 685b65b9ebaSXuan Hu override val decodeArray: Array[(BitPat, XSDecodeBase)] = vset ++ vls ++ 686bdda74fdSxiaofeibao-xjtu opivv ++ opivx ++ opivi ++ opmvv ++ opmvx ++ opfvv ++ opfvf ++ opfff 6877f2b7720SXuan Hu} 688