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._ 13d91483a6Sfdyimport yunsuan.{VfpuType, VipuType, VpermType, VialuFixType} 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 27d91483a6Sfdycase class OPIVV(fu: Int, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopDivType: BitPat = UopDivType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 287f2b7720SXuan Hu def generate() : List[BitPat] = { 29d91483a6Sfdy XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 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 34d91483a6Sfdycase class OPIVX(fu: Int, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopDivType: BitPat = UopDivType.VEC_VXV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 3558c35d23Shuxuan0307 def generate() : List[BitPat] = { 36d91483a6Sfdy XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 37b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 3858c35d23Shuxuan0307 } 397f2b7720SXuan Hu} 407f2b7720SXuan Hu 41d91483a6Sfdycase class OPIVI(fu: Int, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, selImm: BitPat = SelImm.IMM_OPIVIS, uopDivType: BitPat = UopDivType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase { 4258c35d23Shuxuan0307 def generate() : List[BitPat] = { 43d91483a6Sfdy XSDecode(SrcType.imm, SrcType.vp, src3, fu, fuOp, selImm, uopDivType, 44b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 4558c35d23Shuxuan0307 } 467f2b7720SXuan Hu} 477f2b7720SXuan Hu 48d91483a6Sfdycase class OPMVV(vdRen: Boolean, fu: Int, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 49c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 507f2b7720SXuan Hu def generate() : List[BitPat] = { 51d91483a6Sfdy XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, xWen, F, vWen, mWen, F, F, F, F).generate() 527f2b7720SXuan Hu } 537f2b7720SXuan Hu} 547f2b7720SXuan Hu 55d91483a6Sfdycase class OPMVX(vdRen: Boolean, fu: Int, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 56c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 57c6661c33SHaojin Tang def generate() : List[BitPat] = { 58d91483a6Sfdy XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 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 63d91483a6Sfdycase class OPFVV(src1:BitPat, src3:BitPat, fu: Int, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 64b448988dSczw def generate() : List[BitPat] = { 65d91483a6Sfdy XSDecode(src1, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 66b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 67b448988dSczw } 687f2b7720SXuan Hu} 697f2b7720SXuan Hu 70d91483a6Sfdycase class OPFVF(src1:BitPat, src3:BitPat, fu: Int, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 717f2b7720SXuan Hu def generate() : List[BitPat] = { 72d91483a6Sfdy XSDecode(src1, SrcType.vp, src3, fu, fuOp, SelImm.X, uopDivType, 73b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 747f2b7720SXuan Hu } 757f2b7720SXuan Hu} 767f2b7720SXuan Hu 77d91483a6Sfdycase class VSET(vli: Boolean, vtypei: Boolean, fuOp: BitPat, flushPipe: Boolean, selImm: BitPat, uopDivType: BitPat = UopDivType.DIR) extends XSDecodeBase { 78912e2179SXuan Hu def generate() : List[BitPat] = { 79912e2179SXuan Hu val src1 = if (vli) SrcType.imm else SrcType.xp 80912e2179SXuan Hu val src2 = if (vtypei) SrcType.imm else SrcType.xp 81d91483a6Sfdy XSDecode(src1, src2, SrcType.fp, FuType.vsetiwf, fuOp, selImm, uopDivType, 82d91483a6Sfdy xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = flushPipe).generate() 83912e2179SXuan Hu } 847f2b7720SXuan Hu} 857f2b7720SXuan Hu 86912e2179SXuan Hucase class VLD(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, ff: Boolean = false, 87d91483a6Sfdy mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 88912e2179SXuan Hu def generate() : List[BitPat] = { 89912e2179SXuan Hu val fu = FuType.vldu 90912e2179SXuan Hu val src1 = SrcType.xp 91912e2179SXuan Hu val src3 = SrcType.X 92d91483a6Sfdy XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopDivType, 93b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 94912e2179SXuan Hu } 95912e2179SXuan Hu} 96912e2179SXuan Hu 97912e2179SXuan Hucase class VST(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, 98d91483a6Sfdy mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopDivType: BitPat = UopDivType.dummy) extends XSDecodeBase { 99912e2179SXuan Hu def generate() : List[BitPat] = { 100912e2179SXuan Hu val fu = FuType.vstu 101912e2179SXuan Hu val src1 = SrcType.xp 102912e2179SXuan Hu val src3 = SrcType.vp 103d91483a6Sfdy XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopDivType, 104b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 105912e2179SXuan Hu } 1067f2b7720SXuan Hu} 1077f2b7720SXuan Hu 1087f2b7720SXuan Huobject VecDecoder extends DecodeConstants { 109b65b9ebaSXuan Hu val opivv: Array[(BitPat, XSDecodeBase)] = Array( 110d91483a6Sfdy VADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 111d91483a6Sfdy VSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 1127f2b7720SXuan Hu 113d91483a6Sfdy VMINU_VV -> OPIVV(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 114d91483a6Sfdy VMIN_VV -> OPIVV(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 115d91483a6Sfdy VMAXU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 116d91483a6Sfdy VMAX_VV -> OPIVV(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 11758c35d23Shuxuan0307 118d91483a6Sfdy VAND_VV -> OPIVV(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 119d91483a6Sfdy VOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 120d91483a6Sfdy VXOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 12158c35d23Shuxuan0307 122d91483a6Sfdy VRGATHER_VV -> OPIVV(FuType.vipu, VipuType.dummy, T, F, F), 123d91483a6Sfdy VRGATHEREI16_VV -> OPIVV(FuType.vipu, VipuType.dummy, T, F, F), 12458c35d23Shuxuan0307 125d91483a6Sfdy VADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 126d91483a6Sfdy VMADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopDivType.VEC_VVM), 127d91483a6Sfdy VMADC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopDivType.VEC_VVM), 12858c35d23Shuxuan0307 129d91483a6Sfdy VSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 130d91483a6Sfdy VMSBC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopDivType.VEC_VVM), 131d91483a6Sfdy VMSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopDivType.VEC_VVM), 13258c35d23Shuxuan0307 133d91483a6Sfdy VMERGE_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 13458c35d23Shuxuan0307 135d91483a6Sfdy VMV_V_V -> OPIVV(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 13658c35d23Shuxuan0307 137d91483a6Sfdy VMSEQ_VV -> OPIVV(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopDivType.VEC_VVM), 138d91483a6Sfdy VMSNE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopDivType.VEC_VVM), 139d91483a6Sfdy VMSLTU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopDivType.VEC_VVM), 140d91483a6Sfdy VMSLT_VV -> OPIVV(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopDivType.VEC_VVM), 141d91483a6Sfdy VMSLEU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopDivType.VEC_VVM), 142d91483a6Sfdy VMSLE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopDivType.VEC_VVM), 14358c35d23Shuxuan0307 144d91483a6Sfdy VSLL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 145d91483a6Sfdy VSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 146d91483a6Sfdy VSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 147d91483a6Sfdy VNSRL_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopDivType.VEC_WVV), 148d91483a6Sfdy VNSRA_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopDivType.VEC_WVV), 14958c35d23Shuxuan0307 150d91483a6Sfdy VSADDU_VV -> OPIVV(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 151d91483a6Sfdy VSADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 152d91483a6Sfdy VSSUBU_VV -> OPIVV(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 153d91483a6Sfdy VSSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 15458c35d23Shuxuan0307 155d91483a6Sfdy VSMUL_VV -> OPIVV(FuType.vipu, VipuType.dummy, T, F, T), 15658c35d23Shuxuan0307 157d91483a6Sfdy VSSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 158d91483a6Sfdy VSSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 15958c35d23Shuxuan0307 160d91483a6Sfdy VNCLIPU_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopDivType.VEC_WVV), 161d91483a6Sfdy VNCLIP_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopDivType.VEC_WVV), 162d91483a6Sfdy 163d91483a6Sfdy VWREDSUMU_VS -> OPIVV(FuType.vipu, VipuType.vwredsumu_vs, T, F, F), 164d91483a6Sfdy VWREDSUM_VS -> OPIVV(FuType.vipu, VipuType.vwredsum_vs, T, F, F), 1657f2b7720SXuan Hu ) 1667f2b7720SXuan Hu 167b65b9ebaSXuan Hu val opivx: Array[(BitPat, XSDecodeBase)] = Array( 168d91483a6Sfdy VADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 169d91483a6Sfdy VSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 170d91483a6Sfdy VRSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 17158c35d23Shuxuan0307 172d91483a6Sfdy VMINU_VX -> OPIVX(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 173d91483a6Sfdy VMIN_VX -> OPIVX(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 174d91483a6Sfdy VMAXU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 175d91483a6Sfdy VMAX_VX -> OPIVX(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 17658c35d23Shuxuan0307 177d91483a6Sfdy VAND_VX -> OPIVX(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 178d91483a6Sfdy VOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 179d91483a6Sfdy VXOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 18058c35d23Shuxuan0307 181d91483a6Sfdy VRGATHER_VX -> OPIVX(FuType.vipu, VipuType.dummy, T, F, F), 18258c35d23Shuxuan0307 183d91483a6Sfdy VSLIDEUP_VX -> OPIVX(FuType.vppu, VpermType.vslideup, T, F, F, UopDivType.VEC_SLIDEUP), 184d91483a6Sfdy VSLIDEDOWN_VX -> OPIVX(FuType.vppu, VpermType.vslidedown, T, F, F, UopDivType.VEC_SLIDEDOWN), 18558c35d23Shuxuan0307 186d91483a6Sfdy VADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 187d91483a6Sfdy VMADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopDivType.VEC_VXM), 188d91483a6Sfdy VMADC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopDivType.VEC_VXM), 189d91483a6Sfdy VSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 190d91483a6Sfdy VMSBC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopDivType.VEC_VXM), 191d91483a6Sfdy VMSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopDivType.VEC_VXM), 19258c35d23Shuxuan0307 193d91483a6Sfdy VMERGE_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 19458c35d23Shuxuan0307 195d91483a6Sfdy VMV_V_X -> OPIVX(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 19658c35d23Shuxuan0307 197d91483a6Sfdy VMSEQ_VX -> OPIVX(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopDivType.VEC_VXM), 198d91483a6Sfdy VMSNE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopDivType.VEC_VXM), 199d91483a6Sfdy VMSLTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopDivType.VEC_VXM), 200d91483a6Sfdy VMSLT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopDivType.VEC_VXM), 201d91483a6Sfdy VMSLEU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopDivType.VEC_VXM), 202d91483a6Sfdy VMSLE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopDivType.VEC_VXM), 203d91483a6Sfdy VMSGTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, UopDivType.VEC_VXM), 204d91483a6Sfdy VMSGT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, UopDivType.VEC_VXM), 20558c35d23Shuxuan0307 206d91483a6Sfdy VSLL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 207d91483a6Sfdy VSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 208d91483a6Sfdy VSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 209d91483a6Sfdy VNSRL_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopDivType.VEC_WXV), 210d91483a6Sfdy VNSRA_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopDivType.VEC_WXV), 211d91483a6Sfdy 212d91483a6Sfdy VSADDU_VX -> OPIVX(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 213d91483a6Sfdy VSADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 214d91483a6Sfdy VSSUBU_VX -> OPIVX(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 215d91483a6Sfdy VSSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 21658c35d23Shuxuan0307 21758c35d23Shuxuan0307 218d91483a6Sfdy VSMUL_VX -> OPIVX(FuType.vipu, VipuType.dummy, T, F, T), 21958c35d23Shuxuan0307 220d91483a6Sfdy VSSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 221d91483a6Sfdy VSSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 22258c35d23Shuxuan0307 223d91483a6Sfdy VNCLIPU_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopDivType.VEC_WXV), 224d91483a6Sfdy VNCLIP_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopDivType.VEC_WXV), 22558c35d23Shuxuan0307 ) 22658c35d23Shuxuan0307 227b65b9ebaSXuan Hu val opivi: Array[(BitPat, XSDecodeBase)] = Array( 228d91483a6Sfdy VADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 229d91483a6Sfdy VRSUB_VI -> OPIVI(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 23058c35d23Shuxuan0307 231d91483a6Sfdy VAND_VI -> OPIVI(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 232d91483a6Sfdy VOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 233d91483a6Sfdy VXOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 23458c35d23Shuxuan0307 235d91483a6Sfdy VRGATHER_VI -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F, selImm = SelImm.IMM_OPIVIU), 23658c35d23Shuxuan0307 237d91483a6Sfdy VSLIDEUP_VI -> OPIVI(FuType.vppu, VpermType.vslideup, T, F, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_ISLIDEUP), 238d91483a6Sfdy VSLIDEDOWN_VI -> OPIVI(FuType.vppu, VpermType.vslidedown, T, F, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_ISLIDEDOWN), 23958c35d23Shuxuan0307 240d91483a6Sfdy VADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 241d91483a6Sfdy VMADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vvm, T, F, F, uopDivType = UopDivType.VEC_VVM), 242d91483a6Sfdy VMADC_VI -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vv, T, F, F, uopDivType = UopDivType.VEC_VVM), 24358c35d23Shuxuan0307 244d91483a6Sfdy VMERGE_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 24558c35d23Shuxuan0307 246d91483a6Sfdy VMV_V_I -> OPIVI(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F), 24758c35d23Shuxuan0307 248d91483a6Sfdy VMSEQ_VI -> OPIVI(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 249d91483a6Sfdy VMSNE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 250d91483a6Sfdy VMSLEU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_VVM), 251d91483a6Sfdy VMSLE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 252d91483a6Sfdy VMSGTU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_VVM), 253d91483a6Sfdy VMSGT_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, uopDivType = UopDivType.VEC_VVM), 25458c35d23Shuxuan0307 255d91483a6Sfdy VSLL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsll_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 256d91483a6Sfdy VSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 257d91483a6Sfdy VSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vsra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 258d91483a6Sfdy VNSRL_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_WVV), 259d91483a6Sfdy VNSRA_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_WVV), 26058c35d23Shuxuan0307 261d91483a6Sfdy VSADDU_VI -> OPIVI(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T, selImm = SelImm.IMM_OPIVIU), 262d91483a6Sfdy VSADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 26358c35d23Shuxuan0307 264d91483a6Sfdy VSSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 265d91483a6Sfdy VSSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vssra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 26658c35d23Shuxuan0307 267d91483a6Sfdy VNCLIPU_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, selImm = SelImm.IMM_OPIVIU, uopDivType = UopDivType.VEC_WVV), 268d91483a6Sfdy VNCLIP_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, uopDivType = UopDivType.VEC_WVV), 269d91483a6Sfdy 270d91483a6Sfdy VMV1R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 271d91483a6Sfdy VMV2R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 272d91483a6Sfdy VMV4R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 273d91483a6Sfdy VMV8R_V -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F), 27458c35d23Shuxuan0307 ) 2757f2b7720SXuan Hu 276b65b9ebaSXuan Hu val opmvv: Array[(BitPat, XSDecodeBase)] = Array( 277d91483a6Sfdy VAADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopDivType.VEC_VVV), 278d91483a6Sfdy VAADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopDivType.VEC_VVV), 279d91483a6Sfdy VASUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopDivType.VEC_VVV), 280d91483a6Sfdy VASUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopDivType.VEC_VVV), 281d91483a6Sfdy VCOMPRESS_VM -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 282d91483a6Sfdy VCPOP_M -> OPMVV(T, FuType.vipu, VipuType.vcpop_m, T, F, F, UopDivType.VEC_M0X), 283d91483a6Sfdy VDIV_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 284d91483a6Sfdy VDIVU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 285d91483a6Sfdy VFIRST_M -> OPMVV(T, FuType.vipu, VipuType.vfirst_m, T, F, F, UopDivType.VEC_M0X_VFIRST), 286d91483a6Sfdy VID_V -> OPMVV(T, FuType.vipu, VipuType.vid_v, F, T, F, UopDivType.VEC_MVV), 287d91483a6Sfdy VIOTA_M -> OPMVV(T, FuType.vipu, VipuType.viota_m, F, T, F, UopDivType.VEC_MVV), 288b65b9ebaSXuan Hu 289b65b9ebaSXuan Hu // VMACC_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 290b65b9ebaSXuan Hu 291912e2179SXuan Hu VMADD_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 292d91483a6Sfdy VMAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmand_mm, F, T, F, UopDivType.VEC_MMM), 293d91483a6Sfdy VMANDN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmandn_mm, F, T, F, UopDivType.VEC_MMM), 294d91483a6Sfdy VMNAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnand_mm, F, T, F, UopDivType.VEC_MMM), 295d91483a6Sfdy VMNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnor_mm, F, T, F, UopDivType.VEC_MMM), 296d91483a6Sfdy VMOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmor_mm, F, T, F, UopDivType.VEC_MMM), 297d91483a6Sfdy VMORN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmorn_mm, F, T, F, UopDivType.VEC_MMM), 298d91483a6Sfdy VMXNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxnor_mm, F, T, F, UopDivType.VEC_MMM), 299d91483a6Sfdy VMXOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxor_mm, F, T, F, UopDivType.VEC_MMM), 300d91483a6Sfdy VMSBF_M -> OPMVV(T, FuType.vipu, VipuType.vmsbf_m, F, T, F, UopDivType.VEC_M0M), 301d91483a6Sfdy VMSIF_M -> OPMVV(T, FuType.vipu, VipuType.vmsif_m, F, T, F, UopDivType.VEC_M0M), 302d91483a6Sfdy VMSOF_M -> OPMVV(T, FuType.vipu, VipuType.vmsof_m, F, T, F, UopDivType.VEC_M0M), 303d91483a6Sfdy VMUL_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 304d91483a6Sfdy VMULH_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 305d91483a6Sfdy VMULHSU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 306d91483a6Sfdy VMULHU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 307b65b9ebaSXuan Hu 308d91483a6Sfdy VMV_X_S -> OPMVV(T, FuType.vipu, VipuType.dummy, T, F, F), 309d91483a6Sfdy VNMSAC_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 310d91483a6Sfdy VNMSUB_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 311d91483a6Sfdy VREDAND_VS -> OPMVV(T, FuType.vipu, VipuType.vredand_vs, F, T, F, UopDivType.VEC_VRED), 312d91483a6Sfdy VREDMAX_VS -> OPMVV(T, FuType.vipu, VipuType.vredmax_vs, F, T, F, UopDivType.VEC_VRED), 313d91483a6Sfdy VREDMAXU_VS -> OPMVV(T, FuType.vipu, VipuType.vredmaxu_vs, F, T, F, UopDivType.VEC_VRED), 314d91483a6Sfdy VREDMIN_VS -> OPMVV(T, FuType.vipu, VipuType.vredmin_vs, F, T, F, UopDivType.VEC_VRED), 315d91483a6Sfdy VREDMINU_VS -> OPMVV(T, FuType.vipu, VipuType.vredminu_vs, F, T, F, UopDivType.VEC_VRED), 316d91483a6Sfdy VREDOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredor_vs, F, T, F, UopDivType.VEC_VRED), 317d91483a6Sfdy VREDSUM_VS -> OPMVV(T, FuType.vipu, VipuType.vredsum_vs, F, T, F, UopDivType.VEC_VRED), 318d91483a6Sfdy VREDXOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredxor_vs, F, T, F, UopDivType.VEC_VRED), 319d91483a6Sfdy VREM_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 320d91483a6Sfdy VREMU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 321d91483a6Sfdy VSEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf2, F, T, F, UopDivType.VEC_EXT2), 322d91483a6Sfdy VSEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf4, F, T, F, UopDivType.VEC_EXT4), 323d91483a6Sfdy VSEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf8, F, T, F, UopDivType.VEC_EXT8), 324d91483a6Sfdy VZEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf2, F, T, F, UopDivType.VEC_EXT2), 325d91483a6Sfdy VZEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf4, F, T, F, UopDivType.VEC_EXT4), 326d91483a6Sfdy VZEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf8, F, T, F, UopDivType.VEC_EXT8), 327d91483a6Sfdy VWADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopDivType.VEC_VVW), 328d91483a6Sfdy VWADD_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopDivType.VEC_WVW), 329d91483a6Sfdy VWADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopDivType.VEC_VVW), 330d91483a6Sfdy VWADDU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopDivType.VEC_WVW), 331912e2179SXuan Hu VWMACC_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 332912e2179SXuan Hu VWMACCSU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 333912e2179SXuan Hu VWMACCU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 334d91483a6Sfdy VWMUL_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 335d91483a6Sfdy VWMULSU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 336d91483a6Sfdy VWMULU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 337d91483a6Sfdy VWSUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopDivType.VEC_VVW), 338d91483a6Sfdy VWSUB_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopDivType.VEC_WVW), 339d91483a6Sfdy VWSUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopDivType.VEC_VVW), 340d91483a6Sfdy VWSUBU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopDivType.VEC_WVW), 341c6661c33SHaojin Tang ) 342912e2179SXuan Hu 343b65b9ebaSXuan Hu val opmvx: Array[(BitPat, XSDecodeBase)] = Array( 344d91483a6Sfdy VAADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F), 345d91483a6Sfdy VAADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F), 346d91483a6Sfdy VASUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F), 347d91483a6Sfdy VASUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F), 348d91483a6Sfdy VDIV_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 349d91483a6Sfdy VDIVU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 350912e2179SXuan Hu VMACC_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 351912e2179SXuan Hu VMADD_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 352d91483a6Sfdy VMUL_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 353d91483a6Sfdy VMULH_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 354d91483a6Sfdy VMULHSU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 355d91483a6Sfdy VMULHU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 356d91483a6Sfdy VMV_S_X -> OPMVX(T, FuType.vipu, VipuType.vmv_s_x, F, T, F, UopDivType.VEC_0XV), 357b65b9ebaSXuan Hu 358d91483a6Sfdy VNMSAC_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 359d91483a6Sfdy VNMSUB_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 360d91483a6Sfdy VREM_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 361d91483a6Sfdy VREMU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 362b65b9ebaSXuan Hu 363d91483a6Sfdy VSLIDE1DOWN_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1down, F, T, F, UopDivType.VEC_SLIDE1DOWN), 364d91483a6Sfdy VSLIDE1UP_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1up, F, T, F, UopDivType.VEC_SLIDE1UP), 365d91483a6Sfdy VWADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopDivType.VEC_VXW), 366d91483a6Sfdy VWADD_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopDivType.VEC_WXW), 367d91483a6Sfdy VWADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopDivType.VEC_VXW), 368d91483a6Sfdy VWADDU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopDivType.VEC_WXW), 369b65b9ebaSXuan Hu 370b65b9ebaSXuan Hu // OutOfMemoryError 371912e2179SXuan Hu VWMACC_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 372912e2179SXuan Hu VWMACCSU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 373912e2179SXuan Hu VWMACCU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 374b65b9ebaSXuan Hu 375912e2179SXuan Hu VWMACCUS_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 376d91483a6Sfdy VWMUL_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 377d91483a6Sfdy VWMULSU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 378b65b9ebaSXuan Hu // Ok 379d91483a6Sfdy VWMULU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 380d91483a6Sfdy VWSUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopDivType.VEC_VXW), 381d91483a6Sfdy VWSUB_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopDivType.VEC_WXW), 382d91483a6Sfdy VWSUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopDivType.VEC_VXW), 383d91483a6Sfdy VWSUBU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopDivType.VEC_WXW), 384c6661c33SHaojin Tang ) 3857f2b7720SXuan Hu 386b65b9ebaSXuan Hu val opfvv: Array[(BitPat, XSDecodeBase)] = Array( 387b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 388d91483a6Sfdy VFADD_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F), 389d91483a6Sfdy VFSUB_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F), 390b448988dSczw 391b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 392d91483a6Sfdy VFWADD_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F), 393d91483a6Sfdy VFWSUB_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F), 394d91483a6Sfdy VFWADD_WV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F), 395d91483a6Sfdy VFWSUB_WV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F), 396b448988dSczw 397b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 398d91483a6Sfdy VFMUL_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmul, F, T, F), 399d91483a6Sfdy VFDIV_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfdiv , F, T, F), 400b448988dSczw 401b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 402d91483a6Sfdy VFWMUL_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmul, F, T, F), 403b448988dSczw 404b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 405d91483a6Sfdy VFMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmacc , F, T, F), 406d91483a6Sfdy VFNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmacc, F, T, F), 407d91483a6Sfdy VFMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmsac , F, T, F), 408d91483a6Sfdy VFNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmsac, F, T, F), 409d91483a6Sfdy VFMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmadd , F, T, F), 410d91483a6Sfdy VFNMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmadd, F, T, F), 411d91483a6Sfdy VFMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmsub , F, T, F), 412d91483a6Sfdy VFNMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmsub, F, T, F), 413b448988dSczw 414b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 415d91483a6Sfdy VFWMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmacc , F, T, F), 416d91483a6Sfdy VFWNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmacc, F, T, F), 417d91483a6Sfdy VFWMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmsac , F, T, F), 418d91483a6Sfdy VFWNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmsac, F, T, F), 419b448988dSczw 420b448988dSczw // 13.8. Vector Floating-Point Square-Root Instruction 421912e2179SXuan Hu VFSQRT_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 422b448988dSczw 423b448988dSczw // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction 424912e2179SXuan Hu VFRSQRT7_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 425b448988dSczw 426b448988dSczw // 13.10. Vector Floating-Point Reciprocal Estimate Instruction 427912e2179SXuan Hu VFREC7_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 428b448988dSczw 429b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 430d91483a6Sfdy VFMIN_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmin, F, T, F), 431d91483a6Sfdy VFMAX_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmax, F, T, F), 432b448988dSczw 433b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 434d91483a6Sfdy VFSGNJ_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsgnj , F, T, F), 435d91483a6Sfdy VFSGNJN_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsgnjn, F, T, F), 436d91483a6Sfdy VFSGNJX_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsgnjx, F, T, F), 437b448988dSczw 438b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 439d91483a6Sfdy VMFEQ_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfeq, F, T, F), 440d91483a6Sfdy VMFNE_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfne, F, T, F), 441d91483a6Sfdy VMFLT_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vflt, F, T, F), 442d91483a6Sfdy VMFLE_VV -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfle, F, T, F), 443b448988dSczw 444b448988dSczw // 13.14. Vector Floating-Point Classify Instruction 445d91483a6Sfdy VFCLASS_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.fclass, F, T, F), 446b448988dSczw 447b448988dSczw // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions 448912e2179SXuan Hu VFCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 449912e2179SXuan Hu VFCVT_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 450912e2179SXuan Hu VFCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 451912e2179SXuan Hu VFCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 452912e2179SXuan Hu VFCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 453912e2179SXuan Hu VFCVT_F_X_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 454b448988dSczw 455b448988dSczw // 13.18. Widening Floating-Point/Integer Type-Convert Instructions 456912e2179SXuan Hu VFWCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 457912e2179SXuan Hu VFWCVT_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 458912e2179SXuan Hu VFWCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 459912e2179SXuan Hu VFWCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 460912e2179SXuan Hu VFWCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 461912e2179SXuan Hu VFWCVT_F_X_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 462912e2179SXuan Hu VFWCVT_F_F_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 463b448988dSczw 464b65b9ebaSXuan Hu // ! 465b448988dSczw // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions 466912e2179SXuan Hu VFNCVT_XU_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 467912e2179SXuan Hu VFNCVT_X_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 468912e2179SXuan Hu VFNCVT_RTZ_XU_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 469912e2179SXuan Hu VFNCVT_RTZ_X_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 470912e2179SXuan Hu VFNCVT_F_XU_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 471912e2179SXuan Hu VFNCVT_F_X_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 472912e2179SXuan Hu VFNCVT_F_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 473912e2179SXuan Hu VFNCVT_ROD_F_F_W -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 474b448988dSczw 475b448988dSczw // 14.3. Vector Single-Width Floating-Point Reduction Instructions 476912e2179SXuan Hu VFREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 477912e2179SXuan Hu VFREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 478912e2179SXuan Hu VFREDMAX_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 479912e2179SXuan Hu VFREDMIN_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 480b448988dSczw 481b448988dSczw // 14.4. Vector Widening Floating-Point Reduction Instructions 482912e2179SXuan Hu VFWREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 483912e2179SXuan Hu VFWREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 484b448988dSczw 485b448988dSczw // 16.2. Floating-Point Scalar Move Instructions 486d91483a6Sfdy VFMV_F_S -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmove, F, T, F),// f[rd] = vs2[0] (rs1=0) 487b448988dSczw ) 4887f2b7720SXuan Hu 489b65b9ebaSXuan Hu val opfvf: Array[(BitPat, XSDecodeBase)] = Array( 490b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 491d91483a6Sfdy VFADD_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F), 492d91483a6Sfdy VFSUB_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F), 493912e2179SXuan Hu VFRSUB_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 494b448988dSczw 495b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 496912e2179SXuan Hu VFWADD_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 497912e2179SXuan Hu VFWSUB_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 498912e2179SXuan Hu VFWADD_WF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 499912e2179SXuan Hu VFWSUB_WF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 500b448988dSczw 501b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 502912e2179SXuan Hu VFMUL_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 503d91483a6Sfdy VFDIV_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfdiv, F, T, F), 504912e2179SXuan Hu VFRDIV_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 505b448988dSczw 506b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 507912e2179SXuan Hu VFWMUL_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 508b448988dSczw 509b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 510d91483a6Sfdy VFMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.vfmacc, F, T, F), 511912e2179SXuan Hu VFNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 512912e2179SXuan Hu VFMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 513912e2179SXuan Hu VFNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 514912e2179SXuan Hu VFMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 515912e2179SXuan Hu VFNMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 516912e2179SXuan Hu VFMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 517912e2179SXuan Hu VFNMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 518b448988dSczw 519b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 520912e2179SXuan Hu VFWMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 521912e2179SXuan Hu VFWNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 522912e2179SXuan Hu VFWMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 523912e2179SXuan Hu VFWNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F), 524b448988dSczw 525b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 526d91483a6Sfdy VFMIN_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfmin, F, T, F), 527d91483a6Sfdy VFMAX_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfmax, F, T, F), 528b448988dSczw 529b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 530912e2179SXuan Hu VFSGNJ_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 531912e2179SXuan Hu VFSGNJN_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 532912e2179SXuan Hu VFSGNJX_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 533b448988dSczw 534b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 535912e2179SXuan Hu VMFEQ_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 536912e2179SXuan Hu VMFNE_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 537912e2179SXuan Hu VMFLT_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 538912e2179SXuan Hu VMFLE_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 539912e2179SXuan Hu VMFGT_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 540912e2179SXuan Hu VMFGE_VF -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T), 541b448988dSczw 542b448988dSczw // 13.15. Vector Floating-Point Merge Instruction 543912e2179SXuan Hu VFMERGE_VFM -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F), 544b448988dSczw 545b448988dSczw // 13.16. Vector Floating-Point Move Instruction 546912e2179SXuan Hu VFMV_V_F -> OPFVF(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),// src2=SrcType.X 547b448988dSczw 548b448988dSczw // 16.2. Floating-Point Scalar Move Instructions 549d91483a6Sfdy VFMV_S_F -> OPFVF(SrcType.fp, SrcType.vp, FuType.vppu, VpermType.vfmv_s_f, F, T, F),// vs2=0 // vs3 = vd 550b448988dSczw 551b448988dSczw // 16.3.3. Vector Slide1up 552d91483a6Sfdy VFSLIDE1UP_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vppu, VpermType.vfslide1up, F, T, F, UopDivType.VEC_FSLIDE1UP),// vd[0]=f[rs1], vd[i+1] = vs2[i] 553b448988dSczw 554b448988dSczw // 16.3.4. Vector Slide1down Instruction 555b448988dSczw // vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1] 556d91483a6Sfdy VFSLIDE1DOWN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vppu, VpermType.vfslide1down, F, T, F, UopDivType.VEC_FSLIDE1DOWN),// vd[i] = vs2[i+1], vd[vl-1]=f[rs1] 5577f2b7720SXuan Hu ) 5587f2b7720SXuan Hu 559b65b9ebaSXuan Hu val vset: Array[(BitPat, XSDecodeBase)] = Array( 560*a32c56f4SXuan Hu VSETVLI -> VSET(vli = F, vtypei = T, VSETOpType.uvsetvcfg_xi, F, SelImm.IMM_VSETVLI), 561*a32c56f4SXuan Hu VSETIVLI -> VSET(vli = T, vtypei = T, VSETOpType.uvsetvcfg_ii, F, SelImm.IMM_VSETIVLI), 562*a32c56f4SXuan Hu VSETVL -> VSET(vli = F, vtypei = F, VSETOpType.uvsetvcfg_xx, T, SelImm.X), // flush pipe 563912e2179SXuan Hu ) 5647f2b7720SXuan Hu 565b65b9ebaSXuan Hu val vls: Array[(BitPat, XSDecodeBase)] = Array( 566912e2179SXuan Hu // 7.4. Vector Unit-Stride Instructions 567912e2179SXuan Hu VLE8_V -> VLD(SrcType.X, VlduType.dummy), 568912e2179SXuan Hu VLE16_V -> VLD(SrcType.X, VlduType.dummy), 569912e2179SXuan Hu VLE32_V -> VLD(SrcType.X, VlduType.dummy), 570912e2179SXuan Hu VLE64_V -> VLD(SrcType.X, VlduType.dummy), 571912e2179SXuan Hu VSE8_V -> VST(SrcType.X, VstuType.dummy), 572912e2179SXuan Hu VSE16_V -> VST(SrcType.X, VstuType.dummy), 573912e2179SXuan Hu VSE32_V -> VST(SrcType.X, VstuType.dummy), 574912e2179SXuan Hu VSE64_V -> VST(SrcType.X, VstuType.dummy), 575912e2179SXuan Hu VLM_V -> VLD(SrcType.X, VlduType.dummy, mask = T), 576912e2179SXuan Hu VSM_V -> VST(SrcType.X, VstuType.dummy, mask = T), 577912e2179SXuan Hu // 7.5. Vector Strided Instructions 578912e2179SXuan Hu VLSE8_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 579912e2179SXuan Hu VLSE16_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 580912e2179SXuan Hu VLSE32_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 581912e2179SXuan Hu VLSE64_V -> VLD(SrcType.xp, VlduType.dummy, strided = T), 582912e2179SXuan Hu VSSE8_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 583912e2179SXuan Hu VSSE16_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 584912e2179SXuan Hu VSSE32_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 585912e2179SXuan Hu VSSE64_V -> VST(SrcType.xp, VstuType.dummy, strided = T), 586912e2179SXuan Hu // 7.6. Vector Indexed Instructions 587912e2179SXuan Hu VLUXEI8_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 588912e2179SXuan Hu VLUXEI16_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 589912e2179SXuan Hu VLUXEI32_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 590912e2179SXuan Hu VLUXEI64_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = F), 591912e2179SXuan Hu VLOXEI8_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 592912e2179SXuan Hu VLOXEI16_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 593912e2179SXuan Hu VLOXEI32_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 594912e2179SXuan Hu VLOXEI64_V -> VLD(SrcType.vp, VlduType.dummy, indexed = T, ordered = T), 595912e2179SXuan Hu VSUXEI8_V -> VLD(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 596912e2179SXuan Hu VSUXEI16_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 597912e2179SXuan Hu VSUXEI32_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 598912e2179SXuan Hu VSUXEI64_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = F), 599912e2179SXuan Hu VSOXEI8_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 600912e2179SXuan Hu VSOXEI16_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 601912e2179SXuan Hu VSOXEI32_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 602912e2179SXuan Hu VSOXEI64_V -> VST(SrcType.vp, VstuType.dummy, indexed = T, ordered = T), 603912e2179SXuan Hu // 7.7. Unit-stride Fault-Only-First Loads 604912e2179SXuan Hu VLE8FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 605912e2179SXuan Hu VLE16FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 606912e2179SXuan Hu VLE32FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 607912e2179SXuan Hu VLE64FF_V -> VLD(SrcType.X, VlduType.dummy, ff = T), 608912e2179SXuan Hu // 7.8. Vector Load/Store Segment Instructions 609912e2179SXuan Hu // 7.8.1. Vector Unit-Stride Segment Loads and Stores 610912e2179SXuan Hu // TODO 611912e2179SXuan Hu // 7.8.2. Vector Strided Segment Loads and Stores 612912e2179SXuan Hu // TODO 613912e2179SXuan Hu // 7.8.3. Vector Indexed Segment Loads and Stores 614912e2179SXuan Hu // TODO 615912e2179SXuan Hu // 7.9. Vector Load/Store Whole Register Instructions 616912e2179SXuan Hu VL1RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 617912e2179SXuan Hu VL1RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 618912e2179SXuan Hu VL1RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 619912e2179SXuan Hu VL1RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 620912e2179SXuan Hu VL2RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 621912e2179SXuan Hu VL2RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 622912e2179SXuan Hu VL2RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 623912e2179SXuan Hu VL2RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 624912e2179SXuan Hu VL4RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 625912e2179SXuan Hu VL4RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 626912e2179SXuan Hu VL4RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 627912e2179SXuan Hu VL4RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 628912e2179SXuan Hu VL8RE8_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 629912e2179SXuan Hu VL8RE16_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 630912e2179SXuan Hu VL8RE32_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 631912e2179SXuan Hu VL8RE64_V -> VLD(SrcType.X, VlduType.dummy, whole = T), 632912e2179SXuan Hu VS1R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 633912e2179SXuan Hu VS2R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 634912e2179SXuan Hu VS4R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 635912e2179SXuan Hu VS8R_V -> VST(SrcType.X, VlduType.dummy, whole = T), 636912e2179SXuan Hu ) 637912e2179SXuan Hu 638b65b9ebaSXuan Hu override val decodeArray: Array[(BitPat, XSDecodeBase)] = vset ++ vls ++ 639b65b9ebaSXuan Hu opivv ++ opivx ++ opivi ++ opmvv ++ opmvx ++ opfvv ++ opfvf 6407f2b7720SXuan Hu} 641