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._ 130bca6cb3SZiyue Zhangimport yunsuan.{VfpuType, VipuType, VimacType, VpermType, VialuFixType, VfaluType, VfmaType, VfdivType, VfcvtType, VidivType} 147e30d16cSZhaoyang Youimport xiangshan.backend.decode.Zvbb._ 157f2b7720SXuan Hu 16b65b9ebaSXuan Huabstract class VecDecode extends XSDecodeBase { 177f2b7720SXuan Hu def generate() : List[BitPat] 187f2b7720SXuan Hu def asOldDecodeOutput(): List[BitPat] = { 19912e2179SXuan Hu val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate() 207f2b7720SXuan Hu List (src1, src2, src3, fu, fuOp, xWen, fWen, xsTrap, noSpec, blockBack, flushPipe, selImm) 217f2b7720SXuan Hu } 22912e2179SXuan Hu def asFirstStageDecodeOutput(): List[BitPat] = { 23912e2179SXuan Hu val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate() 24912e2179SXuan Hu List (src1, src2, src3, fu, fuOp, xWen, fWen, bitPatToUInt(vWen) | bitPatToUInt(mWen), xsTrap, noSpec, blockBack, flushPipe, selImm) 25912e2179SXuan Hu } 267f2b7720SXuan Hu} 277f2b7720SXuan Hu 2872d67441SXuan Hucase class OPIVV( 2972d67441SXuan Hu fu: FuType.OHType, 3072d67441SXuan Hu fuOp: BitPat, 3172d67441SXuan Hu vWen: Boolean, 3272d67441SXuan Hu mWen: Boolean, 3372d67441SXuan Hu vxsatWen: Boolean, 3472d67441SXuan Hu uopSplitType: BitPat = UopSplitType.VEC_VVV, 3572d67441SXuan Hu src1: BitPat = SrcType.vp, 3672d67441SXuan Hu src2: BitPat = SrcType.vp, 3772d67441SXuan Hu src3: BitPat = SrcType.vp 3872d67441SXuan Hu) extends XSDecodeBase { 397f2b7720SXuan Hu def generate() : List[BitPat] = { 4072d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 41b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 427f2b7720SXuan Hu } 437f2b7720SXuan Hu} 447f2b7720SXuan Hu 4572d67441SXuan Hucase class OPIVX( 4672d67441SXuan Hu fu: FuType.OHType, 4772d67441SXuan Hu fuOp: BitPat, 4872d67441SXuan Hu vWen: Boolean, 4972d67441SXuan Hu mWen: Boolean, 5072d67441SXuan Hu vxsatWen: Boolean, 5172d67441SXuan Hu uopSplitType: BitPat = UopSplitType.VEC_VXV, 5272d67441SXuan Hu src1: BitPat = SrcType.xp, 5372d67441SXuan Hu src2: BitPat = SrcType.vp, 5472d67441SXuan Hu src3: BitPat = SrcType.vp 5572d67441SXuan Hu) extends XSDecodeBase { 5658c35d23Shuxuan0307 def generate() : List[BitPat] = { 5772d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 58b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 5958c35d23Shuxuan0307 } 607f2b7720SXuan Hu} 617f2b7720SXuan Hu 6272d67441SXuan Hucase class OPIVI( 6372d67441SXuan Hu fu: FuType.OHType, 6472d67441SXuan Hu fuOp: BitPat, 6572d67441SXuan Hu vWen: Boolean, 6672d67441SXuan Hu mWen: Boolean, 6772d67441SXuan Hu vxsatWen: Boolean, 6872d67441SXuan Hu selImm: BitPat = SelImm.IMM_OPIVIS, 69d6059658SZiyue Zhang uopSplitType: BitPat = UopSplitType.VEC_VXV, 7072d67441SXuan Hu src1: BitPat = SrcType.imm, 7172d67441SXuan Hu src2: BitPat = SrcType.vp, 7272d67441SXuan Hu src3: BitPat = SrcType.vp 7372d67441SXuan Hu) extends XSDecodeBase { 7458c35d23Shuxuan0307 def generate() : List[BitPat] = { 7572d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, selImm, uopSplitType, 76b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 7758c35d23Shuxuan0307 } 787f2b7720SXuan Hu} 797f2b7720SXuan Hu 8072d67441SXuan Hucase class OPMVV( 8172d67441SXuan Hu vdRen: Boolean, 8272d67441SXuan Hu fu: FuType.OHType, 8372d67441SXuan Hu fuOp: BitPat, 8472d67441SXuan Hu xWen: Boolean, 8572d67441SXuan Hu vWen: Boolean, 8672d67441SXuan Hu mWen: Boolean, 8772d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 8872d67441SXuan Hu src1: BitPat = SrcType.vp, 8972d67441SXuan Hu src2: BitPat = SrcType.vp 9072d67441SXuan Hu) extends XSDecodeBase { 91c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 927f2b7720SXuan Hu def generate() : List[BitPat] = { 9372d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, xWen, F, vWen, mWen, F, F, F, F).generate() 947f2b7720SXuan Hu } 957f2b7720SXuan Hu} 967f2b7720SXuan Hu 9772d67441SXuan Hucase class OPMVX( 9872d67441SXuan Hu vdRen: Boolean, 9972d67441SXuan Hu fu: FuType.OHType, 10072d67441SXuan Hu fuOp: BitPat, 10172d67441SXuan Hu xWen: Boolean, 10272d67441SXuan Hu vWen: Boolean, 10372d67441SXuan Hu mWen: Boolean, 10472d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 10572d67441SXuan Hu src1: BitPat = SrcType.xp, 10672d67441SXuan Hu src2: BitPat = SrcType.vp 10772d67441SXuan Hu) extends XSDecodeBase { 108c6661c33SHaojin Tang private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X 109c6661c33SHaojin Tang def generate() : List[BitPat] = { 11072d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 111b65b9ebaSXuan Hu xWen = xWen, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 112c6661c33SHaojin Tang } 1137f2b7720SXuan Hu} 1147f2b7720SXuan Hu 11572d67441SXuan Hucase class OPFVV( 11672d67441SXuan Hu src1: BitPat, 11772d67441SXuan Hu src3: BitPat, 11872d67441SXuan Hu fu: FuType.OHType, 11972d67441SXuan Hu fuOp: BitPat, 12072d67441SXuan Hu fWen: Boolean, 12172d67441SXuan Hu vWen: Boolean, 12272d67441SXuan Hu mWen: Boolean, 12372d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 12472d67441SXuan Hu src2: BitPat = SrcType.vp 12572d67441SXuan Hu) extends XSDecodeBase { 126b448988dSczw def generate() : List[BitPat] = { 12772d67441SXuan Hu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 128b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 129b448988dSczw } 1307f2b7720SXuan Hu} 1317f2b7720SXuan Hu 1324b136a73Ssinsanctioncase class OPFFF(src1: BitPat, src2: BitPat, src3: BitPat, fu: FuType.OHType, fuOp: BitPat, xWen: Boolean, fWen: Boolean, vWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase { 133bdda74fdSxiaofeibao-xjtu def generate() : List[BitPat] = { 1344b136a73Ssinsanction XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 135bdda74fdSxiaofeibao-xjtu xWen = xWen, fWen = fWen, vWen = vWen, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F, canRobCompress = T).generate() 136bdda74fdSxiaofeibao-xjtu } 137bdda74fdSxiaofeibao-xjtu} 138bdda74fdSxiaofeibao-xjtu 13972d67441SXuan Hucase class OPFVF( 14072d67441SXuan Hu src1: BitPat, 14172d67441SXuan Hu src3: BitPat, 14272d67441SXuan Hu fu: FuType.OHType, 14372d67441SXuan Hu fuOp: BitPat, 14472d67441SXuan Hu fWen: Boolean, 14572d67441SXuan Hu vWen: Boolean, 14672d67441SXuan Hu mWen: Boolean, 14772d67441SXuan Hu uopSplitType: BitPat = UopSplitType.dummy, 14872d67441SXuan Hu src2: BitPat = SrcType.vp 14972d67441SXuan Hu) extends XSDecodeBase { 1507f2b7720SXuan Hu def generate() : List[BitPat] = { 1519bb931c8Sxiaofeibao-xjtu XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 152b65b9ebaSXuan Hu xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 1537f2b7720SXuan Hu } 1547f2b7720SXuan Hu} 1557f2b7720SXuan Hu 1561436b764SZiyue Zhangcase class VSET(vli: Boolean, vtypei: Boolean, fuOp: BitPat, flushPipe: Boolean, blockBack: Boolean, selImm: BitPat, uopSplitType: BitPat = UopSplitType.VSET) extends XSDecodeBase { 157912e2179SXuan Hu def generate() : List[BitPat] = { 158912e2179SXuan Hu val src1 = if (vli) SrcType.imm else SrcType.xp 159912e2179SXuan Hu val src2 = if (vtypei) SrcType.imm else SrcType.xp 16017ec87f2SXuan Hu XSDecode(src1, src2, SrcType.X, FuType.vsetiwf, fuOp, selImm, uopSplitType, 1611436b764SZiyue Zhang xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = blockBack, flushPipe = flushPipe).generate() 162912e2179SXuan Hu } 1637f2b7720SXuan Hu} 1647f2b7720SXuan Hu 165912e2179SXuan Hucase class VLD(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, ff: Boolean = false, 166c4501a6fSZiyue-Zhang mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.VEC_US_LDST) extends XSDecodeBase { 167912e2179SXuan Hu def generate() : List[BitPat] = { 168912e2179SXuan Hu val fu = FuType.vldu 169912e2179SXuan Hu val src1 = SrcType.xp 170382346a1Szhanglinjuan val src3 = SrcType.vp 171e2695e90SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 172b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 173912e2179SXuan Hu } 174912e2179SXuan Hu} 175912e2179SXuan Hu 176912e2179SXuan Hucase class VST(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, 177c4501a6fSZiyue-Zhang mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.VEC_US_LDST) extends XSDecodeBase { 178912e2179SXuan Hu def generate() : List[BitPat] = { 179912e2179SXuan Hu val fu = FuType.vstu 180912e2179SXuan Hu val src1 = SrcType.xp 181912e2179SXuan Hu val src3 = SrcType.vp 182e2695e90SzhanglyGit XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType, 183b65b9ebaSXuan Hu xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate() 184912e2179SXuan Hu } 1857f2b7720SXuan Hu} 1867f2b7720SXuan Hu 1877f2b7720SXuan Huobject VecDecoder extends DecodeConstants { 188b65b9ebaSXuan Hu val opivv: Array[(BitPat, XSDecodeBase)] = Array( 189d91483a6Sfdy VADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 190d91483a6Sfdy VSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 1917f2b7720SXuan Hu 192d91483a6Sfdy VMINU_VV -> OPIVV(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 193d91483a6Sfdy VMIN_VV -> OPIVV(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 194d91483a6Sfdy VMAXU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 195d91483a6Sfdy VMAX_VV -> OPIVV(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 19658c35d23Shuxuan0307 197d91483a6Sfdy VAND_VV -> OPIVV(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 198d91483a6Sfdy VOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 199d91483a6Sfdy VXOR_VV -> OPIVV(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 20058c35d23Shuxuan0307 201e2695e90SzhanglyGit VRGATHER_VV -> OPIVV(FuType.vppu, VpermType.vrgather, T, F, F, UopSplitType.VEC_RGATHER), 202e2695e90SzhanglyGit VRGATHEREI16_VV -> OPIVV(FuType.vppu, VpermType.vrgatherei16, T, F, F, UopSplitType.VEC_RGATHEREI16), 20358c35d23Shuxuan0307 204d91483a6Sfdy VADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 205e2695e90SzhanglyGit VMADC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VVM), 206e2695e90SzhanglyGit VMADC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VVM), 20758c35d23Shuxuan0307 208d91483a6Sfdy VSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 209e2695e90SzhanglyGit VMSBC_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VVM), 210e2695e90SzhanglyGit VMSBC_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VVM), 21158c35d23Shuxuan0307 212d91483a6Sfdy VMERGE_VVM -> OPIVV(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 21358c35d23Shuxuan0307 21472d67441SXuan Hu VMV_V_V -> OPIVV(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F, src2 = SrcType.no), // vd[i] = vs1[i], vs2=v0 21558c35d23Shuxuan0307 216e2695e90SzhanglyGit VMSEQ_VV -> OPIVV(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VVM), 217e2695e90SzhanglyGit VMSNE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VVM), 218e2695e90SzhanglyGit VMSLTU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VVM), 219e2695e90SzhanglyGit VMSLT_VV -> OPIVV(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VVM), 220e2695e90SzhanglyGit VMSLEU_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VVM), 221e2695e90SzhanglyGit VMSLE_VV -> OPIVV(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VVM), 22258c35d23Shuxuan0307 223d91483a6Sfdy VSLL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 224d91483a6Sfdy VSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 225d91483a6Sfdy VSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 226e2695e90SzhanglyGit VNSRL_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WVV), 227e2695e90SzhanglyGit VNSRA_WV -> OPIVV(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WVV), 22858c35d23Shuxuan0307 229d91483a6Sfdy VSADDU_VV -> OPIVV(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 230d91483a6Sfdy VSADD_VV -> OPIVV(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 231d91483a6Sfdy VSSUBU_VV -> OPIVV(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 232d91483a6Sfdy VSSUB_VV -> OPIVV(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 23358c35d23Shuxuan0307 234d6059658SZiyue Zhang VSMUL_VV -> OPIVV(FuType.vimac, VimacType.vsmul, T, F, T), 23558c35d23Shuxuan0307 236d91483a6Sfdy VSSRL_VV -> OPIVV(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 237d91483a6Sfdy VSSRA_VV -> OPIVV(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 23858c35d23Shuxuan0307 239e2695e90SzhanglyGit VNCLIPU_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WVV), 240e2695e90SzhanglyGit VNCLIP_WV -> OPIVV(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WVV), 241d91483a6Sfdy 242e2695e90SzhanglyGit VWREDSUMU_VS -> OPIVV(FuType.vipu, VipuType.vwredsumu_vs, T, F, F, UopSplitType.VEC_VWW), 243e2695e90SzhanglyGit VWREDSUM_VS -> OPIVV(FuType.vipu, VipuType.vwredsum_vs, T, F, F, UopSplitType.VEC_VWW), 2447e30d16cSZhaoyang You 2457e30d16cSZhaoyang You // Zvbb 2467e30d16cSZhaoyang You VANDN_VV -> OPIVV(FuType.vialuF, VialuFixType.vandn_vv, T, F, F), 2477e30d16cSZhaoyang You VROL_VV -> OPIVV(FuType.vialuF, VialuFixType.vrol_vv, T, F, F, UopSplitType.VEC_VVV), 2487e30d16cSZhaoyang You VROR_VV -> OPIVV(FuType.vialuF, VialuFixType.vror_vv, T, F, F, UopSplitType.VEC_VVV), 2497e30d16cSZhaoyang You VWSLL_VV -> OPIVV(FuType.vialuF, VialuFixType.vwsll_vv, T, F, F, UopSplitType.VEC_VVW), 2507f2b7720SXuan Hu ) 2517f2b7720SXuan Hu 252b65b9ebaSXuan Hu val opivx: Array[(BitPat, XSDecodeBase)] = Array( 253d91483a6Sfdy VADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 254d91483a6Sfdy VSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vsub_vv, T, F, F), 255d91483a6Sfdy VRSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 25658c35d23Shuxuan0307 257d91483a6Sfdy VMINU_VX -> OPIVX(FuType.vialuF, VialuFixType.vminu_vv, T, F, F), 258d91483a6Sfdy VMIN_VX -> OPIVX(FuType.vialuF, VialuFixType.vmin_vv, T, F, F), 259d91483a6Sfdy VMAXU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F), 260d91483a6Sfdy VMAX_VX -> OPIVX(FuType.vialuF, VialuFixType.vmax_vv, T, F, F), 26158c35d23Shuxuan0307 262d91483a6Sfdy VAND_VX -> OPIVX(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 263d91483a6Sfdy VOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 264d91483a6Sfdy VXOR_VX -> OPIVX(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 26558c35d23Shuxuan0307 266e2695e90SzhanglyGit VRGATHER_VX -> OPIVX(FuType.vppu, VpermType.vrgather_vx, T, F, F, UopSplitType.VEC_RGATHER_VX), 26758c35d23Shuxuan0307 268e2695e90SzhanglyGit VSLIDEUP_VX -> OPIVX(FuType.vppu, VpermType.vslideup, T, F, F, UopSplitType.VEC_SLIDEUP), 269e2695e90SzhanglyGit VSLIDEDOWN_VX -> OPIVX(FuType.vppu, VpermType.vslidedown, T, F, F, UopSplitType.VEC_SLIDEDOWN), 27058c35d23Shuxuan0307 271d91483a6Sfdy VADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 272e2695e90SzhanglyGit VMADC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VXM), 273e2695e90SzhanglyGit VMADC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VXM), 274d91483a6Sfdy VSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F), 275e2695e90SzhanglyGit VMSBC_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VXM), 276e2695e90SzhanglyGit VMSBC_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VXM), 27758c35d23Shuxuan0307 278d91483a6Sfdy VMERGE_VXM -> OPIVX(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 27958c35d23Shuxuan0307 28072d67441SXuan Hu VMV_V_X -> OPIVX(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F, src2 = SrcType.no), // vd[i] = x[rs1], vs2 = v0 28158c35d23Shuxuan0307 282e2695e90SzhanglyGit VMSEQ_VX -> OPIVX(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VXM), 283e2695e90SzhanglyGit VMSNE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VXM), 284e2695e90SzhanglyGit VMSLTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VXM), 285e2695e90SzhanglyGit VMSLT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VXM), 286e2695e90SzhanglyGit VMSLEU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VXM), 287e2695e90SzhanglyGit VMSLE_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VXM), 288e2695e90SzhanglyGit VMSGTU_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, UopSplitType.VEC_VXM), 289e2695e90SzhanglyGit VMSGT_VX -> OPIVX(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, UopSplitType.VEC_VXM), 29058c35d23Shuxuan0307 291d91483a6Sfdy VSLL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsll_vv, T, F, F), 292d91483a6Sfdy VSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F), 293d91483a6Sfdy VSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vsra_vv, T, F, F), 294e2695e90SzhanglyGit VNSRL_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WXV), 295e2695e90SzhanglyGit VNSRA_WX -> OPIVX(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WXV), 296d91483a6Sfdy 297d91483a6Sfdy VSADDU_VX -> OPIVX(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T), 298d91483a6Sfdy VSADD_VX -> OPIVX(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 299d91483a6Sfdy VSSUBU_VX -> OPIVX(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T), 300d91483a6Sfdy VSSUB_VX -> OPIVX(FuType.vialuF, VialuFixType.vssub_vv, T, F, T), 30158c35d23Shuxuan0307 3028fb63ad6SXuan Hu VSMUL_VX -> OPIVX(FuType.vimac, VimacType.vsmul, T, F, T, UopSplitType.VEC_VXV), 30358c35d23Shuxuan0307 304d91483a6Sfdy VSSRL_VX -> OPIVX(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F), 305d91483a6Sfdy VSSRA_VX -> OPIVX(FuType.vialuF, VialuFixType.vssra_vv, T, F, F), 30658c35d23Shuxuan0307 307e2695e90SzhanglyGit VNCLIPU_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WXV), 308e2695e90SzhanglyGit VNCLIP_WX -> OPIVX(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WXV), 3097e30d16cSZhaoyang You 3107e30d16cSZhaoyang You // Zvbb 3117e30d16cSZhaoyang You VANDN_VX -> OPIVX(FuType.vialuF, VialuFixType.vandn_vv, T, F, F), 3127e30d16cSZhaoyang You VROL_VX -> OPIVX(FuType.vialuF, VialuFixType.vrol_vv, T, F, F, UopSplitType.VEC_VXV), 3137e30d16cSZhaoyang You VROR_VX -> OPIVX(FuType.vialuF, VialuFixType.vror_vv, T, F, F, UopSplitType.VEC_VXV), 3147e30d16cSZhaoyang You VWSLL_VX -> OPIVX(FuType.vialuF, VialuFixType.vwsll_vv, T, F, F, UopSplitType.VEC_VXW), 31558c35d23Shuxuan0307 ) 31658c35d23Shuxuan0307 317b65b9ebaSXuan Hu val opivi: Array[(BitPat, XSDecodeBase)] = Array( 318d91483a6Sfdy VADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vadd_vv, T, F, F), 319d91483a6Sfdy VRSUB_VI -> OPIVI(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F), 32058c35d23Shuxuan0307 321d91483a6Sfdy VAND_VI -> OPIVI(FuType.vialuF, VialuFixType.vand_vv, T, F, F), 322d91483a6Sfdy VOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vor_vv, T, F, F), 323d91483a6Sfdy VXOR_VI -> OPIVI(FuType.vialuF, VialuFixType.vxor_vv, T, F, F), 32458c35d23Shuxuan0307 325b1712600SZiyue Zhang VRGATHER_VI -> OPIVI(FuType.vppu, VpermType.vrgather_vx, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_RGATHER_VX), 32658c35d23Shuxuan0307 327d6059658SZiyue Zhang VSLIDEUP_VI -> OPIVI(FuType.vppu, VpermType.vslideup, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_SLIDEUP), 328d6059658SZiyue Zhang VSLIDEDOWN_VI -> OPIVI(FuType.vppu, VpermType.vslidedown, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_SLIDEDOWN), 32958c35d23Shuxuan0307 330d91483a6Sfdy VADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F), 331d6059658SZiyue Zhang VMADC_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vvm, T, F, F, uopSplitType = UopSplitType.VEC_VXM), 332d6059658SZiyue Zhang VMADC_VI -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vv, T, F, F, uopSplitType = UopSplitType.VEC_VXM), 33358c35d23Shuxuan0307 334d91483a6Sfdy VMERGE_VIM -> OPIVI(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F), 33558c35d23Shuxuan0307 33672d67441SXuan Hu VMV_V_I -> OPIVI(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F, src2 = SrcType.no), // vd[i] = imm, vs2 = v0 33758c35d23Shuxuan0307 338d6059658SZiyue Zhang VMSEQ_VI -> OPIVI(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 339d6059658SZiyue Zhang VMSNE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 34071d4d0e5SZiyue Zhang VMSLEU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, selImm = SelImm.IMM_OPIVIS, uopSplitType = UopSplitType.VEC_VXM), 341d6059658SZiyue Zhang VMSLE_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 34271d4d0e5SZiyue Zhang VMSGTU_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, selImm = SelImm.IMM_OPIVIS, uopSplitType = UopSplitType.VEC_VXM), 343d6059658SZiyue Zhang VMSGT_VI -> OPIVI(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, uopSplitType = UopSplitType.VEC_VXM), 34458c35d23Shuxuan0307 345d91483a6Sfdy VSLL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsll_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 346d91483a6Sfdy VSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 347d91483a6Sfdy VSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vsra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 348d6059658SZiyue Zhang VNSRL_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WXV), 349d6059658SZiyue Zhang VNSRA_WI -> OPIVI(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WXV), 35058c35d23Shuxuan0307 35171d4d0e5SZiyue Zhang VSADDU_VI -> OPIVI(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T, selImm = SelImm.IMM_OPIVIS), 352d91483a6Sfdy VSADD_VI -> OPIVI(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T), 35358c35d23Shuxuan0307 354d91483a6Sfdy VSSRL_VI -> OPIVI(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 355d91483a6Sfdy VSSRA_VI -> OPIVI(FuType.vialuF, VialuFixType.vssra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU), 35658c35d23Shuxuan0307 357d6059658SZiyue Zhang VNCLIPU_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WXV), 3586266af83SZiyue Zhang VNCLIP_WI -> OPIVI(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WXV), 359d91483a6Sfdy 3604c4e2cd8SZiyue Zhang VMV1R_V -> OPIVI(FuType.vppu, VpermType.vmv1r, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv1r.v vd, vs2 3614c4e2cd8SZiyue Zhang VMV2R_V -> OPIVI(FuType.vppu, VpermType.vmv2r, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv2r.v vd, vs2 3624c4e2cd8SZiyue Zhang VMV4R_V -> OPIVI(FuType.vppu, VpermType.vmv4r, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv4r.v vd, vs2 3634c4e2cd8SZiyue Zhang VMV8R_V -> OPIVI(FuType.vppu, VpermType.vmv8r, T, F, F, uopSplitType = UopSplitType.VEC_MVNR, src1 = SrcType.no), // vmv8r.v vd, vs2 3647e30d16cSZhaoyang You 3657e30d16cSZhaoyang You // Zvbb 3667e30d16cSZhaoyang You VROR_VI -> OPIVI(FuType.vialuF, VialuFixType.vror_vv, T, F, F, selImm = SelImm.IMM_VRORVI, UopSplitType.VEC_VXV), 3677e30d16cSZhaoyang You VWSLL_VI -> OPIVI(FuType.vialuF, VialuFixType.vwsll_vv, T, F, F, selImm = SelImm.IMM_OPIVIU, UopSplitType.VEC_VXW), 36858c35d23Shuxuan0307 ) 3697f2b7720SXuan Hu 370b65b9ebaSXuan Hu val opmvv: Array[(BitPat, XSDecodeBase)] = Array( 371e2695e90SzhanglyGit VAADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VVV), 372e2695e90SzhanglyGit VAADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VVV), 373e2695e90SzhanglyGit VASUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VVV), 374e2695e90SzhanglyGit VASUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VVV), 375adf68ff3Sczw VCOMPRESS_VM -> OPMVV(T, FuType.vppu, VpermType.vcompress, F, T, F, UopSplitType.VEC_COMPRESS), 37672d67441SXuan Hu VCPOP_M -> OPMVV(T, FuType.vipu, VipuType.vcpop_m, T, F, F, UopSplitType.VEC_M0X, src1 = SrcType.no), // vcpop.m rd, vs2, vm 3770bca6cb3SZiyue Zhang VDIV_VV -> OPMVV(T, FuType.vidiv, VidivType.vdiv, F, T, F, UopSplitType.VEC_VVV), 3780bca6cb3SZiyue Zhang VDIVU_VV -> OPMVV(T, FuType.vidiv, VidivType.vdivu, F, T, F, UopSplitType.VEC_VVV), 379762f2b39SZiyue Zhang VFIRST_M -> OPMVV(T, FuType.vipu, VipuType.vfirst_m, T, F, F, src1 = SrcType.no), // vfirst.m rd, vs2, vm 38072d67441SXuan 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 38172d67441SXuan Hu VIOTA_M -> OPMVV(T, FuType.vipu, VipuType.viota_m, F, T, F, UopSplitType.VEC_MVV, src1 = SrcType.no), // viota.m vd, vs2, vm 382b65b9ebaSXuan Hu 383adf68ff3Sczw VMACC_VV -> OPMVV(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VVV), 384adf68ff3Sczw VMADD_VV -> OPMVV(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VVV), 385*9cf1e44eSZiyue Zhang VMAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmand_mm, F, T, F, UopSplitType.dummy), 386*9cf1e44eSZiyue Zhang VMANDN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmandn_mm, F, T, F, UopSplitType.dummy), 387*9cf1e44eSZiyue Zhang VMNAND_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnand_mm, F, T, F, UopSplitType.dummy), 388*9cf1e44eSZiyue Zhang VMNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmnor_mm, F, T, F, UopSplitType.dummy), 389*9cf1e44eSZiyue Zhang VMOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmor_mm, F, T, F, UopSplitType.dummy), 390*9cf1e44eSZiyue Zhang VMORN_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmorn_mm, F, T, F, UopSplitType.dummy), 391*9cf1e44eSZiyue Zhang VMXNOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxnor_mm, F, T, F, UopSplitType.dummy), 392*9cf1e44eSZiyue Zhang VMXOR_MM -> OPMVV(T, FuType.vialuF, VialuFixType.vmxor_mm, F, T, F, UopSplitType.dummy), 393*9cf1e44eSZiyue Zhang VMSBF_M -> OPMVV(T, FuType.vipu, VipuType.vmsbf_m, F, T, F, UopSplitType.dummy, src1 = SrcType.no), // vmsbf.m vd, vs2, vm 394*9cf1e44eSZiyue Zhang VMSIF_M -> OPMVV(T, FuType.vipu, VipuType.vmsif_m, F, T, F, UopSplitType.dummy, src1 = SrcType.no), // vmsif.m vd, vs2, vm 395*9cf1e44eSZiyue Zhang VMSOF_M -> OPMVV(T, FuType.vipu, VipuType.vmsof_m, F, T, F, UopSplitType.dummy, src1 = SrcType.no), // vmsof.m vd, vs2, vm 396adf68ff3Sczw VMUL_VV -> OPMVV(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VVV), 397adf68ff3Sczw VMULH_VV -> OPMVV(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VVV), 398adf68ff3Sczw VMULHSU_VV -> OPMVV(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VVV), 399adf68ff3Sczw VMULHU_VV -> OPMVV(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VVV), 400b65b9ebaSXuan Hu 401daae8f22SZiyue 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] 402adf68ff3Sczw VNMSAC_VV -> OPMVV(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VVV), 403adf68ff3Sczw VNMSUB_VV -> OPMVV(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VVV), 404e2695e90SzhanglyGit VREDAND_VS -> OPMVV(T, FuType.vipu, VipuType.vredand_vs, F, T, F, UopSplitType.VEC_VRED), 405e2695e90SzhanglyGit VREDMAX_VS -> OPMVV(T, FuType.vipu, VipuType.vredmax_vs, F, T, F, UopSplitType.VEC_VRED), 406e2695e90SzhanglyGit VREDMAXU_VS -> OPMVV(T, FuType.vipu, VipuType.vredmaxu_vs, F, T, F, UopSplitType.VEC_VRED), 407e2695e90SzhanglyGit VREDMIN_VS -> OPMVV(T, FuType.vipu, VipuType.vredmin_vs, F, T, F, UopSplitType.VEC_VRED), 408e2695e90SzhanglyGit VREDMINU_VS -> OPMVV(T, FuType.vipu, VipuType.vredminu_vs, F, T, F, UopSplitType.VEC_VRED), 409e2695e90SzhanglyGit VREDOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredor_vs, F, T, F, UopSplitType.VEC_VRED), 410e2695e90SzhanglyGit VREDSUM_VS -> OPMVV(T, FuType.vipu, VipuType.vredsum_vs, F, T, F, UopSplitType.VEC_VRED), 411e2695e90SzhanglyGit VREDXOR_VS -> OPMVV(T, FuType.vipu, VipuType.vredxor_vs, F, T, F, UopSplitType.VEC_VRED), 4120bca6cb3SZiyue Zhang VREM_VV -> OPMVV(T, FuType.vidiv, VidivType.vrem, F, T, F, UopSplitType.VEC_VVV), 4130bca6cb3SZiyue Zhang VREMU_VV -> OPMVV(T, FuType.vidiv, VidivType.vremu, F, T, F, UopSplitType.VEC_VVV), 41472d67441SXuan Hu VSEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf2, F, T, F, UopSplitType.VEC_EXT2, src1 = SrcType.no), // vsext.vf2 vd, vs2, vm 41572d67441SXuan Hu VSEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf4, F, T, F, UopSplitType.VEC_EXT4, src1 = SrcType.no), // vsext.vf4 vd, vs2, vm 41672d67441SXuan Hu VSEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf8, F, T, F, UopSplitType.VEC_EXT8, src1 = SrcType.no), // vsext.vf8 vd, vs2, vm 41772d67441SXuan Hu VZEXT_VF2 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf2, F, T, F, UopSplitType.VEC_EXT2, src1 = SrcType.no), // vzext.vf2 vd, vs2, vm 41872d67441SXuan Hu VZEXT_VF4 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf4, F, T, F, UopSplitType.VEC_EXT4, src1 = SrcType.no), // vzext.vf4 vd, vs2, vm 41972d67441SXuan Hu VZEXT_VF8 -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf8, F, T, F, UopSplitType.VEC_EXT8, src1 = SrcType.no), // vzext.vf8 vd, vs2, vm 420e2695e90SzhanglyGit VWADD_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VVW), 421e2695e90SzhanglyGit VWADD_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WVW), 422e2695e90SzhanglyGit VWADDU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VVW), 423e2695e90SzhanglyGit VWADDU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WVW), 424adf68ff3Sczw VWMACC_VV -> OPMVV(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VVW), 425adf68ff3Sczw VWMACCSU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VVW), 426adf68ff3Sczw VWMACCU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VVW), 427adf68ff3Sczw VWMUL_VV -> OPMVV(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VVW), 428adf68ff3Sczw VWMULSU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VVW), 429adf68ff3Sczw VWMULU_VV -> OPMVV(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VVW), 430e2695e90SzhanglyGit VWSUB_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VVW), 431e2695e90SzhanglyGit VWSUB_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WVW), 432e2695e90SzhanglyGit VWSUBU_VV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VVW), 433e2695e90SzhanglyGit VWSUBU_WV -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WVW), 4347e30d16cSZhaoyang You 4357e30d16cSZhaoyang You // Zvbb 4367e30d16cSZhaoyang You VBREV_V -> OPMVV(T, FuType.vialuF, VialuFixType.vbrev_v, F, T, F, UopSplitType.VEC_VVV, src1 = SrcType.no), 4377e30d16cSZhaoyang You VBREV8_V -> OPMVV(T, FuType.vialuF, VialuFixType.vbrev8_v, F, T, F, UopSplitType.VEC_VVV, src1 = SrcType.no), 4387e30d16cSZhaoyang You VREV8_V -> OPMVV(T, FuType.vialuF, VialuFixType.vrev8_v, F, T, F, UopSplitType.VEC_VVV, src1 = SrcType.no), 4397e30d16cSZhaoyang You VCLZ_V -> OPMVV(T, FuType.vialuF, VialuFixType.vclz_v, F, T, F, UopSplitType.VEC_VVV, src1 = SrcType.no), 4407e30d16cSZhaoyang You VCTZ_V -> OPMVV(T, FuType.vialuF, VialuFixType.vctz_v, F, T, F, UopSplitType.VEC_VVV, src1 = SrcType.no), 4417e30d16cSZhaoyang You VCPOP_V -> OPMVV(T, FuType.vialuF, VialuFixType.vcpop_v, F, T, F, UopSplitType.VEC_VVV, src1 = SrcType.no), 442c6661c33SHaojin Tang ) 443912e2179SXuan Hu 444b65b9ebaSXuan Hu val opmvx: Array[(BitPat, XSDecodeBase)] = Array( 445e2695e90SzhanglyGit VAADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VXV), 446e2695e90SzhanglyGit VAADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VXV), 447e2695e90SzhanglyGit VASUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VXV), 448e2695e90SzhanglyGit VASUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VXV), 4490bca6cb3SZiyue Zhang VDIV_VX -> OPMVX(T, FuType.vidiv, VidivType.vdiv, F, T, F, UopSplitType.VEC_VXV), 4500bca6cb3SZiyue Zhang VDIVU_VX -> OPMVX(T, FuType.vidiv, VidivType.vdivu, F, T, F, UopSplitType.VEC_VXV), 451adf68ff3Sczw VMACC_VX -> OPMVX(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VXV), 452adf68ff3Sczw VMADD_VX -> OPMVX(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VXV), 453adf68ff3Sczw VMUL_VX -> OPMVX(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VXV), 454adf68ff3Sczw VMULH_VX -> OPMVX(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VXV), 455adf68ff3Sczw VMULHSU_VX -> OPMVX(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VXV), 456adf68ff3Sczw VMULHU_VX -> OPMVX(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VXV), 4577c67deccSZiyue 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) 458b65b9ebaSXuan Hu 459adf68ff3Sczw VNMSAC_VX -> OPMVX(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VXV), 460adf68ff3Sczw VNMSUB_VX -> OPMVX(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VXV), 4610bca6cb3SZiyue Zhang VREM_VX -> OPMVX(T, FuType.vidiv, VidivType.vrem, F, T, F, UopSplitType.VEC_VXV), 4620bca6cb3SZiyue Zhang VREMU_VX -> OPMVX(T, FuType.vidiv, VidivType.vremu, F, T, F, UopSplitType.VEC_VXV), 463b65b9ebaSXuan Hu 464e2695e90SzhanglyGit VSLIDE1DOWN_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1down, F, T, F, UopSplitType.VEC_SLIDE1DOWN), 465e2695e90SzhanglyGit VSLIDE1UP_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1up, F, T, F, UopSplitType.VEC_SLIDE1UP), 466e2695e90SzhanglyGit VWADD_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VXW), 467e2695e90SzhanglyGit VWADD_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WXW), 468e2695e90SzhanglyGit VWADDU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VXW), 469e2695e90SzhanglyGit VWADDU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WXW), 470b65b9ebaSXuan Hu 471b65b9ebaSXuan Hu // OutOfMemoryError 472adf68ff3Sczw VWMACC_VX -> OPMVX(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VXW), 473adf68ff3Sczw VWMACCSU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VXW), 474adf68ff3Sczw VWMACCU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VXW), 475b65b9ebaSXuan Hu 476adf68ff3Sczw VWMACCUS_VX -> OPMVX(T, FuType.vimac, VimacType.vwmaccus, F, T, F, UopSplitType.VEC_VXW), 477adf68ff3Sczw VWMUL_VX -> OPMVX(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VXW), 478adf68ff3Sczw VWMULSU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VXW), 479b65b9ebaSXuan Hu // Ok 480adf68ff3Sczw VWMULU_VX -> OPMVX(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VXW), 481e2695e90SzhanglyGit VWSUB_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VXW), 482e2695e90SzhanglyGit VWSUB_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WXW), 483e2695e90SzhanglyGit VWSUBU_VX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VXW), 484e2695e90SzhanglyGit VWSUBU_WX -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WXW), 485c6661c33SHaojin Tang ) 4867f2b7720SXuan Hu 487bdda74fdSxiaofeibao-xjtu val opfff: Array[(BitPat, XSDecodeBase)] = Array( 488bdda74fdSxiaofeibao-xjtu // Scalar Float Point 4894b136a73Ssinsanction FADD_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfadd, F, T, F, UopSplitType.SCA_SIM), 4904b136a73Ssinsanction FADD_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfadd, F, T, F, UopSplitType.SCA_SIM), 491614d2bc6SHeiHuDie FADD_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfadd, F, T, F, UopSplitType.SCA_SIM), 4924b136a73Ssinsanction FSUB_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsub, F, T, F, UopSplitType.SCA_SIM), 4934b136a73Ssinsanction FSUB_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsub, F, T, F, UopSplitType.SCA_SIM), 494614d2bc6SHeiHuDie FSUB_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsub, F, T, F, UopSplitType.SCA_SIM), 4954b136a73Ssinsanction FEQ_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfeq , T, F, F, UopSplitType.SCA_SIM), 4964b136a73Ssinsanction FLT_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vflt , T, F, F, UopSplitType.SCA_SIM), 4974b136a73Ssinsanction FLE_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfle , T, F, F, UopSplitType.SCA_SIM), 4984b136a73Ssinsanction FEQ_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfeq , T, F, F, UopSplitType.SCA_SIM), 4994b136a73Ssinsanction FLT_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vflt , T, F, F, UopSplitType.SCA_SIM), 5004b136a73Ssinsanction FLE_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfle , T, F, F, UopSplitType.SCA_SIM), 501614d2bc6SHeiHuDie FEQ_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfeq , T, F, F, UopSplitType.SCA_SIM), 502614d2bc6SHeiHuDie FLT_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vflt , T, F, F, UopSplitType.SCA_SIM), 503614d2bc6SHeiHuDie FLE_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfle , T, F, F, UopSplitType.SCA_SIM), 5044b136a73Ssinsanction FMIN_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfmin, F, T, F, UopSplitType.SCA_SIM), 5054b136a73Ssinsanction FMIN_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfmin, F, T, F, UopSplitType.SCA_SIM), 5064b136a73Ssinsanction FMAX_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfmax, F, T, F, UopSplitType.SCA_SIM), 5074b136a73Ssinsanction FMAX_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfmax, F, T, F, UopSplitType.SCA_SIM), 508614d2bc6SHeiHuDie FMIN_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfmin, F, T, F, UopSplitType.SCA_SIM), 509614d2bc6SHeiHuDie FMAX_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfmax, F, T, F, UopSplitType.SCA_SIM), 510572278faSZiyue Zhang // Scalar Float Point Convert Inst. 5114b136a73Ssinsanction FCVT_W_S -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfcvt_xfv, T, F, F, UopSplitType.SCA_SIM), 5124b136a73Ssinsanction FCVT_WU_S -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfcvt_xufv, T, F, F, UopSplitType.SCA_SIM), 5134b136a73Ssinsanction FCVT_L_S -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfwcvt_xfv, T, F, F, UopSplitType.SCA_SIM), 5144b136a73Ssinsanction FCVT_LU_S -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfwcvt_xufv, T, F, F, UopSplitType.SCA_SIM), 5154b136a73Ssinsanction FCVT_W_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfncvt_xfw, T, F, F, UopSplitType.SCA_SIM), 5164b136a73Ssinsanction FCVT_WU_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfncvt_xufw, T, F, F, UopSplitType.SCA_SIM), 5174b136a73Ssinsanction FCVT_L_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfcvt_xfv, T, F, F, UopSplitType.SCA_SIM), 5184b136a73Ssinsanction FCVT_LU_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfcvt_xufv, T, F, F, UopSplitType.SCA_SIM), 5194b136a73Ssinsanction FCVT_S_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfncvt_ffw, F, T, F, UopSplitType.SCA_SIM), 5204b136a73Ssinsanction FCVT_D_S -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.vfwcvt_ffv, F, T, F, UopSplitType.SCA_SIM), 521b189aafaSzmx //Scala Half-Precision Float Convert Inst. 522b189aafaSzmx FCVT_H_S -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_h_s, F, T, F, UopSplitType.SCA_SIM), 523b189aafaSzmx FCVT_S_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_s_h, F, T, F, UopSplitType.SCA_SIM), 524b189aafaSzmx FCVT_H_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_h_d, F, T, F, UopSplitType.SCA_SIM), 525b189aafaSzmx FCVT_D_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_d_h, F, T, F, UopSplitType.SCA_SIM), 526614d2bc6SHeiHuDie FCVT_W_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_w_h, T, F, F, UopSplitType.SCA_SIM), 527614d2bc6SHeiHuDie FCVT_WU_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_wu_h, T, F, F, UopSplitType.SCA_SIM), 528614d2bc6SHeiHuDie FCVT_L_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_l_h, T, F, F, UopSplitType.SCA_SIM), 529614d2bc6SHeiHuDie FCVT_LU_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, VfcvtType.fcvt_lu_h, T, F, F, UopSplitType.SCA_SIM), 530572278faSZiyue Zhang // Scalar Float Point f2i MV Inst. 5314b136a73Ssinsanction FMV_X_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, FuOpType.FMVXF, T, F, F, UopSplitType.SCA_SIM), 5324b136a73Ssinsanction FMV_X_W -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, FuOpType.FMVXF, T, F, F, UopSplitType.SCA_SIM), 533b189aafaSzmx FMV_X_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.fcvt, FuOpType.FMVXF, T, F, F, UopSplitType.SCA_SIM), 534bdda74fdSxiaofeibao-xjtu // donot wflags 5354b136a73Ssinsanction FCLASS_S -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.falu, VfaluType.vfclass, T, F, F, UopSplitType.SCA_SIM), 5364b136a73Ssinsanction FCLASS_D -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.falu, VfaluType.vfclass, T, F, F, UopSplitType.SCA_SIM), 537614d2bc6SHeiHuDie FCLASS_H -> OPFFF(SrcType.fp, SrcType.X, SrcType.X, FuType.falu, VfaluType.vfclass, T, F, F, UopSplitType.SCA_SIM), 5384b136a73Ssinsanction FSGNJ_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnj , F, T, F, UopSplitType.SCA_SIM), 5394b136a73Ssinsanction FSGNJ_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnj , F, T, F, UopSplitType.SCA_SIM), 540614d2bc6SHeiHuDie FSGNJ_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnj , F, T, F, UopSplitType.SCA_SIM), 5414b136a73Ssinsanction FSGNJX_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnjx, F, T, F, UopSplitType.SCA_SIM), 5424b136a73Ssinsanction FSGNJX_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnjx, F, T, F, UopSplitType.SCA_SIM), 543614d2bc6SHeiHuDie FSGNJX_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnjx, F, T, F, UopSplitType.SCA_SIM), 5444b136a73Ssinsanction FSGNJN_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnjn, F, T, F, UopSplitType.SCA_SIM), 5454b136a73Ssinsanction FSGNJN_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnjn, F, T, F, UopSplitType.SCA_SIM), 546614d2bc6SHeiHuDie FSGNJN_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.falu, VfaluType.vfsgnjn, F, T, F, UopSplitType.SCA_SIM), 547bdda74fdSxiaofeibao-xjtu 5484b136a73Ssinsanction FMUL_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fmac , VfmaType.vfmul, F, T, F, UopSplitType.SCA_SIM), 5494b136a73Ssinsanction FMUL_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fmac , VfmaType.vfmul, F, T, F, UopSplitType.SCA_SIM), 550614d2bc6SHeiHuDie FMUL_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fmac , VfmaType.vfmul, F, T, F, UopSplitType.SCA_SIM), 551bdda74fdSxiaofeibao-xjtu 5524b136a73Ssinsanction FDIV_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fDivSqrt, VfdivType.vfdiv , F, T, F, UopSplitType.SCA_SIM), 5534b136a73Ssinsanction FDIV_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fDivSqrt, VfdivType.vfdiv , F, T, F, UopSplitType.SCA_SIM), 554614d2bc6SHeiHuDie FDIV_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fDivSqrt, VfdivType.vfdiv , F, T, F, UopSplitType.SCA_SIM), 5554b136a73Ssinsanction FSQRT_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fDivSqrt, VfdivType.vfsqrt, F, T, F, UopSplitType.SCA_SIM), 5564b136a73Ssinsanction FSQRT_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fDivSqrt, VfdivType.vfsqrt, F, T, F, UopSplitType.SCA_SIM), 557614d2bc6SHeiHuDie FSQRT_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.X, FuType.fDivSqrt, VfdivType.vfsqrt, F, T, F, UopSplitType.SCA_SIM), 558bdda74fdSxiaofeibao-xjtu 5594b136a73Ssinsanction FMADD_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfmacc , F, T, F, UopSplitType.SCA_SIM), 5604b136a73Ssinsanction FMSUB_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfmsac , F, T, F, UopSplitType.SCA_SIM), 5614b136a73Ssinsanction FNMADD_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfnmacc, F, T, F, UopSplitType.SCA_SIM), 5624b136a73Ssinsanction FNMSUB_S -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfnmsac, F, T, F, UopSplitType.SCA_SIM), 5634b136a73Ssinsanction FMADD_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfmacc , F, T, F, UopSplitType.SCA_SIM), 5644b136a73Ssinsanction FMSUB_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfmsac , F, T, F, UopSplitType.SCA_SIM), 5654b136a73Ssinsanction FNMADD_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfnmacc, F, T, F, UopSplitType.SCA_SIM), 5664b136a73Ssinsanction FNMSUB_D -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfnmsac, F, T, F, UopSplitType.SCA_SIM), 567614d2bc6SHeiHuDie FMADD_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfmacc , F, T, F, UopSplitType.SCA_SIM), 568614d2bc6SHeiHuDie FMSUB_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfmsac , F, T, F, UopSplitType.SCA_SIM), 569614d2bc6SHeiHuDie FNMADD_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfnmacc, F, T, F, UopSplitType.SCA_SIM), 570614d2bc6SHeiHuDie FNMSUB_H -> OPFFF(SrcType.fp, SrcType.fp, SrcType.fp, FuType.fmac, VfmaType.vfnmsac, F, T, F, UopSplitType.SCA_SIM), 571bdda74fdSxiaofeibao-xjtu ) 572bdda74fdSxiaofeibao-xjtu 573b65b9ebaSXuan Hu val opfvv: Array[(BitPat, XSDecodeBase)] = Array( 574b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 575cb81ef42Sxiaofeibao-xjtu VFADD_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.VEC_VVV), 576cb81ef42Sxiaofeibao-xjtu VFSUB_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsub, F, T, F, UopSplitType.VEC_VVV), 577b448988dSczw 578b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 579cb81ef42Sxiaofeibao-xjtu VFWADD_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd , F, T, F, UopSplitType.VEC_VVW), 580cb81ef42Sxiaofeibao-xjtu VFWSUB_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub , F, T, F, UopSplitType.VEC_VVW), 581cb81ef42Sxiaofeibao-xjtu VFWADD_WV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd_w, F, T, F, UopSplitType.VEC_WVW), 582cb81ef42Sxiaofeibao-xjtu VFWSUB_WV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub_w, F, T, F, UopSplitType.VEC_WVW), 583b448988dSczw 584b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 585cb81ef42Sxiaofeibao-xjtu VFMUL_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfma, VfmaType.vfmul, F, T, F, UopSplitType.VEC_VVV), 586cb81ef42Sxiaofeibao-xjtu VFDIV_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv , F, T, F, UopSplitType.VEC_VVV), 587b448988dSczw 588b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 589cb81ef42Sxiaofeibao-xjtu VFWMUL_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfma, VfmaType.vfmul_w, F, T, F, UopSplitType.VEC_VVW), 590b448988dSczw 591b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 592b19366b2Sxiaofeibao-xjtu VFMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.VEC_VVV), 593b19366b2Sxiaofeibao-xjtu VFNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.VEC_VVV), 594b19366b2Sxiaofeibao-xjtu VFMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.VEC_VVV), 595b19366b2Sxiaofeibao-xjtu VFNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.VEC_VVV), 596b19366b2Sxiaofeibao-xjtu VFMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmadd , F, T, F, UopSplitType.VEC_VVV), 597b19366b2Sxiaofeibao-xjtu VFNMADD_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmadd, F, T, F, UopSplitType.VEC_VVV), 598b19366b2Sxiaofeibao-xjtu VFMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsub , F, T, F, UopSplitType.VEC_VVV), 599b19366b2Sxiaofeibao-xjtu VFNMSUB_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsub, F, T, F, UopSplitType.VEC_VVV), 600b448988dSczw 601b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 602b19366b2Sxiaofeibao-xjtu VFWMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmacc_w , F, T, F, UopSplitType.VEC_VVW), 603b19366b2Sxiaofeibao-xjtu VFWNMACC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc_w, F, T, F, UopSplitType.VEC_VVW), 604b19366b2Sxiaofeibao-xjtu VFWMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfmsac_w , F, T, F, UopSplitType.VEC_VVW), 605b19366b2Sxiaofeibao-xjtu VFWNMSAC_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac_w, F, T, F, UopSplitType.VEC_VVW), 606b448988dSczw 607b448988dSczw // 13.8. Vector Floating-Point Square-Root Instruction 60872d67441SXuan Hu VFSQRT_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfdiv, VfdivType.vfsqrt, F, T, F, UopSplitType.VEC_VVV), // vfsqrt.v vd, vs2, vm 609b448988dSczw 610ba899681Schengguanghui // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction 61172d67441SXuan Hu VFRSQRT7_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfrsqrt7, F, T, F, UopSplitType.VEC_VVV), // vfrsqrt7.v vd, vs2, vm 612b448988dSczw 613ba899681Schengguanghui // 13.10. Vector Floating-Point Reciprocal Estimate Instruction 61472d67441SXuan Hu VFREC7_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfrec7, F, T, F, UopSplitType.VEC_VVV), // vfrec7.v vd, vs2, vm 615b448988dSczw 616b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 617cb81ef42Sxiaofeibao-xjtu VFMIN_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.VEC_VVV), 618cb81ef42Sxiaofeibao-xjtu VFMAX_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.VEC_VVV), 619b448988dSczw 620b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 621cb81ef42Sxiaofeibao-xjtu VFSGNJ_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnj , F, T, F, UopSplitType.VEC_VVV), 622cb81ef42Sxiaofeibao-xjtu VFSGNJN_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnjn, F, T, F, UopSplitType.VEC_VVV), 623cb81ef42Sxiaofeibao-xjtu VFSGNJX_VV -> OPFVV(SrcType.vp, SrcType.vp , FuType.vfalu, VfaluType.vfsgnjx, F, T, F, UopSplitType.VEC_VVV), 624b448988dSczw 625b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 626f06d6d60Sxiaofeibao-xjtu VMFEQ_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfeq, F, T, F, UopSplitType.VEC_VVM), 627f06d6d60Sxiaofeibao-xjtu VMFNE_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfne, F, T, F, UopSplitType.VEC_VVM), 628f06d6d60Sxiaofeibao-xjtu VMFLT_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vflt, F, T, F, UopSplitType.VEC_VVM), 629f06d6d60Sxiaofeibao-xjtu VMFLE_VV -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfle, F, T, F, UopSplitType.VEC_VVM), 630b448988dSczw 631b448988dSczw // 13.14. Vector Floating-Point Classify Instruction 6328df34fe4SZiyue Zhang VFCLASS_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfalu, VfaluType.vfclass, F, T, F, UopSplitType.VEC_VVV), 633b448988dSczw 634ba899681Schengguanghui // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions 6359d3cebe7Schengguanghui VFCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_xufv, F, T, F, UopSplitType.VEC_VVV), 6369d3cebe7Schengguanghui VFCVT_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_xfv, F, T, F, UopSplitType.VEC_VVV), 6379d3cebe7Schengguanghui VFCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_rtz_xufv, F, T, F, UopSplitType.VEC_VVV), 6389d3cebe7Schengguanghui VFCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_rtz_xfv, F, T, F, UopSplitType.VEC_VVV), 6399d3cebe7Schengguanghui VFCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_fxuv, F, T, F, UopSplitType.VEC_VVV), 6409d3cebe7Schengguanghui VFCVT_F_X_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfcvt_fxv, F, T, F, UopSplitType.VEC_VVV), 641b448988dSczw 642ba899681Schengguanghui // 13.18. Widening Floating-Point/Integer Type-Convert Instructions 6439d3cebe7Schengguanghui VFWCVT_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_xufv, F, T, F, UopSplitType.VEC_VVW), 6449d3cebe7Schengguanghui VFWCVT_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_xfv, F, T, F, UopSplitType.VEC_VVW), 6459d3cebe7Schengguanghui VFWCVT_RTZ_XU_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_rtz_xufv, F, T, F, UopSplitType.VEC_VVW), 6469d3cebe7Schengguanghui VFWCVT_RTZ_X_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_rtz_xfv, F, T, F, UopSplitType.VEC_VVW), 6479d3cebe7Schengguanghui VFWCVT_F_XU_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_fxuv, F, T, F, UopSplitType.VEC_VVW), 6489d3cebe7Schengguanghui VFWCVT_F_X_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_fxv, F, T, F, UopSplitType.VEC_VVW), 6499d3cebe7Schengguanghui VFWCVT_F_F_V -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfwcvt_ffv, F, T, F, UopSplitType.VEC_VVW), 650b448988dSczw 651b65b9ebaSXuan Hu // ! 652ba899681Schengguanghui // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions 653ba899681Schengguanghui VFNCVT_XU_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_xufw, F, T, F, UopSplitType.VEC_WVV), 654ba899681Schengguanghui VFNCVT_X_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_xfw, F, T, F, UopSplitType.VEC_WVV), 65517f57ffdSZiyue Zhang VFNCVT_RTZ_XU_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_rtz_xufw, F, T, F, UopSplitType.VEC_WVV), 656ba899681Schengguanghui VFNCVT_RTZ_X_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_rtz_xfw, F, T, F, UopSplitType.VEC_WVV), 657ba899681Schengguanghui VFNCVT_F_XU_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_fxuw, F, T, F, UopSplitType.VEC_WVV), 658ba899681Schengguanghui VFNCVT_F_X_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_fxw, F, T, F, UopSplitType.VEC_WVV), 659ba899681Schengguanghui VFNCVT_F_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_ffw, F, T, F, UopSplitType.VEC_WVV), 660ba899681Schengguanghui VFNCVT_ROD_F_F_W -> OPFVV(SrcType.X , SrcType.vp , FuType.vfcvt, VfcvtType.vfncvt_rod_ffw, F, T, F, UopSplitType.VEC_WVV), 661b448988dSczw // 14.3. Vector Single-Width Floating-Point Reduction Instructions 662cb81ef42Sxiaofeibao-xjtu VFREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredosum, F, T, F, UopSplitType.VEC_VFREDOSUM), 663cb81ef42Sxiaofeibao-xjtu VFREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredusum, F, T, F, UopSplitType.VEC_VFRED), 664cb81ef42Sxiaofeibao-xjtu VFREDMAX_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredmax , F, T, F, UopSplitType.VEC_VFRED), 665cb81ef42Sxiaofeibao-xjtu VFREDMIN_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfredmin , F, T, F, UopSplitType.VEC_VFRED), 666b448988dSczw 667b448988dSczw // 14.4. Vector Widening Floating-Point Reduction Instructions 668cb81ef42Sxiaofeibao-xjtu VFWREDOSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfwredosum, F, T, F, UopSplitType.VEC_VFREDOSUM), 6692ec38117SZiyue Zhang VFWREDUSUM_VS -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfalu, VfaluType.vfwredosum, F, T, F, UopSplitType.VEC_VFREDOSUM), 670b448988dSczw 671b448988dSczw ) 6727f2b7720SXuan Hu 673b65b9ebaSXuan Hu val opfvf: Array[(BitPat, XSDecodeBase)] = Array( 674b448988dSczw // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions 675cb81ef42Sxiaofeibao-xjtu VFADD_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfadd, F, T, F, UopSplitType.VEC_VFV), 676cb81ef42Sxiaofeibao-xjtu VFSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsub , F, T, F, UopSplitType.VEC_VFV), 677cb81ef42Sxiaofeibao-xjtu VFRSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsub , F, T, F, UopSplitType.VEC_VFV), 678b448988dSczw 679b448988dSczw // 13.3. Vector Widening Floating-Point Add/Subtract Instructions 680cb81ef42Sxiaofeibao-xjtu VFWADD_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd, F, T, F, UopSplitType.VEC_VFW), 681cb81ef42Sxiaofeibao-xjtu VFWSUB_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub, F, T, F, UopSplitType.VEC_VFW), 682cb81ef42Sxiaofeibao-xjtu VFWADD_WF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwadd_w, F, T, F, UopSplitType.VEC_WFW), 683cb81ef42Sxiaofeibao-xjtu VFWSUB_WF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfwsub_w, F, T, F, UopSplitType.VEC_WFW), 684b448988dSczw 685b448988dSczw // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions 686cb81ef42Sxiaofeibao-xjtu VFMUL_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfma, VfmaType.vfmul, F, T, F, UopSplitType.VEC_VFV), 687cb81ef42Sxiaofeibao-xjtu VFDIV_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv, F, T, F, UopSplitType.VEC_VFV), 688cb81ef42Sxiaofeibao-xjtu VFRDIV_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfdiv, VfdivType.vfdiv, F, T, F, UopSplitType.VEC_VFV), 689b448988dSczw 690b448988dSczw // 13.5. Vector Widening Floating-Point Multiply 691cb81ef42Sxiaofeibao-xjtu VFWMUL_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfma, VfmaType.vfmul_w, F, T, F, UopSplitType.VEC_VFW), 692b448988dSczw 693b448988dSczw // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions 694b19366b2Sxiaofeibao-xjtu VFMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmacc , F, T, F, UopSplitType.VEC_VFV), 695b19366b2Sxiaofeibao-xjtu VFNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc, F, T, F, UopSplitType.VEC_VFV), 696b19366b2Sxiaofeibao-xjtu VFMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsac , F, T, F, UopSplitType.VEC_VFV), 697b19366b2Sxiaofeibao-xjtu VFNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac, F, T, F, UopSplitType.VEC_VFV), 698b19366b2Sxiaofeibao-xjtu VFMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmadd , F, T, F, UopSplitType.VEC_VFV), 699b19366b2Sxiaofeibao-xjtu VFNMADD_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmadd, F, T, F, UopSplitType.VEC_VFV), 700b19366b2Sxiaofeibao-xjtu VFMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsub , F, T, F, UopSplitType.VEC_VFV), 701b19366b2Sxiaofeibao-xjtu VFNMSUB_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsub, F, T, F, UopSplitType.VEC_VFV), 702b448988dSczw 703b448988dSczw // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions 704b19366b2Sxiaofeibao-xjtu VFWMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmacc_w , F, T, F, UopSplitType.VEC_VFW), 705b19366b2Sxiaofeibao-xjtu VFWNMACC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmacc_w, F, T, F, UopSplitType.VEC_VFW), 706b19366b2Sxiaofeibao-xjtu VFWMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfmsac_w , F, T, F, UopSplitType.VEC_VFW), 707b19366b2Sxiaofeibao-xjtu VFWNMSAC_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfma, VfmaType.vfnmsac_w, F, T, F, UopSplitType.VEC_VFW), 708b448988dSczw 709b448988dSczw // 13.11. Vector Floating-Point MIN/MAX Instructions 710cb81ef42Sxiaofeibao-xjtu VFMIN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmin, F, T, F, UopSplitType.VEC_VFV), 711cb81ef42Sxiaofeibao-xjtu VFMAX_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmax, F, T, F, UopSplitType.VEC_VFV), 712b448988dSczw 713b448988dSczw // 13.12. Vector Floating-Point Sign-Injection Instructions 714cb81ef42Sxiaofeibao-xjtu VFSGNJ_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnj , F, T, F, UopSplitType.VEC_VFV), 715cb81ef42Sxiaofeibao-xjtu VFSGNJN_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnjn, F, T, F, UopSplitType.VEC_VFV), 716cb81ef42Sxiaofeibao-xjtu VFSGNJX_VF -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfpuType.vfsgnjx, F, T, F, UopSplitType.VEC_VFV), 717b448988dSczw 718b448988dSczw // 13.13. Vector Floating-Point Compare Instructions 719f06d6d60Sxiaofeibao-xjtu VMFEQ_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfeq, F, F, T, UopSplitType.VEC_VFM), 720f06d6d60Sxiaofeibao-xjtu VMFNE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfne, F, F, T, UopSplitType.VEC_VFM), 721f06d6d60Sxiaofeibao-xjtu VMFLT_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vflt, F, F, T, UopSplitType.VEC_VFM), 722f06d6d60Sxiaofeibao-xjtu VMFLE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfle, F, F, T, UopSplitType.VEC_VFM), 723f06d6d60Sxiaofeibao-xjtu VMFGT_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfgt, F, F, T, UopSplitType.VEC_VFM), 724f06d6d60Sxiaofeibao-xjtu VMFGE_VF -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfalu, VfaluType.vfge, F, F, T, UopSplitType.VEC_VFM), 725b448988dSczw 726b448988dSczw // 13.15. Vector Floating-Point Merge Instruction 727cb81ef42Sxiaofeibao-xjtu VFMERGE_VFM -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmerge, F, T, F, UopSplitType.VEC_VFV), 728b448988dSczw 729b448988dSczw // 13.16. Vector Floating-Point Move Instruction 7306b6ab41bSZiyue Zhang VFMV_V_F -> OPFVF(SrcType.fp, SrcType.vp , FuType.vfalu, VfaluType.vfmv, F, T, F, UopSplitType.VEC_VFV, src2 = SrcType.X), // vfmv.v.f vd, rs1 # vd[i] = f[rs1] 731b448988dSczw 732b448988dSczw // 16.2. Floating-Point Scalar Move Instructions 7335110577fSZiyue Zhang VFMV_F_S -> OPFVF(SrcType.X, SrcType.X, FuType.vfalu, VfaluType.vfmv_f_s, T, F, F, UopSplitType.dummy), // f[rd] = vs2[0] (rs1=0) 7346b6ab41bSZiyue Zhang VFMV_S_F -> OPFVF(SrcType.fp, SrcType.X, FuType.vfalu, VfaluType.vfmv_s_f, F, T, F, UopSplitType.VEC_0XV, src2 = SrcType.X), // vd[0] = f[rs1] (vs2=0) 735b448988dSczw // 16.3.3. Vector Slide1up 736e2695e90SzhanglyGit 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] 737b448988dSczw 738b448988dSczw // 16.3.4. Vector Slide1down Instruction 739b448988dSczw // vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1] 740e2695e90SzhanglyGit 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] 7417f2b7720SXuan Hu ) 7427f2b7720SXuan Hu 743b65b9ebaSXuan Hu val vset: Array[(BitPat, XSDecodeBase)] = Array( 7441436b764SZiyue Zhang VSETVLI -> VSET(vli = F, vtypei = T, VSETOpType.uvsetvcfg_xi, flushPipe = F, blockBack = F, SelImm.IMM_VSETVLI), 7451436b764SZiyue Zhang VSETIVLI -> VSET(vli = T, vtypei = T, VSETOpType.uvsetvcfg_ii, flushPipe = F, blockBack = F, SelImm.IMM_VSETIVLI), 7461436b764SZiyue Zhang VSETVL -> VSET(vli = F, vtypei = F, VSETOpType.uvsetvcfg_xx, flushPipe = T, blockBack = T, SelImm.X), // flush pipe 747912e2179SXuan Hu ) 7487f2b7720SXuan Hu 749b65b9ebaSXuan Hu val vls: Array[(BitPat, XSDecodeBase)] = Array( 750912e2179SXuan Hu // 7.4. Vector Unit-Stride Instructions 751c4501a6fSZiyue-Zhang VLE8_V -> VLD(SrcType.X, VlduType.vle), 752c4501a6fSZiyue-Zhang VLE16_V -> VLD(SrcType.X, VlduType.vle), 753c4501a6fSZiyue-Zhang VLE32_V -> VLD(SrcType.X, VlduType.vle), 754c4501a6fSZiyue-Zhang VLE64_V -> VLD(SrcType.X, VlduType.vle), 755c4501a6fSZiyue-Zhang VSE8_V -> VST(SrcType.X, VstuType.vse), 756c4501a6fSZiyue-Zhang VSE16_V -> VST(SrcType.X, VstuType.vse), 757c4501a6fSZiyue-Zhang VSE32_V -> VST(SrcType.X, VstuType.vse), 758c4501a6fSZiyue-Zhang VSE64_V -> VST(SrcType.X, VstuType.vse), 759c4501a6fSZiyue-Zhang VLM_V -> VLD(SrcType.X, VlduType.vlm, mask = T), 760c4501a6fSZiyue-Zhang VSM_V -> VST(SrcType.X, VstuType.vsm, mask = T), 761912e2179SXuan Hu // 7.5. Vector Strided Instructions 762c4501a6fSZiyue-Zhang VLSE8_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 763c4501a6fSZiyue-Zhang VLSE16_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 764c4501a6fSZiyue-Zhang VLSE32_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 765c4501a6fSZiyue-Zhang VLSE64_V -> VLD(SrcType.xp, VlduType.vlse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 766c4501a6fSZiyue-Zhang VSSE8_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 767c4501a6fSZiyue-Zhang VSSE16_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 768c4501a6fSZiyue-Zhang VSSE32_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 769c4501a6fSZiyue-Zhang VSSE64_V -> VST(SrcType.xp, VstuType.vsse, uopSplitType = UopSplitType.VEC_S_LDST, strided = T), 770912e2179SXuan Hu // 7.6. Vector Indexed Instructions 771c4501a6fSZiyue-Zhang VLUXEI8_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 772c4501a6fSZiyue-Zhang VLUXEI16_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 773c4501a6fSZiyue-Zhang VLUXEI32_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 774c4501a6fSZiyue-Zhang VLUXEI64_V -> VLD(SrcType.vp, VlduType.vluxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 775c4501a6fSZiyue-Zhang VLOXEI8_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 776c4501a6fSZiyue-Zhang VLOXEI16_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 777c4501a6fSZiyue-Zhang VLOXEI32_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 778c4501a6fSZiyue-Zhang VLOXEI64_V -> VLD(SrcType.vp, VlduType.vloxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 779e19ef7a0Szhanglinjuan VSUXEI8_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 780c4501a6fSZiyue-Zhang VSUXEI16_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 781c4501a6fSZiyue-Zhang VSUXEI32_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 782c4501a6fSZiyue-Zhang VSUXEI64_V -> VST(SrcType.vp, VstuType.vsuxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = F), 783c4501a6fSZiyue-Zhang VSOXEI8_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 784c4501a6fSZiyue-Zhang VSOXEI16_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 785c4501a6fSZiyue-Zhang VSOXEI32_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 786c4501a6fSZiyue-Zhang VSOXEI64_V -> VST(SrcType.vp, VstuType.vsoxe, uopSplitType = UopSplitType.VEC_I_LDST, indexed = T, ordered = T), 787912e2179SXuan Hu // 7.7. Unit-stride Fault-Only-First Loads 788b0480352SZiyue Zhang VLE8FF_V -> VLD(SrcType.X, VlduType.vleff, uopSplitType = UopSplitType.VEC_US_FF_LD, ff = T), 789b0480352SZiyue Zhang VLE16FF_V -> VLD(SrcType.X, VlduType.vleff, uopSplitType = UopSplitType.VEC_US_FF_LD, ff = T), 790b0480352SZiyue Zhang VLE32FF_V -> VLD(SrcType.X, VlduType.vleff, uopSplitType = UopSplitType.VEC_US_FF_LD, ff = T), 791b0480352SZiyue Zhang VLE64FF_V -> VLD(SrcType.X, VlduType.vleff, uopSplitType = UopSplitType.VEC_US_FF_LD, ff = T), 792912e2179SXuan Hu // 7.8. Vector Load/Store Segment Instructions 793912e2179SXuan Hu // 7.8.1. Vector Unit-Stride Segment Loads and Stores 794912e2179SXuan Hu // TODO 795912e2179SXuan Hu // 7.8.2. Vector Strided Segment Loads and Stores 796912e2179SXuan Hu // TODO 797912e2179SXuan Hu // 7.8.3. Vector Indexed Segment Loads and Stores 798912e2179SXuan Hu // TODO 799912e2179SXuan Hu // 7.9. Vector Load/Store Whole Register Instructions 800c4501a6fSZiyue-Zhang VL1RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 801c4501a6fSZiyue-Zhang VL1RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 802c4501a6fSZiyue-Zhang VL1RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 803c4501a6fSZiyue-Zhang VL1RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 804c4501a6fSZiyue-Zhang VL2RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 805c4501a6fSZiyue-Zhang VL2RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 806c4501a6fSZiyue-Zhang VL2RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 807c4501a6fSZiyue-Zhang VL2RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 808c4501a6fSZiyue-Zhang VL4RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 809c4501a6fSZiyue-Zhang VL4RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 810c4501a6fSZiyue-Zhang VL4RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 811c4501a6fSZiyue-Zhang VL4RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 812c4501a6fSZiyue-Zhang VL8RE8_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 813c4501a6fSZiyue-Zhang VL8RE16_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 814c4501a6fSZiyue-Zhang VL8RE32_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 815c4501a6fSZiyue-Zhang VL8RE64_V -> VLD(SrcType.X, VlduType.vlr, whole = T), 816c4501a6fSZiyue-Zhang VS1R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 817c4501a6fSZiyue-Zhang VS2R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 818c4501a6fSZiyue-Zhang VS4R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 819c4501a6fSZiyue-Zhang VS8R_V -> VST(SrcType.X, VstuType.vsr, whole = T), 820912e2179SXuan Hu ) 821912e2179SXuan Hu 822c8057e7cSXuan Hu override val decodeArray: Array[(BitPat, XSDecodeBase)] = vset ++ 823c06a3f03Szhanglinjuan opivv ++ opivx ++ opivi ++ opmvv ++ opmvx ++ opfvv ++ opfvf ++ opfff ++ vls 8247f2b7720SXuan Hu} 825