17f2b7720SXuan Hupackage xiangshan.backend.decode 27f2b7720SXuan Hu 37f2b7720SXuan Huimport chipsalliance.rocketchip.config.Parameters 47f2b7720SXuan Huimport chisel3._ 5912e2179SXuan Huimport chisel3.util.BitPat.bitPatToUInt 67f2b7720SXuan Huimport chisel3.util._ 77f2b7720SXuan Huimport freechips.rocketchip.util.uintToBitPat 83a2e64c4SZhangZifeiimport freechips.rocketchip.rocket.Instructions._ 97f2b7720SXuan Huimport utils._ 107f2b7720SXuan Huimport xiangshan.ExceptionNO.illegalInstr 117f2b7720SXuan Huimport xiangshan._ 12*de9e1949Sczwimport yunsuan.{VfpuType, VipuType, VpermType, VialuFixType} 137f2b7720SXuan Hu 14b65b9ebaSXuan Huabstract class VecDecode extends XSDecodeBase { 157f2b7720SXuan Hu def generate() : List[BitPat] 167f2b7720SXuan Hu def asOldDecodeOutput(): List[BitPat] = { 17912e2179SXuan Hu val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate() 187f2b7720SXuan Hu List (src1, src2, src3, fu, fuOp, xWen, fWen, xsTrap, noSpec, blockBack, flushPipe, selImm) 197f2b7720SXuan Hu } 20912e2179SXuan Hu def asFirstStageDecodeOutput(): List[BitPat] = { 21912e2179SXuan Hu val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate() 22912e2179SXuan Hu List (src1, src2, src3, fu, fuOp, xWen, fWen, bitPatToUInt(vWen) | bitPatToUInt(mWen), xsTrap, noSpec, blockBack, flushPipe, selImm) 23912e2179SXuan Hu } 247f2b7720SXuan Hu} 257f2b7720SXuan Hu 267e79df6bSzhanglyGitcase class OPIVV(fu: BitPat, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopDivType: BitPat = UopDivType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 277f2b7720SXuan Hu def generate() : List[BitPat] = { 28acbea6c4SzhanglyGit XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 29b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 307f2b7720SXuan Hu } 317f2b7720SXuan Hu} 327f2b7720SXuan Hu 337e79df6bSzhanglyGitcase class OPIVX(fu: BitPat, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopDivType: BitPat = UopDivType.VEC_VXV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 3458c35d23Shuxuan0307 def generate() : List[BitPat] = { 35acbea6c4SzhanglyGit XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 36b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 3758c35d23Shuxuan0307 } 387f2b7720SXuan Hu} 397f2b7720SXuan Hu 40*de9e1949Sczwcase class OPIVI(fu: BitPat, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, selImm: BitPat = SelImm.IMM_OPIVIS, uopDivType: BitPat = UopDivType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 4158c35d23Shuxuan0307 def generate() : List[BitPat] = { 42acbea6c4SzhanglyGit XSDecode(SrcType.imm, SrcType.vp, src3, fu, fuOp, selImm, uopDivType, 43b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 4458c35d23Shuxuan0307 } 457f2b7720SXuan Hu} 467f2b7720SXuan Hu 47acbea6c4SzhanglyGitcase class OPMVV(vdRen: Boolean, fu: BitPat, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 48c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 497f2b7720SXuan Hu def generate() : List[BitPat] = { 505d9d92aaSzhanglyGit XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, xWen, F, vWen, mWen, F, F, F, F).generate() 517f2b7720SXuan Hu } 527f2b7720SXuan Hu} 537f2b7720SXuan Hu 54acbea6c4SzhanglyGitcase class OPMVX(vdRen: Boolean, fu: BitPat, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 55c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 56c6661c33SHaojin Tang def generate() : List[BitPat] = { 57acbea6c4SzhanglyGit XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 58b65b9ebaSXuan Hu xWen = xWen, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 59c6661c33SHaojin Tang } 607f2b7720SXuan Hu} 617f2b7720SXuan Hu 62acbea6c4SzhanglyGitcase class OPFVV(src1:BitPat, src3:BitPat, fu: BitPat, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 63b448988dSczw def generate() : List[BitPat] = { 64acbea6c4SzhanglyGit XSDecode(src1, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 65b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 66b448988dSczw } 677f2b7720SXuan Hu} 687f2b7720SXuan Hu 69acbea6c4SzhanglyGitcase class OPFVF(src1:BitPat, src3:BitPat, fu: BitPat, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 707f2b7720SXuan Hu def generate() : List[BitPat] = { 71acbea6c4SzhanglyGit XSDecode(src1, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 72b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 737f2b7720SXuan Hu } 747f2b7720SXuan Hu} 757f2b7720SXuan Hu 76acbea6c4SzhanglyGitcase class VSET(vli: Boolean, vtypei: Boolean, fuOp: BitPat, flushPipe: Boolean, selImm: BitPat, uopDivType: BitPat = UopDivType.DIR) extends XSDecodeBase { 77912e2179SXuan Hu def generate() : List[BitPat] = { 78912e2179SXuan Hu val src1 = if (vli) SrcType.imm else SrcType.xp 79912e2179SXuan Hu val src2 = if (vtypei) SrcType.imm else SrcType.xp 80acbea6c4SzhanglyGit XSDecode(src1, src2, SrcType.X, FuType.alu, fuOp, selImm, uopDivType, 81b65b9ebaSXuan Hu xWen = T, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = flushPipe).generate() 82912e2179SXuan Hu } 837f2b7720SXuan Hu} 847f2b7720SXuan Hu 85912e2179SXuan Hucase class VLD(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, ff: Boolean = false, 86acbea6c4SzhanglyGit mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 87912e2179SXuan Hu def generate() : List[BitPat] = { 88912e2179SXuan Hu val fu = FuType.vldu 89912e2179SXuan Hu val src1 = SrcType.xp 90912e2179SXuan Hu val src3 = SrcType.X 91acbea6c4SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopDivType, 92b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 93912e2179SXuan Hu } 94912e2179SXuan Hu} 95912e2179SXuan Hu 96912e2179SXuan Hucase class VST(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, 97acbea6c4SzhanglyGit mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 98912e2179SXuan Hu def generate() : List[BitPat] = { 99912e2179SXuan Hu val fu = FuType.vstu 100912e2179SXuan Hu val src1 = SrcType.xp 101912e2179SXuan Hu val src3 = SrcType.vp 102acbea6c4SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopDivType, 103b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 104912e2179SXuan Hu } 1057f2b7720SXuan Hu} 1067f2b7720SXuan Hu 1077f2b7720SXuan Huobject VecDecoder extends DecodeConstants { 108b65b9ebaSXuan Hu val opivv: Array[(BitPat, XSDecodeBase)] = Array( 1097e79df6bSzhanglyGit VADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 1107e79df6bSzhanglyGit VSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 1117f2b7720SXuan Hu 1127e79df6bSzhanglyGit VMINU_VV -> OPIVV(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 1137e79df6bSzhanglyGit VMIN_VV -> OPIVV(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 1147e79df6bSzhanglyGit VMAXU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 1157e79df6bSzhanglyGit VMAX_VV -> OPIVV(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 11658c35d23Shuxuan0307 1177e79df6bSzhanglyGit VAND_VV -> OPIVV(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 1187e79df6bSzhanglyGit VOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 1197e79df6bSzhanglyGit VXOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 12058c35d23Shuxuan0307 1217e79df6bSzhanglyGit VRGATHER_VV -> OPIVV(FuType.vipu, VipuType.dummy, T, F, F), 1227e79df6bSzhanglyGit VRGATHEREI16_VV -> OPIVV(FuType.vipu, VipuType.dummy, T, F, F), 12358c35d23Shuxuan0307 1247e79df6bSzhanglyGit VADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 1257e79df6bSzhanglyGit VMADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopDivType.VEC_VVM), 1267e79df6bSzhanglyGit VMADC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopDivType.VEC_VVM), 12758c35d23Shuxuan0307 1287e79df6bSzhanglyGit VSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 1297e79df6bSzhanglyGit VMSBC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopDivType.VEC_VVM), 1307e79df6bSzhanglyGit VMSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopDivType.VEC_VVM), 13158c35d23Shuxuan0307 1327e79df6bSzhanglyGit VMERGE_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 13358c35d23Shuxuan0307 1347e79df6bSzhanglyGit VMV_V_V -> OPIVV(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 13558c35d23Shuxuan0307 1367e79df6bSzhanglyGit VMSEQ_VV -> OPIVV(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopDivType.VEC_VVM), 1377e79df6bSzhanglyGit VMSNE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopDivType.VEC_VVM), 1387e79df6bSzhanglyGit VMSLTU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopDivType.VEC_VVM), 1397e79df6bSzhanglyGit VMSLT_VV -> OPIVV(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopDivType.VEC_VVM), 1407e79df6bSzhanglyGit VMSLEU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopDivType.VEC_VVM), 1417e79df6bSzhanglyGit VMSLE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopDivType.VEC_VVM), 14258c35d23Shuxuan0307 1437e79df6bSzhanglyGit VSLL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 1447e79df6bSzhanglyGit VSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 1457e79df6bSzhanglyGit VSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 1467e79df6bSzhanglyGit VNSRL_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopDivType.VEC_WVV), 1477e79df6bSzhanglyGit VNSRA_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopDivType.VEC_WVV), 148f9cac32fSczw 1497e79df6bSzhanglyGit VSADDU_VV -> OPIVV(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 1507e79df6bSzhanglyGit VSADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 1517e79df6bSzhanglyGit VSSUBU_VV -> OPIVV(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 1527e79df6bSzhanglyGit VSSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 15358c35d23Shuxuan0307 1547e79df6bSzhanglyGit VSMUL_VV -> OPIVV(FuType.vipu, VipuType.dummy, T, F, T), 15558c35d23Shuxuan0307 1567e79df6bSzhanglyGit VSSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 1577e79df6bSzhanglyGit VSSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 15858c35d23Shuxuan0307 1597e79df6bSzhanglyGit VNCLIPU_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopDivType.VEC_WVV), 1607e79df6bSzhanglyGit VNCLIP_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopDivType.VEC_WVV), 16158c35d23Shuxuan0307 1627e79df6bSzhanglyGit VWREDSUMU_VS -> OPIVV(FuType.vipu, VipuType.vwredsumu_vs, T, F, F), 1637e79df6bSzhanglyGit VWREDSUM_VS -> OPIVV(FuType.vipu, VipuType.vwredsum_vs, T, F, F), 1647f2b7720SXuan Hu ) 1657f2b7720SXuan Hu 166b65b9ebaSXuan Hu val opivx: Array[(BitPat, XSDecodeBase)] = Array( 1677e79df6bSzhanglyGit VADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 1687e79df6bSzhanglyGit VSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 1697e79df6bSzhanglyGit VRSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 17058c35d23Shuxuan0307 1717e79df6bSzhanglyGit VMINU_VX -> OPIVX(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 1727e79df6bSzhanglyGit VMIN_VX -> OPIVX(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 1737e79df6bSzhanglyGit VMAXU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 1747e79df6bSzhanglyGit VMAX_VX -> OPIVX(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 17558c35d23Shuxuan0307 1767e79df6bSzhanglyGit VAND_VX -> OPIVX(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 1777e79df6bSzhanglyGit VOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 1787e79df6bSzhanglyGit VXOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 17958c35d23Shuxuan0307 1807e79df6bSzhanglyGit VRGATHER_VX -> OPIVX(FuType.vipu, VipuType.dummy, T, F, F), 18158c35d23Shuxuan0307 1827e79df6bSzhanglyGit VSLIDEUP_VX -> OPIVX(FuType.vipu, VipuType.dummy, T, F, F), 1837e79df6bSzhanglyGit VSLIDEDOWN_VX -> OPIVX(FuType.vipu, VipuType.dummy, T, F, F), 18458c35d23Shuxuan0307 1857e79df6bSzhanglyGit VADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 1867e79df6bSzhanglyGit VMADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopDivType.VEC_VXM), 1877e79df6bSzhanglyGit VMADC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopDivType.VEC_VXM), 1887e79df6bSzhanglyGit VSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 1897e79df6bSzhanglyGit VMSBC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopDivType.VEC_VXM), 1907e79df6bSzhanglyGit VMSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopDivType.VEC_VXM), 19158c35d23Shuxuan0307 1927e79df6bSzhanglyGit VMERGE_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 19358c35d23Shuxuan0307 1947e79df6bSzhanglyGit VMV_V_X -> OPIVX(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 19558c35d23Shuxuan0307 1967e79df6bSzhanglyGit VMSEQ_VX -> OPIVX(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopDivType.VEC_VXM), 1977e79df6bSzhanglyGit VMSNE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopDivType.VEC_VXM), 1987e79df6bSzhanglyGit VMSLTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopDivType.VEC_VXM), 1997e79df6bSzhanglyGit VMSLT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopDivType.VEC_VXM), 2007e79df6bSzhanglyGit VMSLEU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopDivType.VEC_VXM), 2017e79df6bSzhanglyGit VMSLE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopDivType.VEC_VXM), 2027e79df6bSzhanglyGit VMSGTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, UopDivType.VEC_VXM), 2037e79df6bSzhanglyGit VMSGT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, UopDivType.VEC_VXM), 20458c35d23Shuxuan0307 2057e79df6bSzhanglyGit VSLL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 2067e79df6bSzhanglyGit VSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 2077e79df6bSzhanglyGit VSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 2087e79df6bSzhanglyGit VNSRL_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopDivType.VEC_WXV), 2097e79df6bSzhanglyGit VNSRA_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopDivType.VEC_WXV), 210f9cac32fSczw 2117e79df6bSzhanglyGit VSADDU_VX -> OPIVX(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 2127e79df6bSzhanglyGit VSADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 2137e79df6bSzhanglyGit VSSUBU_VX -> OPIVX(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 2147e79df6bSzhanglyGit VSSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 21558c35d23Shuxuan0307 21658c35d23Shuxuan0307 2177e79df6bSzhanglyGit VSMUL_VX -> OPIVX(FuType.vipu, VipuType.dummy, T, F, T), 21858c35d23Shuxuan0307 2197e79df6bSzhanglyGit VSSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 2207e79df6bSzhanglyGit VSSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 22158c35d23Shuxuan0307 2227e79df6bSzhanglyGit VNCLIPU_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopDivType.VEC_WXV), 2237e79df6bSzhanglyGit VNCLIP_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopDivType.VEC_WXV), 22458c35d23Shuxuan0307 ) 22558c35d23Shuxuan0307 226b65b9ebaSXuan Hu val opivi: Array[(BitPat, XSDecodeBase)] = Array( 2272f2537e9Sczw VADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 2282f2537e9Sczw VRSUB_VI -> OPIVI(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 22958c35d23Shuxuan0307 2302f2537e9Sczw VAND_VI -> OPIVI(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 2312f2537e9Sczw VOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 2322f2537e9Sczw VXOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 23358c35d23Shuxuan0307 234*de9e1949Sczw VRGATHER_VI -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F, selImm = SelImm.IMM_OPIVIU), 23558c35d23Shuxuan0307 236*de9e1949Sczw VSLIDEUP_VI -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F, selImm = SelImm.IMM_OPIVIU), 237*de9e1949Sczw VSLIDEDOWN_VI -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F, selImm = SelImm.IMM_OPIVIU), 23858c35d23Shuxuan0307 2392f2537e9Sczw VADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 2402f2537e9Sczw VMADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vvm, T, F, F, uopDivType = UopDivType.VEC_VVM), 2412f2537e9Sczw VMADC_VI -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vv, T, F, F, uopDivType = UopDivType.VEC_VVM), 24258c35d23Shuxuan0307 243*de9e1949Sczw VMERGE_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 24458c35d23Shuxuan0307 2452f2537e9Sczw VMV_V_I -> OPIVI(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 24658c35d23Shuxuan0307 2472f2537e9Sczw VMSEQ_VI -> OPIVI(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 2482f2537e9Sczw VMSNE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 249*de9e1949Sczw VMSLEU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_VVM), 250*de9e1949Sczw VMSLE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 251*de9e1949Sczw VMSGTU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_VVM), 252*de9e1949Sczw VMSGT_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 25358c35d23Shuxuan0307 254*de9e1949Sczw VSLL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsll_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 255*de9e1949Sczw VSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 256*de9e1949Sczw VSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vsra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 257*de9e1949Sczw VNSRL_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_WVV), 258*de9e1949Sczw VNSRA_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_WVV), 25958c35d23Shuxuan0307 260*de9e1949Sczw VSADDU_VI -> OPIVI(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T, selImm = SelImm.IMM_OPIVIU), 261*de9e1949Sczw VSADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 26258c35d23Shuxuan0307 263*de9e1949Sczw VSSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 264*de9e1949Sczw VSSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vssra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 265f9cac32fSczw 266*de9e1949Sczw VNCLIPU_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_WVV), 267*de9e1949Sczw VNCLIP_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, uopDivType = UopDivType.VEC_WVV), 26858c35d23Shuxuan0307 2692f2537e9Sczw VMV1R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 2702f2537e9Sczw VMV2R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 2712f2537e9Sczw VMV4R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 2722f2537e9Sczw VMV8R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 27358c35d23Shuxuan0307 ) 2747f2b7720SXuan Hu 275b65b9ebaSXuan Hu val opmvv: Array[(BitPat, XSDecodeBase)] = Array( 2767e79df6bSzhanglyGit VAADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F), 2777e79df6bSzhanglyGit VAADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F), 2787e79df6bSzhanglyGit VASUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F), 2797e79df6bSzhanglyGit VASUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F), 2807e79df6bSzhanglyGit VCOMPRESS_VM -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 2817e79df6bSzhanglyGit VCPOP_M -> OPMVV(T, FuType.vipu, VipuType.vcpop_m, T, F, F), 2827e79df6bSzhanglyGit VDIV_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 2837e79df6bSzhanglyGit VDIVU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 2847e79df6bSzhanglyGit VFIRST_M -> OPMVV(T, FuType.vipu, VipuType.vfirst_m, T, F, F), 2857e79df6bSzhanglyGit VID_V -> OPMVV(T, FuType.vipu, VipuType.vid_v, F, T, F), 2867e79df6bSzhanglyGit VIOTA_M -> OPMVV(T, FuType.vipu, VipuType.viota_m, F, T, F), 287b65b9ebaSXuan Hu 288b65b9ebaSXuan Hu // VMACC_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 289b65b9ebaSXuan Hu 290912e2179SXuan Hu VMADD_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 2917e79df6bSzhanglyGit VMAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmand_mm, F, T, F, UopDivType.VEC_MMM), 2927e79df6bSzhanglyGit VMANDN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmandn_mm, F, T, F, UopDivType.VEC_MMM), 2937e79df6bSzhanglyGit VMNAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnand_mm, F, T, F, UopDivType.VEC_MMM), 2947e79df6bSzhanglyGit VMNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnor_mm, F, T, F, UopDivType.VEC_MMM), 2957e79df6bSzhanglyGit VMOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmor_mm, F, T, F, UopDivType.VEC_MMM), 2967e79df6bSzhanglyGit VMORN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmorn_mm, F, T, F, UopDivType.VEC_MMM), 2977e79df6bSzhanglyGit VMXNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxnor_mm, F, T, F, UopDivType.VEC_MMM), 2987e79df6bSzhanglyGit VMXOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxor_mm, F, T, F, UopDivType.VEC_MMM), 2997e79df6bSzhanglyGit VMSBF_M -> OPMVV(T, FuType.vipu, VipuType.vmsbf_m, F, T, F), 3007e79df6bSzhanglyGit VMSIF_M -> OPMVV(T, FuType.vipu, VipuType.vmsif_m, F, T, F), 3017e79df6bSzhanglyGit VMSOF_M -> OPMVV(T, FuType.vipu, VipuType.vmsof_m, F, T, F), 3027e79df6bSzhanglyGit VMUL_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3037e79df6bSzhanglyGit VMULH_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3047e79df6bSzhanglyGit VMULHSU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3057e79df6bSzhanglyGit VMULHU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 306b65b9ebaSXuan Hu 3077e79df6bSzhanglyGit VMV_X_S -> OPMVV(T, FuType.vipu, VipuType.dummy, T, F, F), 3087e79df6bSzhanglyGit VNMSAC_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3097e79df6bSzhanglyGit VNMSUB_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3107e79df6bSzhanglyGit VREDAND_VS -> OPMVV(T, FuType.vipu, VipuType.vredand_vs, F, T, F), 3117e79df6bSzhanglyGit VREDMAX_VS -> OPMVV(T, FuType.vipu, VipuType.vredmax_vs, F, T, F), 3127e79df6bSzhanglyGit VREDMAXU_VS -> OPMVV(T, FuType.vipu, VipuType.vredmaxu_vs, F, T, F), 3137e79df6bSzhanglyGit VREDMIN_VS -> OPMVV(T, FuType.vipu, VipuType.vredmin_vs, F, T, F), 3147e79df6bSzhanglyGit VREDMINU_VS -> OPMVV(T, FuType.vipu, VipuType.vredminu_vs, F, T, F), 3157e79df6bSzhanglyGit VREDOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredor_vs, F, T, F), 3167e79df6bSzhanglyGit VREDSUM_VS -> OPMVV(T, FuType.vipu, VipuType.vredsum_vs, F, T, F), 3177e79df6bSzhanglyGit VREDXOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredxor_vs, F, T, F), 3187e79df6bSzhanglyGit VREM_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3197e79df6bSzhanglyGit VREMU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3207e79df6bSzhanglyGit VSEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf2, F, T, F, UopDivType.VEC_EXT2), 3217e79df6bSzhanglyGit VSEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf4, F, T, F, UopDivType.VEC_EXT4), 3227e79df6bSzhanglyGit VSEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf8, F, T, F, UopDivType.VEC_EXT8), 3237e79df6bSzhanglyGit VZEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf2, F, T, F, UopDivType.VEC_EXT2), 3247e79df6bSzhanglyGit VZEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf4, F, T, F, UopDivType.VEC_EXT4), 3257e79df6bSzhanglyGit VZEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf8, F, T, F, UopDivType.VEC_EXT8), 3267e79df6bSzhanglyGit VWADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopDivType.VEC_VVW), 3277e79df6bSzhanglyGit VWADD_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopDivType.VEC_WVW), 3287e79df6bSzhanglyGit VWADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopDivType.VEC_VVW), 3297e79df6bSzhanglyGit VWADDU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopDivType.VEC_WVW), 330912e2179SXuan Hu VWMACC_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 331912e2179SXuan Hu VWMACCSU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 332912e2179SXuan Hu VWMACCU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3337e79df6bSzhanglyGit VWMUL_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3347e79df6bSzhanglyGit VWMULSU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3357e79df6bSzhanglyGit VWMULU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 3367e79df6bSzhanglyGit VWSUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopDivType.VEC_VVW), 3377e79df6bSzhanglyGit VWSUB_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopDivType.VEC_WVW), 3387e79df6bSzhanglyGit VWSUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopDivType.VEC_VVW), 3397e79df6bSzhanglyGit VWSUBU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopDivType.VEC_WVW), 340c6661c33SHaojin Tang ) 341912e2179SXuan Hu 342b65b9ebaSXuan Hu val opmvx: Array[(BitPat, XSDecodeBase)] = Array( 3437e79df6bSzhanglyGit VAADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F), 3447e79df6bSzhanglyGit VAADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F), 3457e79df6bSzhanglyGit VASUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F), 3467e79df6bSzhanglyGit VASUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F), 3477e79df6bSzhanglyGit VDIV_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3487e79df6bSzhanglyGit VDIVU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 349912e2179SXuan Hu VMACC_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 350912e2179SXuan Hu VMADD_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3517e79df6bSzhanglyGit VMUL_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3527e79df6bSzhanglyGit VMULH_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3537e79df6bSzhanglyGit VMULHSU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3547e79df6bSzhanglyGit VMULHU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3557e79df6bSzhanglyGit VMV_S_X -> OPMVX(T, FuType.vipu, VipuType.vmv_s_x, F, T, F, UopDivType.VEC_0XV), 356b65b9ebaSXuan Hu 3577e79df6bSzhanglyGit VNMSAC_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3587e79df6bSzhanglyGit VNMSUB_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3597e79df6bSzhanglyGit VREM_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3607e79df6bSzhanglyGit VREMU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 361b65b9ebaSXuan Hu 3627e79df6bSzhanglyGit VSLIDE1DOWN_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 363*de9e1949Sczw VSLIDE1UP_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1up, F, T, F, UopDivType.VEC_SLIDE1UP), 3647e79df6bSzhanglyGit VWADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopDivType.VEC_VXW), 3657e79df6bSzhanglyGit VWADD_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopDivType.VEC_WXW), 3667e79df6bSzhanglyGit VWADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopDivType.VEC_VXW), 3677e79df6bSzhanglyGit VWADDU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopDivType.VEC_WXW), 368b65b9ebaSXuan Hu 369b65b9ebaSXuan Hu // OutOfMemoryError 370912e2179SXuan Hu VWMACC_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 371912e2179SXuan Hu VWMACCSU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 372912e2179SXuan Hu VWMACCU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 373b65b9ebaSXuan Hu 374912e2179SXuan Hu VWMACCUS_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3757e79df6bSzhanglyGit VWMUL_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3767e79df6bSzhanglyGit VWMULSU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 377b65b9ebaSXuan Hu // Ok 3787e79df6bSzhanglyGit VWMULU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 3797e79df6bSzhanglyGit VWSUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopDivType.VEC_VXW), 3807e79df6bSzhanglyGit VWSUB_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopDivType.VEC_WXW), 3817e79df6bSzhanglyGit VWSUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopDivType.VEC_VXW), 3827e79df6bSzhanglyGit VWSUBU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopDivType.VEC_WXW), 383c6661c33SHaojin Tang ) 3847f2b7720SXuan Hu 385b65b9ebaSXuan Hu val opfvv: Array[(BitPat, XSDecodeBase)] = Array( 386b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 38794c0d8cfSczw VFADD_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.fadd , F, T, F), 38894c0d8cfSczw VFSUB_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.fsub, F, T, F), 389b448988dSczw 390b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 391912e2179SXuan Hu VFWADD_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 392912e2179SXuan Hu VFWSUB_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 393912e2179SXuan Hu VFWADD_WV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 394912e2179SXuan Hu VFWSUB_WV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 395b448988dSczw 396b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 397912e2179SXuan Hu VFMUL_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 398db72af19Sczw VFDIV_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.fdiv , F, T, F), 399b448988dSczw 400b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 401912e2179SXuan Hu VFWMUL_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 402b448988dSczw 403b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 404bea9b026Sczw VFMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.fmacc, F, T, F), 405912e2179SXuan Hu VFNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 406912e2179SXuan Hu VFMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 407912e2179SXuan Hu VFNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 408912e2179SXuan Hu VFMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 409912e2179SXuan Hu VFNMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 410912e2179SXuan Hu VFMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 411912e2179SXuan Hu VFNMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 412b448988dSczw 413b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 414912e2179SXuan Hu VFWMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 415912e2179SXuan Hu VFWNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 416912e2179SXuan Hu VFWMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 417912e2179SXuan Hu VFWNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 418b448988dSczw 419b448988dSczw // 13.8. Vector Floating-Point Square-Root Instruction 420912e2179SXuan Hu VFSQRT_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 421b448988dSczw 422b448988dSczw // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction 423912e2179SXuan Hu VFRSQRT7_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 424b448988dSczw 425b448988dSczw // 13.10. Vector Floating-Point Reciprocal Estimate Instruction 426912e2179SXuan Hu VFREC7_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 427b448988dSczw 428b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 42980f76ebcSczw VFMIN_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.fmin, F, T, F), 43080f76ebcSczw VFMAX_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.fmax, F, T, F), 431b448988dSczw 432b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 433912e2179SXuan Hu VFSGNJ_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 434912e2179SXuan Hu VFSGNJN_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 435912e2179SXuan Hu VFSGNJX_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 436b448988dSczw 437b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 438912e2179SXuan Hu VMFEQ_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 439912e2179SXuan Hu VMFNE_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 440912e2179SXuan Hu VMFLT_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 441912e2179SXuan Hu VMFLE_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 442b448988dSczw 443b448988dSczw // 13.14. Vector Floating-Point Classify Instruction 444912e2179SXuan Hu VFCLASS_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 445b448988dSczw 446b448988dSczw // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions 447912e2179SXuan Hu VFCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 448912e2179SXuan Hu VFCVT_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 449912e2179SXuan Hu VFCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 450912e2179SXuan Hu VFCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 451912e2179SXuan Hu VFCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 452912e2179SXuan Hu VFCVT_F_X_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 453b448988dSczw 454b448988dSczw // 13.18. Widening Floating-Point/Integer Type-Convert Instructions 455912e2179SXuan Hu VFWCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 456912e2179SXuan Hu VFWCVT_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 457912e2179SXuan Hu VFWCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 458912e2179SXuan Hu VFWCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 459912e2179SXuan Hu VFWCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 460912e2179SXuan Hu VFWCVT_F_X_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 461912e2179SXuan Hu VFWCVT_F_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 462b448988dSczw 463b65b9ebaSXuan Hu // ! 464b448988dSczw // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions 465912e2179SXuan Hu VFNCVT_XU_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 466912e2179SXuan Hu VFNCVT_X_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 467912e2179SXuan Hu VFNCVT_RTZ_XU_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 468912e2179SXuan Hu VFNCVT_RTZ_X_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 469912e2179SXuan Hu VFNCVT_F_XU_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 470912e2179SXuan Hu VFNCVT_F_X_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 471912e2179SXuan Hu VFNCVT_F_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 472912e2179SXuan Hu VFNCVT_ROD_F_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 473b448988dSczw 474b448988dSczw // 14.3. Vector Single-Width Floating-Point Reduction Instructions 475912e2179SXuan Hu VFREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 476912e2179SXuan Hu VFREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 477912e2179SXuan Hu VFREDMAX_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 478912e2179SXuan Hu VFREDMIN_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 479b448988dSczw 480b448988dSczw // 14.4. Vector Widening Floating-Point Reduction Instructions 481912e2179SXuan Hu VFWREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 482912e2179SXuan Hu VFWREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 483b448988dSczw 484b448988dSczw // 16.2. Floating-Point Scalar Move Instructions 485912e2179SXuan Hu VFMV_F_S -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),// f[rd] = vs2[0] (rs1=0) 486b448988dSczw ) 4877f2b7720SXuan Hu 488b65b9ebaSXuan Hu val opfvf: Array[(BitPat, XSDecodeBase)] = Array( 489b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 49094c0d8cfSczw VFADD_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.fadd , F, T, F), 49194c0d8cfSczw VFSUB_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.fsub, F, T, F), 492912e2179SXuan Hu VFRSUB_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 493b448988dSczw 494b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 495912e2179SXuan Hu VFWADD_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 496912e2179SXuan Hu VFWSUB_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 497912e2179SXuan Hu VFWADD_WF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 498912e2179SXuan Hu VFWSUB_WF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 499b448988dSczw 500b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 501912e2179SXuan Hu VFMUL_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 502db72af19Sczw VFDIV_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.fdiv , F, T, F), 503912e2179SXuan Hu VFRDIV_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 504b448988dSczw 505b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 506912e2179SXuan Hu VFWMUL_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 507b448988dSczw 508b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 509bea9b026Sczw VFMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.fmacc, F, T, F), 510912e2179SXuan Hu VFNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 511912e2179SXuan Hu VFMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 512912e2179SXuan Hu VFNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 513912e2179SXuan Hu VFMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 514912e2179SXuan Hu VFNMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 515912e2179SXuan Hu VFMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 516912e2179SXuan Hu VFNMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 517b448988dSczw 518b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 519912e2179SXuan Hu VFWMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 520912e2179SXuan Hu VFWNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 521912e2179SXuan Hu VFWMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 522912e2179SXuan Hu VFWNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 523b448988dSczw 524b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 52580f76ebcSczw VFMIN_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.fmin, F, T, F), 52680f76ebcSczw VFMAX_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.fmax, F, T, F), 527b448988dSczw 528b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 529912e2179SXuan Hu VFSGNJ_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 530912e2179SXuan Hu VFSGNJN_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 531912e2179SXuan Hu VFSGNJX_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 532b448988dSczw 533b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 534912e2179SXuan Hu VMFEQ_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 535912e2179SXuan Hu VMFNE_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 536912e2179SXuan Hu VMFLT_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 537912e2179SXuan Hu VMFLE_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 538912e2179SXuan Hu VMFGT_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 539912e2179SXuan Hu VMFGE_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 540b448988dSczw 541b448988dSczw // 13.15. Vector Floating-Point Merge Instruction 542912e2179SXuan Hu VFMERGE_VFM -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 543b448988dSczw 544b448988dSczw // 13.16. Vector Floating-Point Move Instruction 545912e2179SXuan Hu VFMV_V_F -> OPFVF(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),// src2=SrcType.X 546b448988dSczw 547b448988dSczw // 16.2. Floating-Point Scalar Move Instructions 548*de9e1949Sczw VFMV_S_F -> OPFVF(SrcType.fp, SrcType.vp, FuType.vppu, VpermType.vfmv_s_f, F, T, F),// vs2=0 // vs3 = vd 549b448988dSczw 550b448988dSczw // 16.3.3. Vector Slide1up 551*de9e1949Sczw VFSLIDE1UP_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vppu, VpermType.vfslide1up, F, T, F),// vd[0]=f[rs1], vd[i+1] = vs2[i] 552b448988dSczw 553b448988dSczw // 16.3.4. Vector Slide1down Instruction 554b448988dSczw // vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1] 555912e2179SXuan Hu VFSLIDE1DOWN_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),// vd[i] = vs2[i+1], vd[vl-1]=f[rs1] 5567f2b7720SXuan Hu ) 5577f2b7720SXuan Hu 558b65b9ebaSXuan Hu val vset: Array[(BitPat, XSDecodeBase)] = Array( 5594aa9ed34Sfdy VSETVLI -> VSET(F, T, ALUOpType.vsetvli1, F, SelImm.IMM_VSETVLI), 5604aa9ed34Sfdy VSETIVLI -> VSET(T, T, ALUOpType.vsetivli1, F, SelImm.IMM_VSETIVLI), 5614aa9ed34Sfdy VSETVL -> VSET(F, F, ALUOpType.vsetvl1, T, SelImm.X), // flush pipe 562912e2179SXuan Hu ) 5637f2b7720SXuan Hu 564b65b9ebaSXuan Hu val vls: Array[(BitPat, XSDecodeBase)] = Array( 565912e2179SXuan Hu // 7.4. Vector Unit-Stride Instructions 566912e2179SXuan Hu VLE8_V -> VLD(SrcType.X, VlduType.dummy), 567912e2179SXuan Hu VLE16_V -> VLD(SrcType.X, VlduType.dummy), 568912e2179SXuan Hu VLE32_V -> VLD(SrcType.X, VlduType.dummy), 569912e2179SXuan Hu VLE64_V -> VLD(SrcType.X, VlduType.dummy), 570912e2179SXuan Hu VSE8_V -> VST(SrcType.X, VstuType.dummy), 571912e2179SXuan Hu VSE16_V -> VST(SrcType.X, VstuType.dummy), 572912e2179SXuan Hu VSE32_V -> VST(SrcType.X, VstuType.dummy), 573912e2179SXuan Hu VSE64_V -> VST(SrcType.X, VstuType.dummy), 574912e2179SXuan Hu VLM_V -> VLD(SrcType.X, VlduType.dummy, mask = T), 575912e2179SXuan Hu VSM_V -> VST(SrcType.X, VstuType.dummy, mask = T), 576912e2179SXuan Hu // 7.5. Vector Strided Instructions 577912e2179SXuan Hu VLSE8_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 578912e2179SXuan Hu VLSE16_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 579912e2179SXuan Hu VLSE32_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 580912e2179SXuan Hu VLSE64_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 581912e2179SXuan Hu VSSE8_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 582912e2179SXuan Hu VSSE16_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 583912e2179SXuan Hu VSSE32_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 584912e2179SXuan Hu VSSE64_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 585912e2179SXuan Hu // 7.6. Vector Indexed Instructions 586912e2179SXuan Hu VLUXEI8_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 587912e2179SXuan Hu VLUXEI16_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 588912e2179SXuan Hu VLUXEI32_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 589912e2179SXuan Hu VLUXEI64_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 590912e2179SXuan Hu VLOXEI8_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 591912e2179SXuan Hu VLOXEI16_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 592912e2179SXuan Hu VLOXEI32_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 593912e2179SXuan Hu VLOXEI64_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 594912e2179SXuan Hu VSUXEI8_V -> VLD(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 595912e2179SXuan Hu VSUXEI16_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 596912e2179SXuan Hu VSUXEI32_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 597912e2179SXuan Hu VSUXEI64_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 598912e2179SXuan Hu VSOXEI8_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 599912e2179SXuan Hu VSOXEI16_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 600912e2179SXuan Hu VSOXEI32_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 601912e2179SXuan Hu VSOXEI64_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 602912e2179SXuan Hu // 7.7. Unit-stride Fault-Only-First Loads 603912e2179SXuan Hu VLE8FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 604912e2179SXuan Hu VLE16FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 605912e2179SXuan Hu VLE32FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 606912e2179SXuan Hu VLE64FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 607912e2179SXuan Hu // 7.8. Vector Load/Store Segment Instructions 608912e2179SXuan Hu // 7.8.1. Vector Unit-Stride Segment Loads and Stores 609912e2179SXuan Hu // TODO 610912e2179SXuan Hu // 7.8.2. Vector Strided Segment Loads and Stores 611912e2179SXuan Hu // TODO 612912e2179SXuan Hu // 7.8.3. Vector Indexed Segment Loads and Stores 613912e2179SXuan Hu // TODO 614912e2179SXuan Hu // 7.9. Vector Load/Store Whole Register Instructions 615912e2179SXuan Hu VL1RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 616912e2179SXuan Hu VL1RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 617912e2179SXuan Hu VL1RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 618912e2179SXuan Hu VL1RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 619912e2179SXuan Hu VL2RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 620912e2179SXuan Hu VL2RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 621912e2179SXuan Hu VL2RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 622912e2179SXuan Hu VL2RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 623912e2179SXuan Hu VL4RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 624912e2179SXuan Hu VL4RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 625912e2179SXuan Hu VL4RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 626912e2179SXuan Hu VL4RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 627912e2179SXuan Hu VL8RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 628912e2179SXuan Hu VL8RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 629912e2179SXuan Hu VL8RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 630912e2179SXuan Hu VL8RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 631912e2179SXuan Hu VS1R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 632912e2179SXuan Hu VS2R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 633912e2179SXuan Hu VS4R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 634912e2179SXuan Hu VS8R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 635912e2179SXuan Hu ) 636912e2179SXuan Hu 637b65b9ebaSXuan Hu override val decodeArray: Array[(BitPat, XSDecodeBase)] = vset ++ vls ++ 638b65b9ebaSXuan Hu opivv ++ opivx ++ opivi ++ opmvv ++ opmvx ++ opfvv ++ opfvf 6397f2b7720SXuan Hu} 640