17f2b7720SXuan Hupackage xiangshan.backend.decode 27f2b7720SXuan Hu 383ba63b3SXuan Huimport org.chipsalliance.cde.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._ 139d3cebe7Schengguanghuiimport yunsuan.{VfpuType, VipuType, VimacType, VpermType, VialuFixType, VfaluType, VfmaType, VfdivType, VfcvtType} 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 2772d67441SXuan Hucase class OPIVV( 2872d67441SXuan Hu fu: FuType.OHType, 2972d67441SXuan Hu fuOp: BitPat, 3072d67441SXuan Hu vWen: Boolean, 3172d67441SXuan Hu mWen: Boolean, 3272d67441SXuan Hu vxsatWen: Boolean, 3372d67441SXuan Hu uopSplitType: BitPat = UopSplitType.VEC_VVV, 3472d67441SXuan Hu src1: BitPat = SrcType.vp, 3572d67441SXuan Hu src2: BitPat = SrcType.vp, 3672d67441SXuan Hu src3: BitPat = SrcType.vp 3772d67441SXuan Hu) extends XSDecodeBase { 387f2b7720SXuan Hu def generate() : List[BitPat] = { 3972d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 40b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 417f2b7720SXuan Hu } 427f2b7720SXuan Hu} 437f2b7720SXuan Hu 4472d67441SXuan Hucase class OPIVX( 4572d67441SXuan Hu fu: FuType.OHType, 4672d67441SXuan Hu fuOp: BitPat, 4772d67441SXuan Hu vWen: Boolean, 4872d67441SXuan Hu mWen: Boolean, 4972d67441SXuan Hu vxsatWen: Boolean, 5072d67441SXuan Hu uopSplitType: BitPat = UopSplitType.VEC_VXV, 5172d67441SXuan Hu src1: BitPat = SrcType.xp, 5272d67441SXuan Hu src2: BitPat = SrcType.vp, 5372d67441SXuan Hu src3: BitPat = SrcType.vp 5472d67441SXuan Hu) extends XSDecodeBase { 5558c35d23Shuxuan0307 def generate() : List[BitPat] = { 5672d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 57b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 5858c35d23Shuxuan0307 } 597f2b7720SXuan Hu} 607f2b7720SXuan Hu 6172d67441SXuan Hucase class OPIVI( 6272d67441SXuan Hu fu: FuType.OHType, 6372d67441SXuan Hu fuOp: BitPat, 6472d67441SXuan Hu vWen: Boolean, 6572d67441SXuan Hu mWen: Boolean, 6672d67441SXuan Hu vxsatWen: Boolean, 6772d67441SXuan Hu selImm: BitPat = SelImm.IMM_OPIVIS, 68d6059658SZiyue Zhang uopSplitType: BitPat = UopSplitType.VEC_VXV, 6972d67441SXuan Hu src1: BitPat = SrcType.imm, 7072d67441SXuan Hu src2: BitPat = SrcType.vp, 7172d67441SXuan Hu src3: BitPat = SrcType.vp 7272d67441SXuan Hu) extends XSDecodeBase { 7358c35d23Shuxuan0307 def generate() : List[BitPat] = { 7472d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, selImm, uopSplitType, 75b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 7658c35d23Shuxuan0307 } 777f2b7720SXuan Hu} 787f2b7720SXuan Hu 7972d67441SXuan Hucase class OPMVV( 8072d67441SXuan Hu vdRen: Boolean, 8172d67441SXuan Hu fu: FuType.OHType, 8272d67441SXuan Hu fuOp: BitPat, 8372d67441SXuan Hu xWen: Boolean, 8472d67441SXuan Hu vWen: Boolean, 8572d67441SXuan Hu mWen: Boolean, 8672d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 8772d67441SXuan Hu src1: BitPat = SrcType.vp, 8872d67441SXuan Hu src2: BitPat = SrcType.vp 8972d67441SXuan Hu) extends XSDecodeBase { 90c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 917f2b7720SXuan Hu def generate() : List[BitPat] = { 9272d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, xWen, F, vWen, mWen, F, F, F, F).generate() 937f2b7720SXuan Hu } 947f2b7720SXuan Hu} 957f2b7720SXuan Hu 9672d67441SXuan Hucase class OPMVX( 9772d67441SXuan Hu vdRen: Boolean, 9872d67441SXuan Hu fu: FuType.OHType, 9972d67441SXuan Hu fuOp: BitPat, 10072d67441SXuan Hu xWen: Boolean, 10172d67441SXuan Hu vWen: Boolean, 10272d67441SXuan Hu mWen: Boolean, 10372d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 10472d67441SXuan Hu src1: BitPat = SrcType.xp, 10572d67441SXuan Hu src2: BitPat = SrcType.vp 10672d67441SXuan Hu) extends XSDecodeBase { 107c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 108c6661c33SHaojin Tang def generate() : List[BitPat] = { 10972d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 110b65b9ebaSXuan Hu xWen = xWen, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 111c6661c33SHaojin Tang } 1127f2b7720SXuan Hu} 1137f2b7720SXuan Hu 11472d67441SXuan Hucase class OPFVV( 11572d67441SXuan Hu src1: BitPat, 11672d67441SXuan Hu src3: BitPat, 11772d67441SXuan Hu fu: FuType.OHType, 11872d67441SXuan Hu fuOp: BitPat, 11972d67441SXuan Hu fWen: Boolean, 12072d67441SXuan Hu vWen: Boolean, 12172d67441SXuan Hu mWen: Boolean, 12272d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 12372d67441SXuan Hu src2: BitPat = SrcType.vp 12472d67441SXuan Hu) extends XSDecodeBase { 125b448988dSczw def generate() : List[BitPat] = { 12672d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 127b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 128b448988dSczw } 1297f2b7720SXuan Hu} 1307f2b7720SXuan Hu 131239413e5SXuan Hucase class OPFFF(src1: BitPat, src3: BitPat, fu: FuType.OHType, fuOp: BitPat, xWen: Boolean, fWen: Boolean, vWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase { 132bdda74fdSxiaofeibao-xjtu def generate() : List[BitPat] = { 133bdda74fdSxiaofeibao-xjtu XSDecode(src1, SrcType.fp, src3, fu, fuOp, SelImm.X, uopSplitType, 134bdda74fdSxiaofeibao-xjtu xWen = xWen, fWen = fWen, vWen = vWen, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F, canRobCompress = T).generate() 135bdda74fdSxiaofeibao-xjtu } 136bdda74fdSxiaofeibao-xjtu} 137bdda74fdSxiaofeibao-xjtu 13872d67441SXuan Hucase class OPFVF( 13972d67441SXuan Hu src1: BitPat, 14072d67441SXuan Hu src3: BitPat, 14172d67441SXuan Hu fu: FuType.OHType, 14272d67441SXuan Hu fuOp: BitPat, 14372d67441SXuan Hu fWen: Boolean, 14472d67441SXuan Hu vWen: Boolean, 14572d67441SXuan Hu mWen: Boolean, 14672d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 14772d67441SXuan Hu src2: BitPat = SrcType.vp 14872d67441SXuan Hu) extends XSDecodeBase { 1497f2b7720SXuan Hu def generate() : List[BitPat] = { 1509bb931c8Sxiaofeibao-xjtu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 151b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 1527f2b7720SXuan Hu } 1537f2b7720SXuan Hu} 1547f2b7720SXuan Hu 155e25c13faSXuan Hucase class VSET(vli: Boolean, vtypei: Boolean, fuOp: BitPat, flushPipe: Boolean, selImm: BitPat, uopSplitType: BitPat = UopSplitType.VSET) extends XSDecodeBase { 156912e2179SXuan Hu def generate() : List[BitPat] = { 157912e2179SXuan Hu val src1 = if (vli) SrcType.imm else SrcType.xp 158912e2179SXuan Hu val src2 = if (vtypei) SrcType.imm else SrcType.xp 15917ec87f2SXuan Hu XSDecode(src1, src2, SrcType.X, FuType.vsetiwf, fuOp, selImm, uopSplitType, 1604cdab2a9SXuan Hu xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = flushPipe).generate() 161912e2179SXuan Hu } 1627f2b7720SXuan Hu} 1637f2b7720SXuan Hu 164912e2179SXuan Hucase class VLD(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, ff: Boolean = false, 165c4501a6fSZiyue-Zhang mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.VEC_US_LDST) extends XSDecodeBase { 166912e2179SXuan Hu def generate() : List[BitPat] = { 167912e2179SXuan Hu val fu = FuType.vldu 168912e2179SXuan Hu val src1 = SrcType.xp 169382346a1Szhanglinjuan val src3 = SrcType.vp 170e2695e90SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 171b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 172912e2179SXuan Hu } 173912e2179SXuan Hu} 174912e2179SXuan Hu 175912e2179SXuan Hucase class VST(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, 176c4501a6fSZiyue-Zhang mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.VEC_US_LDST) extends XSDecodeBase { 177912e2179SXuan Hu def generate() : List[BitPat] = { 178912e2179SXuan Hu val fu = FuType.vstu 179912e2179SXuan Hu val src1 = SrcType.xp 180912e2179SXuan Hu val src3 = SrcType.vp 181e2695e90SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 182b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 183912e2179SXuan Hu } 1847f2b7720SXuan Hu} 1857f2b7720SXuan Hu 1867f2b7720SXuan Huobject VecDecoder extends DecodeConstants { 187b65b9ebaSXuan Hu val opivv: Array[(BitPat, XSDecodeBase)] = Array( 188d91483a6Sfdy VADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 189d91483a6Sfdy VSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 1907f2b7720SXuan Hu 191d91483a6Sfdy VMINU_VV -> OPIVV(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 192d91483a6Sfdy VMIN_VV -> OPIVV(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 193d91483a6Sfdy VMAXU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 194d91483a6Sfdy VMAX_VV -> OPIVV(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 19558c35d23Shuxuan0307 196d91483a6Sfdy VAND_VV -> OPIVV(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 197d91483a6Sfdy VOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 198d91483a6Sfdy VXOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 19958c35d23Shuxuan0307 200e2695e90SzhanglyGit VRGATHER_VV -> OPIVV(FuType.vppu, VpermType.vrgather, T, F, F, UopSplitType.VEC_RGATHER), 201e2695e90SzhanglyGit VRGATHEREI16_VV -> OPIVV(FuType.vppu, VpermType.vrgatherei16, T, F, F, UopSplitType.VEC_RGATHEREI16), 20258c35d23Shuxuan0307 203d91483a6Sfdy VADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 204e2695e90SzhanglyGit VMADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VVM), 205e2695e90SzhanglyGit VMADC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VVM), 20658c35d23Shuxuan0307 207d91483a6Sfdy VSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 208e2695e90SzhanglyGit VMSBC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VVM), 209e2695e90SzhanglyGit VMSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VVM), 21058c35d23Shuxuan0307 211d91483a6Sfdy VMERGE_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 21258c35d23Shuxuan0307 21372d67441SXuan Hu VMV_V_V -> OPIVV(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F, src2 = SrcType.no), // vd[i] = vs1[i], vs2=v0 21458c35d23Shuxuan0307 215e2695e90SzhanglyGit VMSEQ_VV -> OPIVV(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VVM), 216e2695e90SzhanglyGit VMSNE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VVM), 217e2695e90SzhanglyGit VMSLTU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VVM), 218e2695e90SzhanglyGit VMSLT_VV -> OPIVV(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VVM), 219e2695e90SzhanglyGit VMSLEU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VVM), 220e2695e90SzhanglyGit VMSLE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VVM), 22158c35d23Shuxuan0307 222d91483a6Sfdy VSLL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 223d91483a6Sfdy VSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 224d91483a6Sfdy VSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 225e2695e90SzhanglyGit VNSRL_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WVV), 226e2695e90SzhanglyGit VNSRA_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WVV), 22758c35d23Shuxuan0307 228d91483a6Sfdy VSADDU_VV -> OPIVV(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 229d91483a6Sfdy VSADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 230d91483a6Sfdy VSSUBU_VV -> OPIVV(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 231d91483a6Sfdy VSSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 23258c35d23Shuxuan0307 233d6059658SZiyue Zhang VSMUL_VV -> OPIVV(FuType.vimac, VimacType.vsmul, T, F, T), 23458c35d23Shuxuan0307 235d91483a6Sfdy VSSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 236d91483a6Sfdy VSSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 23758c35d23Shuxuan0307 238e2695e90SzhanglyGit VNCLIPU_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WVV), 239e2695e90SzhanglyGit VNCLIP_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WVV), 240d91483a6Sfdy 241e2695e90SzhanglyGit VWREDSUMU_VS -> OPIVV(FuType.vipu, VipuType.vwredsumu_vs, T, F, F, UopSplitType.VEC_VWW), 242e2695e90SzhanglyGit VWREDSUM_VS -> OPIVV(FuType.vipu, VipuType.vwredsum_vs, T, F, F, UopSplitType.VEC_VWW), 2437f2b7720SXuan Hu ) 2447f2b7720SXuan Hu 245b65b9ebaSXuan Hu val opivx: Array[(BitPat, XSDecodeBase)] = Array( 246d91483a6Sfdy VADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 247d91483a6Sfdy VSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 248d91483a6Sfdy VRSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 24958c35d23Shuxuan0307 250d91483a6Sfdy VMINU_VX -> OPIVX(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 251d91483a6Sfdy VMIN_VX -> OPIVX(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 252d91483a6Sfdy VMAXU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 253d91483a6Sfdy VMAX_VX -> OPIVX(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 25458c35d23Shuxuan0307 255d91483a6Sfdy VAND_VX -> OPIVX(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 256d91483a6Sfdy VOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 257d91483a6Sfdy VXOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 25858c35d23Shuxuan0307 259e2695e90SzhanglyGit VRGATHER_VX -> OPIVX(FuType.vppu, VpermType.vrgather_vx, T, F, F, UopSplitType.VEC_RGATHER_VX), 26058c35d23Shuxuan0307 261e2695e90SzhanglyGit VSLIDEUP_VX -> OPIVX(FuType.vppu, VpermType.vslideup, T, F, F, UopSplitType.VEC_SLIDEUP), 262e2695e90SzhanglyGit VSLIDEDOWN_VX -> OPIVX(FuType.vppu, VpermType.vslidedown, T, F, F, UopSplitType.VEC_SLIDEDOWN), 26358c35d23Shuxuan0307 264d91483a6Sfdy VADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 265e2695e90SzhanglyGit VMADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VXM), 266e2695e90SzhanglyGit VMADC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VXM), 267d91483a6Sfdy VSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 268e2695e90SzhanglyGit VMSBC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VXM), 269e2695e90SzhanglyGit VMSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VXM), 27058c35d23Shuxuan0307 271d91483a6Sfdy VMERGE_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 27258c35d23Shuxuan0307 27372d67441SXuan Hu VMV_V_X -> OPIVX(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F, src2 = SrcType.no), // vd[i] = x[rs1], vs2 = v0 27458c35d23Shuxuan0307 275e2695e90SzhanglyGit VMSEQ_VX -> OPIVX(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VXM), 276e2695e90SzhanglyGit VMSNE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VXM), 277e2695e90SzhanglyGit VMSLTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VXM), 278e2695e90SzhanglyGit VMSLT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VXM), 279e2695e90SzhanglyGit VMSLEU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VXM), 280e2695e90SzhanglyGit VMSLE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VXM), 281e2695e90SzhanglyGit VMSGTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, UopSplitType.VEC_VXM), 282e2695e90SzhanglyGit VMSGT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, UopSplitType.VEC_VXM), 28358c35d23Shuxuan0307 284d91483a6Sfdy VSLL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 285d91483a6Sfdy VSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 286d91483a6Sfdy VSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 287e2695e90SzhanglyGit VNSRL_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WXV), 288e2695e90SzhanglyGit VNSRA_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WXV), 289d91483a6Sfdy 290d91483a6Sfdy VSADDU_VX -> OPIVX(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 291d91483a6Sfdy VSADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 292d91483a6Sfdy VSSUBU_VX -> OPIVX(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 293d91483a6Sfdy VSSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 29458c35d23Shuxuan0307 2958fb63ad6SXuan Hu VSMUL_VX -> OPIVX(FuType.vimac, VimacType.vsmul, T, F, T, UopSplitType.VEC_VXV), 29658c35d23Shuxuan0307 297d91483a6Sfdy VSSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 298d91483a6Sfdy VSSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 29958c35d23Shuxuan0307 300e2695e90SzhanglyGit VNCLIPU_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WXV), 301e2695e90SzhanglyGit VNCLIP_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WXV), 30258c35d23Shuxuan0307 ) 30358c35d23Shuxuan0307 304b65b9ebaSXuan Hu val opivi: Array[(BitPat, XSDecodeBase)] = Array( 305d91483a6Sfdy VADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 306d91483a6Sfdy VRSUB_VI -> OPIVI(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 30758c35d23Shuxuan0307 308d91483a6Sfdy VAND_VI -> OPIVI(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 309d91483a6Sfdy VOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 310d91483a6Sfdy VXOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 31158c35d23Shuxuan0307 312b1712600SZiyue Zhang VRGATHER_VI -> OPIVI(FuType.vppu, VpermType.vrgather_vx, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_RGATHER_VX), 31358c35d23Shuxuan0307 314d6059658SZiyue Zhang VSLIDEUP_VI -> OPIVI(FuType.vppu, VpermType.vslideup, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_SLIDEUP), 315d6059658SZiyue Zhang VSLIDEDOWN_VI -> OPIVI(FuType.vppu, VpermType.vslidedown, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_SLIDEDOWN), 31658c35d23Shuxuan0307 317d91483a6Sfdy VADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 318d6059658SZiyue Zhang VMADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vvm, T, F, F, uopSplitType = UopSplitType.VEC_VXM), 319d6059658SZiyue Zhang VMADC_VI -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vv, T, F, F, uopSplitType = UopSplitType.VEC_VXM), 32058c35d23Shuxuan0307 321d91483a6Sfdy VMERGE_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 32258c35d23Shuxuan0307 32372d67441SXuan Hu VMV_V_I -> OPIVI(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F, src2 = SrcType.no), // vd[i] = imm, vs2 = v0 32458c35d23Shuxuan0307 325d6059658SZiyue Zhang VMSEQ_VI -> OPIVI(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 326d6059658SZiyue Zhang VMSNE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 327d6059658SZiyue Zhang VMSLEU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_VXM), 328d6059658SZiyue Zhang VMSLE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 329d6059658SZiyue Zhang VMSGTU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_VXM), 330d6059658SZiyue Zhang VMSGT_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 33158c35d23Shuxuan0307 332d91483a6Sfdy VSLL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsll_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 333d91483a6Sfdy VSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 334d91483a6Sfdy VSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vsra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 335d6059658SZiyue Zhang VNSRL_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WXV), 336d6059658SZiyue Zhang VNSRA_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WXV), 33758c35d23Shuxuan0307 338d91483a6Sfdy VSADDU_VI -> OPIVI(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T, selImm = SelImm.IMM_OPIVIU), 339d91483a6Sfdy VSADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 34058c35d23Shuxuan0307 341d91483a6Sfdy VSSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 342d91483a6Sfdy VSSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vssra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 34358c35d23Shuxuan0307 344d6059658SZiyue Zhang VNCLIPU_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WXV), 345d6059658SZiyue Zhang VNCLIP_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, uopSplitType = UopSplitType.VEC_WXV), 346d91483a6Sfdy 3470a34fc22SZiyue Zhang VMV1R_V -> OPIVI(FuType.vppu, VpermType.vmvnr, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv1r.v vd, vs2 3480a34fc22SZiyue Zhang VMV2R_V -> OPIVI(FuType.vppu, VpermType.vmvnr, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv2r.v vd, vs2 3490a34fc22SZiyue Zhang VMV4R_V -> OPIVI(FuType.vppu, VpermType.vmvnr, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv4r.v vd, vs2 3500a34fc22SZiyue Zhang VMV8R_V -> OPIVI(FuType.vppu, VpermType.vmvnr, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv8r.v vd, vs2 35158c35d23Shuxuan0307 ) 3527f2b7720SXuan Hu 353b65b9ebaSXuan Hu val opmvv: Array[(BitPat, XSDecodeBase)] = Array( 354e2695e90SzhanglyGit VAADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VVV), 355e2695e90SzhanglyGit VAADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VVV), 356e2695e90SzhanglyGit VASUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VVV), 357e2695e90SzhanglyGit VASUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VVV), 358adf68ff3Sczw VCOMPRESS_VM -> OPMVV(T, FuType.vppu, VpermType.vcompress, F, T, F, UopSplitType.VEC_COMPRESS), 35972d67441SXuan Hu VCPOP_M -> OPMVV(T, FuType.vipu, VipuType.vcpop_m, T, F, F, UopSplitType.VEC_M0X, src1 = SrcType.no), // vcpop.m rd, vs2, vm 360d91483a6Sfdy VDIV_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 361d91483a6Sfdy VDIVU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 36272d67441SXuan Hu VFIRST_M -> OPMVV(T, FuType.vipu, VipuType.vfirst_m, T, F, F, UopSplitType.VEC_M0X_VFIRST, src1 = SrcType.no), // vfirst.m rd, vs2, vm 36372d67441SXuan Hu VID_V -> OPMVV(T, FuType.vipu, VipuType.vid_v, F, T, F, UopSplitType.VEC_MVV, src1 = SrcType.no, src2 = SrcType.no), // vid.v vd, vm 36472d67441SXuan Hu VIOTA_M -> OPMVV(T, FuType.vipu, VipuType.viota_m, F, T, F, UopSplitType.VEC_MVV, src1 = SrcType.no), // viota.m vd, vs2, vm 365b65b9ebaSXuan Hu 366adf68ff3Sczw VMACC_VV -> OPMVV(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VVV), 367adf68ff3Sczw VMADD_VV -> OPMVV(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VVV), 368e2695e90SzhanglyGit VMAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmand_mm, F, T, F, UopSplitType.VEC_MMM), 369e2695e90SzhanglyGit VMANDN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmandn_mm, F, T, F, UopSplitType.VEC_MMM), 370e2695e90SzhanglyGit VMNAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnand_mm, F, T, F, UopSplitType.VEC_MMM), 371e2695e90SzhanglyGit VMNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnor_mm, F, T, F, UopSplitType.VEC_MMM), 372e2695e90SzhanglyGit VMOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmor_mm, F, T, F, UopSplitType.VEC_MMM), 373e2695e90SzhanglyGit VMORN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmorn_mm, F, T, F, UopSplitType.VEC_MMM), 374e2695e90SzhanglyGit VMXNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxnor_mm, F, T, F, UopSplitType.VEC_MMM), 375e2695e90SzhanglyGit VMXOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxor_mm, F, T, F, UopSplitType.VEC_MMM), 37672d67441SXuan Hu VMSBF_M -> OPMVV(T, FuType.vipu, VipuType.vmsbf_m, F, T, F, UopSplitType.VEC_M0M, src1 = SrcType.no), // vmsbf.m vd, vs2, vm 37772d67441SXuan Hu VMSIF_M -> OPMVV(T, FuType.vipu, VipuType.vmsif_m, F, T, F, UopSplitType.VEC_M0M, src1 = SrcType.no), // vmsif.m vd, vs2, vm 37872d67441SXuan Hu VMSOF_M -> OPMVV(T, FuType.vipu, VipuType.vmsof_m, F, T, F, UopSplitType.VEC_M0M, src1 = SrcType.no), // vmsof.m vd, vs2, vm 379adf68ff3Sczw VMUL_VV -> OPMVV(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VVV), 380adf68ff3Sczw VMULH_VV -> OPMVV(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VVV), 381adf68ff3Sczw VMULHSU_VV -> OPMVV(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VVV), 382adf68ff3Sczw VMULHU_VV -> OPMVV(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VVV), 383b65b9ebaSXuan Hu 384*daae8f22SZiyue Zhang VMV_X_S -> OPMVV(T, FuType.vipu, VipuType.vmv_x_s, T, F, F, src1 = SrcType.no), // vmv.x.s rd, vs2 # x[rd] = vs2[0] 385adf68ff3Sczw VNMSAC_VV -> OPMVV(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VVV), 386adf68ff3Sczw VNMSUB_VV -> OPMVV(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VVV), 387e2695e90SzhanglyGit VREDAND_VS -> OPMVV(T, FuType.vipu, VipuType.vredand_vs, F, T, F, UopSplitType.VEC_VRED), 388e2695e90SzhanglyGit VREDMAX_VS -> OPMVV(T, FuType.vipu, VipuType.vredmax_vs, F, T, F, UopSplitType.VEC_VRED), 389e2695e90SzhanglyGit VREDMAXU_VS -> OPMVV(T, FuType.vipu, VipuType.vredmaxu_vs, F, T, F, UopSplitType.VEC_VRED), 390e2695e90SzhanglyGit VREDMIN_VS -> OPMVV(T, FuType.vipu, VipuType.vredmin_vs, F, T, F, UopSplitType.VEC_VRED), 391e2695e90SzhanglyGit VREDMINU_VS -> OPMVV(T, FuType.vipu, VipuType.vredminu_vs, F, T, F, UopSplitType.VEC_VRED), 392e2695e90SzhanglyGit VREDOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredor_vs, F, T, F, UopSplitType.VEC_VRED), 393e2695e90SzhanglyGit VREDSUM_VS -> OPMVV(T, FuType.vipu, VipuType.vredsum_vs, F, T, F, UopSplitType.VEC_VRED), 394e2695e90SzhanglyGit VREDXOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredxor_vs, F, T, F, UopSplitType.VEC_VRED), 395d91483a6Sfdy VREM_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 396d91483a6Sfdy VREMU_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F), 39772d67441SXuan Hu VSEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf2, F, T, F, UopSplitType.VEC_EXT2, src1 = SrcType.no), // vsext.vf2 vd, vs2, vm 39872d67441SXuan Hu VSEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf4, F, T, F, UopSplitType.VEC_EXT4, src1 = SrcType.no), // vsext.vf4 vd, vs2, vm 39972d67441SXuan Hu VSEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf8, F, T, F, UopSplitType.VEC_EXT8, src1 = SrcType.no), // vsext.vf8 vd, vs2, vm 40072d67441SXuan Hu VZEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf2, F, T, F, UopSplitType.VEC_EXT2, src1 = SrcType.no), // vzext.vf2 vd, vs2, vm 40172d67441SXuan Hu VZEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf4, F, T, F, UopSplitType.VEC_EXT4, src1 = SrcType.no), // vzext.vf4 vd, vs2, vm 40272d67441SXuan Hu VZEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf8, F, T, F, UopSplitType.VEC_EXT8, src1 = SrcType.no), // vzext.vf8 vd, vs2, vm 403e2695e90SzhanglyGit VWADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VVW), 404e2695e90SzhanglyGit VWADD_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WVW), 405e2695e90SzhanglyGit VWADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VVW), 406e2695e90SzhanglyGit VWADDU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WVW), 407adf68ff3Sczw VWMACC_VV -> OPMVV(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VVW), 408adf68ff3Sczw VWMACCSU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VVW), 409adf68ff3Sczw VWMACCU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VVW), 410adf68ff3Sczw VWMUL_VV -> OPMVV(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VVW), 411adf68ff3Sczw VWMULSU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VVW), 412adf68ff3Sczw VWMULU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VVW), 413e2695e90SzhanglyGit VWSUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VVW), 414e2695e90SzhanglyGit VWSUB_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WVW), 415e2695e90SzhanglyGit VWSUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VVW), 416e2695e90SzhanglyGit VWSUBU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WVW), 417c6661c33SHaojin Tang ) 418912e2179SXuan Hu 419b65b9ebaSXuan Hu val opmvx: Array[(BitPat, XSDecodeBase)] = Array( 420e2695e90SzhanglyGit VAADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VXV), 421e2695e90SzhanglyGit VAADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VXV), 422e2695e90SzhanglyGit VASUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VXV), 423e2695e90SzhanglyGit VASUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VXV), 424d91483a6Sfdy VDIV_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 425d91483a6Sfdy VDIVU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 426adf68ff3Sczw VMACC_VX -> OPMVX(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VXV), 427adf68ff3Sczw VMADD_VX -> OPMVX(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VXV), 428adf68ff3Sczw VMUL_VX -> OPMVX(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VXV), 429adf68ff3Sczw VMULH_VX -> OPMVX(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VXV), 430adf68ff3Sczw VMULHSU_VX -> OPMVX(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VXV), 431adf68ff3Sczw VMULHU_VX -> OPMVX(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VXV), 4327c67deccSZiyue Zhang VMV_S_X -> OPMVX(T, FuType.vialuF, VialuFixType.vmv_s_x, F, T, F, UopSplitType.VEC_0XV, src2 = SrcType.no), // vmv.s.x vd, rs1 # vd[0] = x[rs1] (vs2=0) 433b65b9ebaSXuan Hu 434adf68ff3Sczw VNMSAC_VX -> OPMVX(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VXV), 435adf68ff3Sczw VNMSUB_VX -> OPMVX(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VXV), 436d91483a6Sfdy VREM_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 437d91483a6Sfdy VREMU_VX -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F), 438b65b9ebaSXuan Hu 439e2695e90SzhanglyGit VSLIDE1DOWN_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1down, F, T, F, UopSplitType.VEC_SLIDE1DOWN), 440e2695e90SzhanglyGit VSLIDE1UP_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1up, F, T, F, UopSplitType.VEC_SLIDE1UP), 441e2695e90SzhanglyGit VWADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VXW), 442e2695e90SzhanglyGit VWADD_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WXW), 443e2695e90SzhanglyGit VWADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VXW), 444e2695e90SzhanglyGit VWADDU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WXW), 445b65b9ebaSXuan Hu 446b65b9ebaSXuan Hu // OutOfMemoryError 447adf68ff3Sczw VWMACC_VX -> OPMVX(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VXW), 448adf68ff3Sczw VWMACCSU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VXW), 449adf68ff3Sczw VWMACCU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VXW), 450b65b9ebaSXuan Hu 451adf68ff3Sczw VWMACCUS_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccus, F, T, F, UopSplitType.VEC_VXW), 452adf68ff3Sczw VWMUL_VX -> OPMVX(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VXW), 453adf68ff3Sczw VWMULSU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VXW), 454b65b9ebaSXuan Hu // Ok 455adf68ff3Sczw VWMULU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VXW), 456e2695e90SzhanglyGit VWSUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VXW), 457e2695e90SzhanglyGit VWSUB_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WXW), 458e2695e90SzhanglyGit VWSUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VXW), 459e2695e90SzhanglyGit VWSUBU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WXW), 460c6661c33SHaojin Tang ) 4617f2b7720SXuan Hu 462bdda74fdSxiaofeibao-xjtu val opfff: Array[(BitPat, XSDecodeBase)] = Array( 463bdda74fdSxiaofeibao-xjtu // Scalar Float Point 464bdda74fdSxiaofeibao-xjtu FADD_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.SCA_SIM), 465bdda74fdSxiaofeibao-xjtu FADD_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.SCA_SIM), 466bdda74fdSxiaofeibao-xjtu FSUB_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsub, F, T, F, UopSplitType.SCA_SIM), 467bdda74fdSxiaofeibao-xjtu FSUB_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsub, F, T, F, UopSplitType.SCA_SIM), 468bdda74fdSxiaofeibao-xjtu FEQ_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfeq , T, F, F, UopSplitType.SCA_SIM), 469bdda74fdSxiaofeibao-xjtu FLT_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vflt , T, F, F, UopSplitType.SCA_SIM), 470bdda74fdSxiaofeibao-xjtu FLE_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfle , T, F, F, UopSplitType.SCA_SIM), 471bdda74fdSxiaofeibao-xjtu FEQ_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfeq , T, F, F, UopSplitType.SCA_SIM), 472bdda74fdSxiaofeibao-xjtu FLT_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vflt , T, F, F, UopSplitType.SCA_SIM), 473bdda74fdSxiaofeibao-xjtu FLE_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfle , T, F, F, UopSplitType.SCA_SIM), 474bdda74fdSxiaofeibao-xjtu FMIN_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.SCA_SIM), 475bdda74fdSxiaofeibao-xjtu FMIN_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.SCA_SIM), 476bdda74fdSxiaofeibao-xjtu FMAX_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.SCA_SIM), 477bdda74fdSxiaofeibao-xjtu FMAX_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.SCA_SIM), 478bdda74fdSxiaofeibao-xjtu // donot wflags 479bdda74fdSxiaofeibao-xjtu FCLASS_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfclass, T, F, F, UopSplitType.SCA_SIM), 480bdda74fdSxiaofeibao-xjtu FCLASS_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfclass, T, F, F, UopSplitType.SCA_SIM), 481bdda74fdSxiaofeibao-xjtu FSGNJ_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnj , F, T, F, UopSplitType.SCA_SIM), 482bdda74fdSxiaofeibao-xjtu FSGNJ_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnj , F, T, F, UopSplitType.SCA_SIM), 483bdda74fdSxiaofeibao-xjtu FSGNJX_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjx, F, T, F, UopSplitType.SCA_SIM), 484bdda74fdSxiaofeibao-xjtu FSGNJX_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjx, F, T, F, UopSplitType.SCA_SIM), 485bdda74fdSxiaofeibao-xjtu FSGNJN_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjn, F, T, F, UopSplitType.SCA_SIM), 486bdda74fdSxiaofeibao-xjtu FSGNJN_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfsgnjn, F, T, F, UopSplitType.SCA_SIM), 487bdda74fdSxiaofeibao-xjtu 488bdda74fdSxiaofeibao-xjtu FMUL_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfma , VfmaType.vfmul, F, T, F, UopSplitType.SCA_SIM), 489bdda74fdSxiaofeibao-xjtu FMUL_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfma , VfmaType.vfmul, F, T, F, UopSplitType.SCA_SIM), 490bdda74fdSxiaofeibao-xjtu 491bdda74fdSxiaofeibao-xjtu FDIV_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfdiv , F, T, F, UopSplitType.SCA_SIM), 492bdda74fdSxiaofeibao-xjtu FDIV_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfdiv , F, T, F, UopSplitType.SCA_SIM), 493bdda74fdSxiaofeibao-xjtu FSQRT_S -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfsqrt, F, T, F, UopSplitType.SCA_SIM), 494bdda74fdSxiaofeibao-xjtu FSQRT_D -> OPFFF(SrcType.fp, SrcType.X, FuType.vfdiv, VfdivType.vfsqrt, F, T, F, UopSplitType.SCA_SIM), 495bdda74fdSxiaofeibao-xjtu 496bdda74fdSxiaofeibao-xjtu FMADD_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.SCA_SIM), 497bdda74fdSxiaofeibao-xjtu FMSUB_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.SCA_SIM), 498bdda74fdSxiaofeibao-xjtu FNMADD_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.SCA_SIM), 499bdda74fdSxiaofeibao-xjtu FNMSUB_S -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.SCA_SIM), 500bdda74fdSxiaofeibao-xjtu FMADD_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.SCA_SIM), 501bdda74fdSxiaofeibao-xjtu FMSUB_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.SCA_SIM), 502bdda74fdSxiaofeibao-xjtu FNMADD_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.SCA_SIM), 503bdda74fdSxiaofeibao-xjtu FNMSUB_D -> OPFFF(SrcType.fp, SrcType.fp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.SCA_SIM), 504bdda74fdSxiaofeibao-xjtu ) 505bdda74fdSxiaofeibao-xjtu 506b65b9ebaSXuan Hu val opfvv: Array[(BitPat, XSDecodeBase)] = Array( 507b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 508cb81ef42Sxiaofeibao-xjtu VFADD_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.VEC_VVV), 509cb81ef42Sxiaofeibao-xjtu VFSUB_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsub, F, T, F, UopSplitType.VEC_VVV), 510b448988dSczw 511b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 512cb81ef42Sxiaofeibao-xjtu VFWADD_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd , F, T, F, UopSplitType.VEC_VVW), 513cb81ef42Sxiaofeibao-xjtu VFWSUB_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub , F, T, F, UopSplitType.VEC_VVW), 514cb81ef42Sxiaofeibao-xjtu VFWADD_WV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd_w, F, T, F, UopSplitType.VEC_WVW), 515cb81ef42Sxiaofeibao-xjtu VFWSUB_WV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub_w, F, T, F, UopSplitType.VEC_WVW), 516b448988dSczw 517b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 518cb81ef42Sxiaofeibao-xjtu VFMUL_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfma, VfmaType.vfmul, F, T, F, UopSplitType.VEC_VVV), 519cb81ef42Sxiaofeibao-xjtu VFDIV_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv , F, T, F, UopSplitType.VEC_VVV), 520b448988dSczw 521b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 522cb81ef42Sxiaofeibao-xjtu VFWMUL_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfma, VfmaType.vfmul_w, F, T, F, UopSplitType.VEC_VVW), 523b448988dSczw 524b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 525b19366b2Sxiaofeibao-xjtu VFMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.VEC_VVV), 526b19366b2Sxiaofeibao-xjtu VFNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.VEC_VVV), 527b19366b2Sxiaofeibao-xjtu VFMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.VEC_VVV), 528b19366b2Sxiaofeibao-xjtu VFNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.VEC_VVV), 529b19366b2Sxiaofeibao-xjtu VFMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmadd , F, T, F, UopSplitType.VEC_VVV), 530b19366b2Sxiaofeibao-xjtu VFNMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmadd, F, T, F, UopSplitType.VEC_VVV), 531b19366b2Sxiaofeibao-xjtu VFMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsub , F, T, F, UopSplitType.VEC_VVV), 532b19366b2Sxiaofeibao-xjtu VFNMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsub, F, T, F, UopSplitType.VEC_VVV), 533b448988dSczw 534b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 535b19366b2Sxiaofeibao-xjtu VFWMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmacc_w , F, T, F, UopSplitType.VEC_VVW), 536b19366b2Sxiaofeibao-xjtu VFWNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc_w, F, T, F, UopSplitType.VEC_VVW), 537b19366b2Sxiaofeibao-xjtu VFWMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsac_w , F, T, F, UopSplitType.VEC_VVW), 538b19366b2Sxiaofeibao-xjtu VFWNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac_w, F, T, F, UopSplitType.VEC_VVW), 539b448988dSczw 540b448988dSczw // 13.8. Vector Floating-Point Square-Root Instruction 54172d67441SXuan Hu VFSQRT_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfdiv, VfdivType.vfsqrt, F, T, F, UopSplitType.VEC_VVV), // vfsqrt.v vd, vs2, vm 542b448988dSczw 543ba899681Schengguanghui // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction 54472d67441SXuan Hu VFRSQRT7_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfrsqrt7, F, T, F, UopSplitType.VEC_VVV), // vfrsqrt7.v vd, vs2, vm 545b448988dSczw 546ba899681Schengguanghui // 13.10. Vector Floating-Point Reciprocal Estimate Instruction 54772d67441SXuan Hu VFREC7_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfrec7, F, T, F, UopSplitType.VEC_VVV), // vfrec7.v vd, vs2, vm 548b448988dSczw 549b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 550cb81ef42Sxiaofeibao-xjtu VFMIN_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.VEC_VVV), 551cb81ef42Sxiaofeibao-xjtu VFMAX_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.VEC_VVV), 552b448988dSczw 553b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 554cb81ef42Sxiaofeibao-xjtu VFSGNJ_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnj , F, T, F, UopSplitType.VEC_VVV), 555cb81ef42Sxiaofeibao-xjtu VFSGNJN_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnjn, F, T, F, UopSplitType.VEC_VVV), 556cb81ef42Sxiaofeibao-xjtu VFSGNJX_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnjx, F, T, F, UopSplitType.VEC_VVV), 557b448988dSczw 558b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 559f06d6d60Sxiaofeibao-xjtu VMFEQ_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfeq, F, T, F, UopSplitType.VEC_VVM), 560f06d6d60Sxiaofeibao-xjtu VMFNE_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfne, F, T, F, UopSplitType.VEC_VVM), 561f06d6d60Sxiaofeibao-xjtu VMFLT_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vflt, F, T, F, UopSplitType.VEC_VVM), 562f06d6d60Sxiaofeibao-xjtu VMFLE_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfle, F, T, F, UopSplitType.VEC_VVM), 563b448988dSczw 564b448988dSczw // 13.14. Vector Floating-Point Classify Instruction 565f06d6d60Sxiaofeibao-xjtu VFCLASS_V -> OPFVV(SrcType.X , SrcType.X , FuType.vfalu, VfaluType.vfclass, F, T, F, UopSplitType.VEC_VVV), 566b448988dSczw 567ba899681Schengguanghui // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions 5689d3cebe7Schengguanghui VFCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_xufv, F, T, F, UopSplitType.VEC_VVV), 5699d3cebe7Schengguanghui VFCVT_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_xfv, F, T, F, UopSplitType.VEC_VVV), 5709d3cebe7Schengguanghui VFCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_rtz_xufv, F, T, F, UopSplitType.VEC_VVV), 5719d3cebe7Schengguanghui VFCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_rtz_xfv, F, T, F, UopSplitType.VEC_VVV), 5729d3cebe7Schengguanghui VFCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_fxuv, F, T, F, UopSplitType.VEC_VVV), 5739d3cebe7Schengguanghui VFCVT_F_X_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_fxv, F, T, F, UopSplitType.VEC_VVV), 574b448988dSczw 575ba899681Schengguanghui // 13.18. Widening Floating-Point/Integer Type-Convert Instructions 5769d3cebe7Schengguanghui VFWCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_xufv, F, T, F, UopSplitType.VEC_VVW), 5779d3cebe7Schengguanghui VFWCVT_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_xfv, F, T, F, UopSplitType.VEC_VVW), 5789d3cebe7Schengguanghui VFWCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_rtz_xufv, F, T, F, UopSplitType.VEC_VVW), 5799d3cebe7Schengguanghui VFWCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_rtz_xfv, F, T, F, UopSplitType.VEC_VVW), 5809d3cebe7Schengguanghui VFWCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_fxuv, F, T, F, UopSplitType.VEC_VVW), 5819d3cebe7Schengguanghui VFWCVT_F_X_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_fxv, F, T, F, UopSplitType.VEC_VVW), 5829d3cebe7Schengguanghui VFWCVT_F_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_ffv, F, T, F, UopSplitType.VEC_VVW), 583b448988dSczw 584b65b9ebaSXuan Hu // ! 585ba899681Schengguanghui // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions 586ba899681Schengguanghui VFNCVT_XU_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_xufw, F, T, F, UopSplitType.VEC_WVV), 587ba899681Schengguanghui VFNCVT_X_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_xfw, F, T, F, UopSplitType.VEC_WVV), 5889d3cebe7Schengguanghui VFNCVT_RTZ_XU_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_rtz_xufv, F, T, F, UopSplitType.VEC_WVV), 589ba899681Schengguanghui VFNCVT_RTZ_X_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_rtz_xfw, F, T, F, UopSplitType.VEC_WVV), 590ba899681Schengguanghui VFNCVT_F_XU_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_fxuw, F, T, F, UopSplitType.VEC_WVV), 591ba899681Schengguanghui VFNCVT_F_X_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_fxw, F, T, F, UopSplitType.VEC_WVV), 592ba899681Schengguanghui VFNCVT_F_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_ffw, F, T, F, UopSplitType.VEC_WVV), 593ba899681Schengguanghui VFNCVT_ROD_F_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_rod_ffw, F, T, F, UopSplitType.VEC_WVV), 594b448988dSczw // 14.3. Vector Single-Width Floating-Point Reduction Instructions 595cb81ef42Sxiaofeibao-xjtu VFREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredosum, F, T, F, UopSplitType.VEC_VFREDOSUM), 596cb81ef42Sxiaofeibao-xjtu VFREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredusum, F, T, F, UopSplitType.VEC_VFRED), 597cb81ef42Sxiaofeibao-xjtu VFREDMAX_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredmax , F, T, F, UopSplitType.VEC_VFRED), 598cb81ef42Sxiaofeibao-xjtu VFREDMIN_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredmin , F, T, F, UopSplitType.VEC_VFRED), 599b448988dSczw 600b448988dSczw // 14.4. Vector Widening Floating-Point Reduction Instructions 601cb81ef42Sxiaofeibao-xjtu VFWREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfwredosum, F, T, F, UopSplitType.VEC_VFREDOSUM), 602cb81ef42Sxiaofeibao-xjtu VFWREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfpuType.dummy, F, T, F), 603b448988dSczw 604b448988dSczw ) 6057f2b7720SXuan Hu 606b65b9ebaSXuan Hu val opfvf: Array[(BitPat, XSDecodeBase)] = Array( 607b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 608cb81ef42Sxiaofeibao-xjtu VFADD_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.VEC_VFV), 609cb81ef42Sxiaofeibao-xjtu VFSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsub , F, T, F, UopSplitType.VEC_VFV), 610cb81ef42Sxiaofeibao-xjtu VFRSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsub , F, T, F, UopSplitType.VEC_VFV), 611b448988dSczw 612b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 613cb81ef42Sxiaofeibao-xjtu VFWADD_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd, F, T, F, UopSplitType.VEC_VFW), 614cb81ef42Sxiaofeibao-xjtu VFWSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub, F, T, F, UopSplitType.VEC_VFW), 615cb81ef42Sxiaofeibao-xjtu VFWADD_WF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd_w, F, T, F, UopSplitType.VEC_WFW), 616cb81ef42Sxiaofeibao-xjtu VFWSUB_WF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub_w, F, T, F, UopSplitType.VEC_WFW), 617b448988dSczw 618b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 619cb81ef42Sxiaofeibao-xjtu VFMUL_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfma, VfmaType.vfmul, F, T, F, UopSplitType.VEC_VFV), 620cb81ef42Sxiaofeibao-xjtu VFDIV_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv, F, T, F, UopSplitType.VEC_VFV), 621cb81ef42Sxiaofeibao-xjtu VFRDIV_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv, F, T, F, UopSplitType.VEC_VFV), 622b448988dSczw 623b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 624cb81ef42Sxiaofeibao-xjtu VFWMUL_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfma, VfmaType.vfmul_w, F, T, F, UopSplitType.VEC_VFW), 625b448988dSczw 626b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 627b19366b2Sxiaofeibao-xjtu VFMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.VEC_VFV), 628b19366b2Sxiaofeibao-xjtu VFNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.VEC_VFV), 629b19366b2Sxiaofeibao-xjtu VFMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.VEC_VFV), 630b19366b2Sxiaofeibao-xjtu VFNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.VEC_VFV), 631b19366b2Sxiaofeibao-xjtu VFMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmadd , F, T, F, UopSplitType.VEC_VFV), 632b19366b2Sxiaofeibao-xjtu VFNMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmadd, F, T, F, UopSplitType.VEC_VFV), 633b19366b2Sxiaofeibao-xjtu VFMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsub , F, T, F, UopSplitType.VEC_VFV), 634b19366b2Sxiaofeibao-xjtu VFNMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsub, F, T, F, UopSplitType.VEC_VFV), 635b448988dSczw 636b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 637b19366b2Sxiaofeibao-xjtu VFWMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmacc_w , F, T, F, UopSplitType.VEC_VFW), 638b19366b2Sxiaofeibao-xjtu VFWNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc_w, F, T, F, UopSplitType.VEC_VFW), 639b19366b2Sxiaofeibao-xjtu VFWMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsac_w , F, T, F, UopSplitType.VEC_VFW), 640b19366b2Sxiaofeibao-xjtu VFWNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac_w, F, T, F, UopSplitType.VEC_VFW), 641b448988dSczw 642b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 643cb81ef42Sxiaofeibao-xjtu VFMIN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.VEC_VFV), 644cb81ef42Sxiaofeibao-xjtu VFMAX_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.VEC_VFV), 645b448988dSczw 646b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 647cb81ef42Sxiaofeibao-xjtu VFSGNJ_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnj , F, T, F, UopSplitType.VEC_VFV), 648cb81ef42Sxiaofeibao-xjtu VFSGNJN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnjn, F, T, F, UopSplitType.VEC_VFV), 649cb81ef42Sxiaofeibao-xjtu VFSGNJX_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnjx, F, T, F, UopSplitType.VEC_VFV), 650b448988dSczw 651b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 652f06d6d60Sxiaofeibao-xjtu VMFEQ_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfeq, F, F, T, UopSplitType.VEC_VFM), 653f06d6d60Sxiaofeibao-xjtu VMFNE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfne, F, F, T, UopSplitType.VEC_VFM), 654f06d6d60Sxiaofeibao-xjtu VMFLT_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vflt, F, F, T, UopSplitType.VEC_VFM), 655f06d6d60Sxiaofeibao-xjtu VMFLE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfle, F, F, T, UopSplitType.VEC_VFM), 656f06d6d60Sxiaofeibao-xjtu VMFGT_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfgt, F, F, T, UopSplitType.VEC_VFM), 657f06d6d60Sxiaofeibao-xjtu VMFGE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfge, F, F, T, UopSplitType.VEC_VFM), 658b448988dSczw 659b448988dSczw // 13.15. Vector Floating-Point Merge Instruction 660cb81ef42Sxiaofeibao-xjtu VFMERGE_VFM -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmerge, F, T, F, UopSplitType.VEC_VFV), 661b448988dSczw 662b448988dSczw // 13.16. Vector Floating-Point Move Instruction 66372d67441SXuan Hu VFMV_V_F -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmv, F, T, F, src2 = SrcType.X), // vfmv.v.f vd, rs1 # vd[i] = f[rs1] 664b448988dSczw 665b448988dSczw // 16.2. Floating-Point Scalar Move Instructions 6669bb931c8Sxiaofeibao-xjtu VFMV_F_S -> OPFVF(SrcType.X, SrcType.X, FuType.vfalu, VfaluType.vfmv_f_s, T, F, F, UopSplitType.SCA_SIM), // f[rd] = vs2[0] (rs1=0) 66772d67441SXuan Hu VFMV_S_F -> OPFVF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmv_s_f, F, T, F, UopSplitType.VEC_VFV, src2 = SrcType.X), // vd[0] = f[rs1] (vs2=0) 668b448988dSczw // 16.3.3. Vector Slide1up 669e2695e90SzhanglyGit VFSLIDE1UP_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vppu, VpermType.vfslide1up, F, T, F, UopSplitType.VEC_FSLIDE1UP),// vd[0]=f[rs1], vd[i+1] = vs2[i] 670b448988dSczw 671b448988dSczw // 16.3.4. Vector Slide1down Instruction 672b448988dSczw // vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1] 673e2695e90SzhanglyGit VFSLIDE1DOWN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vppu, VpermType.vfslide1down, F, T, F, UopSplitType.VEC_FSLIDE1DOWN),// vd[i] = vs2[i+1], vd[vl-1]=f[rs1] 6747f2b7720SXuan Hu ) 6757f2b7720SXuan Hu 676b65b9ebaSXuan Hu val vset: Array[(BitPat, XSDecodeBase)] = Array( 6774cdab2a9SXuan Hu VSETVLI -> VSET(vli = F, vtypei = T, VSETOpType.uvsetvcfg_xi, flushPipe = F, SelImm.IMM_VSETVLI), 6784cdab2a9SXuan Hu VSETIVLI -> VSET(vli = T, vtypei = T, VSETOpType.uvsetvcfg_ii, flushPipe = F, SelImm.IMM_VSETIVLI), 6794cdab2a9SXuan Hu VSETVL -> VSET(vli = F, vtypei = F, VSETOpType.uvsetvcfg_xx, flushPipe = T, SelImm.X), // flush pipe 680912e2179SXuan Hu ) 6817f2b7720SXuan Hu 682b65b9ebaSXuan Hu val vls: Array[(BitPat, XSDecodeBase)] = Array( 683912e2179SXuan Hu // 7.4. Vector Unit-Stride Instructions 684c4501a6fSZiyue-Zhang VLE8_V -> VLD(SrcType.X, VlduType.vle), 685c4501a6fSZiyue-Zhang VLE16_V -> VLD(SrcType.X, VlduType.vle), 686c4501a6fSZiyue-Zhang VLE32_V -> VLD(SrcType.X, VlduType.vle), 687c4501a6fSZiyue-Zhang VLE64_V -> VLD(SrcType.X, VlduType.vle), 688c4501a6fSZiyue-Zhang VSE8_V -> VST(SrcType.X, VstuType.vse), 689c4501a6fSZiyue-Zhang VSE16_V -> VST(SrcType.X, VstuType.vse), 690c4501a6fSZiyue-Zhang VSE32_V -> VST(SrcType.X, VstuType.vse), 691c4501a6fSZiyue-Zhang VSE64_V -> VST(SrcType.X, VstuType.vse), 692c4501a6fSZiyue-Zhang VLM_V -> VLD(SrcType.X, VlduType.vlm, mask = T), 693c4501a6fSZiyue-Zhang VSM_V -> VST(SrcType.X, VstuType.vsm, mask = T), 694912e2179SXuan Hu // 7.5. Vector Strided Instructions 695c4501a6fSZiyue-Zhang VLSE8_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 696c4501a6fSZiyue-Zhang VLSE16_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 697c4501a6fSZiyue-Zhang VLSE32_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 698c4501a6fSZiyue-Zhang VLSE64_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 699c4501a6fSZiyue-Zhang VSSE8_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 700c4501a6fSZiyue-Zhang VSSE16_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 701c4501a6fSZiyue-Zhang VSSE32_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 702c4501a6fSZiyue-Zhang VSSE64_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 703912e2179SXuan Hu // 7.6. Vector Indexed Instructions 704c4501a6fSZiyue-Zhang VLUXEI8_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 705c4501a6fSZiyue-Zhang VLUXEI16_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 706c4501a6fSZiyue-Zhang VLUXEI32_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 707c4501a6fSZiyue-Zhang VLUXEI64_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 708c4501a6fSZiyue-Zhang VLOXEI8_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 709c4501a6fSZiyue-Zhang VLOXEI16_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 710c4501a6fSZiyue-Zhang VLOXEI32_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 711c4501a6fSZiyue-Zhang VLOXEI64_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 712e19ef7a0Szhanglinjuan VSUXEI8_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 713c4501a6fSZiyue-Zhang VSUXEI16_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 714c4501a6fSZiyue-Zhang VSUXEI32_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 715c4501a6fSZiyue-Zhang VSUXEI64_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 716c4501a6fSZiyue-Zhang VSOXEI8_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 717c4501a6fSZiyue-Zhang VSOXEI16_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 718c4501a6fSZiyue-Zhang VSOXEI32_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 719c4501a6fSZiyue-Zhang VSOXEI64_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 720912e2179SXuan Hu // 7.7. Unit-stride Fault-Only-First Loads 721c4501a6fSZiyue-Zhang VLE8FF_V -> VLD(SrcType.X, VlduType.vleff, ff = T), 722c4501a6fSZiyue-Zhang VLE16FF_V -> VLD(SrcType.X, VlduType.vleff, ff = T), 723c4501a6fSZiyue-Zhang VLE32FF_V -> VLD(SrcType.X, VlduType.vleff, ff = T), 724c4501a6fSZiyue-Zhang VLE64FF_V -> VLD(SrcType.X, VlduType.vleff, ff = T), 725912e2179SXuan Hu // 7.8. Vector Load/Store Segment Instructions 726912e2179SXuan Hu // 7.8.1. Vector Unit-Stride Segment Loads and Stores 727912e2179SXuan Hu // TODO 728912e2179SXuan Hu // 7.8.2. Vector Strided Segment Loads and Stores 729912e2179SXuan Hu // TODO 730912e2179SXuan Hu // 7.8.3. Vector Indexed Segment Loads and Stores 731912e2179SXuan Hu // TODO 732912e2179SXuan Hu // 7.9. Vector Load/Store Whole Register Instructions 733c4501a6fSZiyue-Zhang VL1RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 734c4501a6fSZiyue-Zhang VL1RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 735c4501a6fSZiyue-Zhang VL1RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 736c4501a6fSZiyue-Zhang VL1RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 737c4501a6fSZiyue-Zhang VL2RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 738c4501a6fSZiyue-Zhang VL2RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 739c4501a6fSZiyue-Zhang VL2RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 740c4501a6fSZiyue-Zhang VL2RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 741c4501a6fSZiyue-Zhang VL4RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 742c4501a6fSZiyue-Zhang VL4RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 743c4501a6fSZiyue-Zhang VL4RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 744c4501a6fSZiyue-Zhang VL4RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 745c4501a6fSZiyue-Zhang VL8RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 746c4501a6fSZiyue-Zhang VL8RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 747c4501a6fSZiyue-Zhang VL8RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 748c4501a6fSZiyue-Zhang VL8RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 749c4501a6fSZiyue-Zhang VS1R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 750c4501a6fSZiyue-Zhang VS2R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 751c4501a6fSZiyue-Zhang VS4R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 752c4501a6fSZiyue-Zhang VS8R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 753912e2179SXuan Hu ) 754912e2179SXuan Hu 755c8057e7cSXuan Hu override val decodeArray: Array[(BitPat, XSDecodeBase)] = vset ++ 756c06a3f03Szhanglinjuan opivv ++ opivx ++ opivi ++ opmvv ++ opmvx ++ opfvv ++ opfvf ++ opfff ++ vls 7577f2b7720SXuan Hu} 758