xref: /XiangShan/src/main/scala/xiangshan/backend/decode/VecDecoder.scala (revision adf68ff35dc385804f293aa9189a95e612170c74)
17f2b7720SXuan Hupackage xiangshan.backend.decode
27f2b7720SXuan Hu
37f2b7720SXuan Huimport chipsalliance.rocketchip.config.Parameters
47f2b7720SXuan Huimport chisel3._
5912e2179SXuan Huimport chisel3.util.BitPat.bitPatToUInt
67f2b7720SXuan Huimport chisel3.util._
77f2b7720SXuan Huimport freechips.rocketchip.util.uintToBitPat
83a2e64c4SZhangZifeiimport freechips.rocketchip.rocket.Instructions._
97f2b7720SXuan Huimport utils._
107f2b7720SXuan Huimport xiangshan.ExceptionNO.illegalInstr
117f2b7720SXuan Huimport xiangshan._
12*adf68ff3Sczwimport yunsuan.{VfpuType, VipuType, VimacType, VpermType, VialuFixType}
137f2b7720SXuan Hu
14b65b9ebaSXuan Huabstract class VecDecode extends XSDecodeBase {
157f2b7720SXuan Hu  def generate() : List[BitPat]
167f2b7720SXuan Hu  def asOldDecodeOutput(): List[BitPat] = {
17912e2179SXuan Hu    val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate()
187f2b7720SXuan Hu    List (src1, src2, src3, fu, fuOp, xWen, fWen, xsTrap, noSpec, blockBack, flushPipe, selImm)
197f2b7720SXuan Hu  }
20912e2179SXuan Hu  def asFirstStageDecodeOutput(): List[BitPat] = {
21912e2179SXuan Hu    val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::vxsatWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate()
22912e2179SXuan Hu    List (src1, src2, src3, fu, fuOp, xWen, fWen, bitPatToUInt(vWen) | bitPatToUInt(mWen), xsTrap, noSpec, blockBack, flushPipe, selImm)
23912e2179SXuan Hu  }
247f2b7720SXuan Hu}
257f2b7720SXuan Hu
26e2695e90SzhanglyGitcase class OPIVV(fu: BitPat, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopSplitType: BitPat = UopSplitType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase {
277f2b7720SXuan Hu  def generate() : List[BitPat] = {
28e2695e90SzhanglyGit    XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType,
29b65b9ebaSXuan Hu      xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
307f2b7720SXuan Hu  }
317f2b7720SXuan Hu}
327f2b7720SXuan Hu
33e2695e90SzhanglyGitcase class OPIVX(fu: BitPat, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, uopSplitType: BitPat = UopSplitType.VEC_VXV, src3: BitPat = SrcType.vp) extends XSDecodeBase {
3458c35d23Shuxuan0307  def generate() : List[BitPat] = {
35e2695e90SzhanglyGit    XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType,
36b65b9ebaSXuan Hu      xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
3758c35d23Shuxuan0307  }
387f2b7720SXuan Hu}
397f2b7720SXuan Hu
40e2695e90SzhanglyGitcase class OPIVI(fu: BitPat, fuOp: BitPat, vWen: Boolean, mWen: Boolean, vxsatWen: Boolean, selImm: BitPat = SelImm.IMM_OPIVIS, uopSplitType: BitPat = UopSplitType.VEC_VVV, src3: BitPat = SrcType.vp) extends XSDecodeBase {
4158c35d23Shuxuan0307  def generate() : List[BitPat] = {
42e2695e90SzhanglyGit    XSDecode(SrcType.imm, SrcType.vp, src3, fu, fuOp, selImm, uopSplitType,
43b65b9ebaSXuan Hu      xWen = F, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
4458c35d23Shuxuan0307  }
457f2b7720SXuan Hu}
467f2b7720SXuan Hu
47e2695e90SzhanglyGitcase class OPMVV(vdRen: Boolean, fu: BitPat, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase {
48c6661c33SHaojin Tang  private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X
497f2b7720SXuan Hu  def generate() : List[BitPat] = {
50e2695e90SzhanglyGit    XSDecode(SrcType.vp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType, xWen, F, vWen, mWen, F, F, F, F).generate()
517f2b7720SXuan Hu  }
527f2b7720SXuan Hu}
537f2b7720SXuan Hu
54e2695e90SzhanglyGitcase class OPMVX(vdRen: Boolean, fu: BitPat, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase {
55c6661c33SHaojin Tang  private def src3: BitPat = if (vdRen) SrcType.vp else SrcType.X
56c6661c33SHaojin Tang  def generate() : List[BitPat] = {
57e2695e90SzhanglyGit    XSDecode(SrcType.xp, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType,
58b65b9ebaSXuan Hu      xWen = xWen, fWen = F, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
59c6661c33SHaojin Tang  }
607f2b7720SXuan Hu}
617f2b7720SXuan Hu
62e2695e90SzhanglyGitcase class OPFVV(src1:BitPat, src3:BitPat, fu: BitPat, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase {
63b448988dSczw  def generate() : List[BitPat] = {
64e2695e90SzhanglyGit    XSDecode(src1, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType,
65b65b9ebaSXuan Hu      xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
66b448988dSczw  }
677f2b7720SXuan Hu}
687f2b7720SXuan Hu
69e2695e90SzhanglyGitcase class OPFVF(src1:BitPat, src3:BitPat, fu: BitPat, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase {
707f2b7720SXuan Hu  def generate() : List[BitPat] = {
71e2695e90SzhanglyGit    XSDecode(src1, SrcType.vp, src3, fu, fuOp, SelImm.X, uopSplitType,
72b65b9ebaSXuan Hu      xWen = F, fWen = fWen, vWen = vWen, mWen = mWen, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
737f2b7720SXuan Hu  }
747f2b7720SXuan Hu}
757f2b7720SXuan Hu
76e2695e90SzhanglyGitcase class VSET(vli: Boolean, vtypei: Boolean, fuOp: BitPat, flushPipe: Boolean, selImm: BitPat, uopSplitType: BitPat = UopSplitType.DIR) extends XSDecodeBase {
77912e2179SXuan Hu  def generate() : List[BitPat] = {
78912e2179SXuan Hu    val src1 = if (vli) SrcType.imm else SrcType.xp
79912e2179SXuan Hu    val src2 = if (vtypei) SrcType.imm else SrcType.xp
80e2695e90SzhanglyGit    XSDecode(src1, src2, SrcType.X, FuType.alu, fuOp, selImm, uopSplitType,
81b65b9ebaSXuan Hu      xWen = T, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = flushPipe).generate()
82912e2179SXuan Hu  }
837f2b7720SXuan Hu}
847f2b7720SXuan Hu
85912e2179SXuan Hucase class VLD(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false, ff: Boolean = false,
86e2695e90SzhanglyGit  mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase {
87912e2179SXuan Hu  def generate() : List[BitPat] = {
88912e2179SXuan Hu    val fu = FuType.vldu
89912e2179SXuan Hu    val src1 = SrcType.xp
90912e2179SXuan Hu    val src3 = SrcType.X
91e2695e90SzhanglyGit    XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType,
92b65b9ebaSXuan Hu      xWen = F, fWen = F, vWen = T, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
93912e2179SXuan Hu  }
94912e2179SXuan Hu}
95912e2179SXuan Hu
96912e2179SXuan Hucase class VST(src2: BitPat, fuOp: BitPat, strided: Boolean = false, indexed: Boolean = false,
97e2695e90SzhanglyGit  mask: Boolean = false, whole: Boolean = false, ordered: Boolean = false, uopSplitType: BitPat = UopSplitType.dummy) extends XSDecodeBase {
98912e2179SXuan Hu  def generate() : List[BitPat] = {
99912e2179SXuan Hu    val fu = FuType.vstu
100912e2179SXuan Hu    val src1 = SrcType.xp
101912e2179SXuan Hu    val src3 = SrcType.vp
102e2695e90SzhanglyGit    XSDecode(src1, src2, src3, fu, fuOp, SelImm.X, uopSplitType,
103b65b9ebaSXuan Hu      xWen = F, fWen = F, vWen = F, mWen = F, xsTrap = F, noSpec = F, blockBack = F, flushPipe = F).generate()
104912e2179SXuan Hu  }
1057f2b7720SXuan Hu}
1067f2b7720SXuan Hu
1077f2b7720SXuan Huobject VecDecoder extends DecodeConstants {
108b65b9ebaSXuan Hu  val opivv: Array[(BitPat, XSDecodeBase)] = Array(
1097e79df6bSzhanglyGit    VADD_VV         -> OPIVV(FuType.vialuF, VialuFixType.vadd_vv, T, F, F),
1107e79df6bSzhanglyGit    VSUB_VV         -> OPIVV(FuType.vialuF, VialuFixType.vsub_vv, T, F, F),
1117f2b7720SXuan Hu
1127e79df6bSzhanglyGit    VMINU_VV        -> OPIVV(FuType.vialuF, VialuFixType.vminu_vv, T, F, F),
1137e79df6bSzhanglyGit    VMIN_VV         -> OPIVV(FuType.vialuF, VialuFixType.vmin_vv, T, F, F),
1147e79df6bSzhanglyGit    VMAXU_VV        -> OPIVV(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F),
1157e79df6bSzhanglyGit    VMAX_VV         -> OPIVV(FuType.vialuF, VialuFixType.vmax_vv, T, F, F),
11658c35d23Shuxuan0307
1177e79df6bSzhanglyGit    VAND_VV         -> OPIVV(FuType.vialuF, VialuFixType.vand_vv, T, F, F),
1187e79df6bSzhanglyGit    VOR_VV          -> OPIVV(FuType.vialuF, VialuFixType.vor_vv, T, F, F),
1197e79df6bSzhanglyGit    VXOR_VV         -> OPIVV(FuType.vialuF, VialuFixType.vxor_vv, T, F, F),
12058c35d23Shuxuan0307
121e2695e90SzhanglyGit    VRGATHER_VV     -> OPIVV(FuType.vppu, VpermType.vrgather, T, F, F, UopSplitType.VEC_RGATHER),
122e2695e90SzhanglyGit    VRGATHEREI16_VV -> OPIVV(FuType.vppu, VpermType.vrgatherei16, T, F, F, UopSplitType.VEC_RGATHEREI16),
12358c35d23Shuxuan0307
1247e79df6bSzhanglyGit    VADC_VVM        -> OPIVV(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F),
125e2695e90SzhanglyGit    VMADC_VVM       -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VVM),
126e2695e90SzhanglyGit    VMADC_VV        -> OPIVV(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VVM),
12758c35d23Shuxuan0307
1287e79df6bSzhanglyGit    VSBC_VVM        -> OPIVV(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F),
129e2695e90SzhanglyGit    VMSBC_VV        -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VVM),
130e2695e90SzhanglyGit    VMSBC_VVM       -> OPIVV(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VVM),
13158c35d23Shuxuan0307
1327e79df6bSzhanglyGit    VMERGE_VVM      -> OPIVV(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F),
13358c35d23Shuxuan0307
1347e79df6bSzhanglyGit    VMV_V_V      -> OPIVV(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F),
13558c35d23Shuxuan0307
136e2695e90SzhanglyGit    VMSEQ_VV        -> OPIVV(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VVM),
137e2695e90SzhanglyGit    VMSNE_VV        -> OPIVV(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VVM),
138e2695e90SzhanglyGit    VMSLTU_VV       -> OPIVV(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VVM),
139e2695e90SzhanglyGit    VMSLT_VV        -> OPIVV(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VVM),
140e2695e90SzhanglyGit    VMSLEU_VV       -> OPIVV(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VVM),
141e2695e90SzhanglyGit    VMSLE_VV        -> OPIVV(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VVM),
14258c35d23Shuxuan0307
1437e79df6bSzhanglyGit    VSLL_VV         -> OPIVV(FuType.vialuF, VialuFixType.vsll_vv, T, F, F),
1447e79df6bSzhanglyGit    VSRL_VV         -> OPIVV(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F),
1457e79df6bSzhanglyGit    VSRA_VV         -> OPIVV(FuType.vialuF, VialuFixType.vsra_vv, T, F, F),
146e2695e90SzhanglyGit    VNSRL_WV        -> OPIVV(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WVV),
147e2695e90SzhanglyGit    VNSRA_WV        -> OPIVV(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WVV),
148f9cac32fSczw
1497e79df6bSzhanglyGit    VSADDU_VV       -> OPIVV(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T),
1507e79df6bSzhanglyGit    VSADD_VV        -> OPIVV(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T),
1517e79df6bSzhanglyGit    VSSUBU_VV       -> OPIVV(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T),
1527e79df6bSzhanglyGit    VSSUB_VV        -> OPIVV(FuType.vialuF, VialuFixType.vssub_vv, T, F, T),
15358c35d23Shuxuan0307
154*adf68ff3Sczw    VSMUL_VV        -> OPIVV(FuType.vimac, VimacType.vsmul, T, F, T, UopSplitType.VEC_VVV),
15558c35d23Shuxuan0307
1567e79df6bSzhanglyGit    VSSRL_VV        -> OPIVV(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F),
1577e79df6bSzhanglyGit    VSSRA_VV        -> OPIVV(FuType.vialuF, VialuFixType.vssra_vv, T, F, F),
15858c35d23Shuxuan0307
159e2695e90SzhanglyGit    VNCLIPU_WV      -> OPIVV(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WVV),
160e2695e90SzhanglyGit    VNCLIP_WV       -> OPIVV(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WVV),
16158c35d23Shuxuan0307
162e2695e90SzhanglyGit    VWREDSUMU_VS    -> OPIVV(FuType.vipu, VipuType.vwredsumu_vs, T, F, F, UopSplitType.VEC_VWW),
163e2695e90SzhanglyGit    VWREDSUM_VS     -> OPIVV(FuType.vipu, VipuType.vwredsum_vs, T, F, F, UopSplitType.VEC_VWW),
1647f2b7720SXuan Hu  )
1657f2b7720SXuan Hu
166b65b9ebaSXuan Hu  val opivx: Array[(BitPat, XSDecodeBase)] = Array(
1677e79df6bSzhanglyGit    VADD_VX       -> OPIVX(FuType.vialuF, VialuFixType.vadd_vv, T, F, F),
1687e79df6bSzhanglyGit    VSUB_VX       -> OPIVX(FuType.vialuF, VialuFixType.vsub_vv, T, F, F),
1697e79df6bSzhanglyGit    VRSUB_VX      -> OPIVX(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F),
17058c35d23Shuxuan0307
1717e79df6bSzhanglyGit    VMINU_VX      -> OPIVX(FuType.vialuF, VialuFixType.vminu_vv, T, F, F),
1727e79df6bSzhanglyGit    VMIN_VX       -> OPIVX(FuType.vialuF, VialuFixType.vmin_vv, T, F, F),
1737e79df6bSzhanglyGit    VMAXU_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmaxu_vv, T, F, F),
1747e79df6bSzhanglyGit    VMAX_VX       -> OPIVX(FuType.vialuF, VialuFixType.vmax_vv, T, F, F),
17558c35d23Shuxuan0307
1767e79df6bSzhanglyGit    VAND_VX       -> OPIVX(FuType.vialuF, VialuFixType.vand_vv, T, F, F),
1777e79df6bSzhanglyGit    VOR_VX        -> OPIVX(FuType.vialuF, VialuFixType.vor_vv, T, F, F),
1787e79df6bSzhanglyGit    VXOR_VX       -> OPIVX(FuType.vialuF, VialuFixType.vxor_vv, T, F, F),
17958c35d23Shuxuan0307
180e2695e90SzhanglyGit    VRGATHER_VX   -> OPIVX(FuType.vppu, VpermType.vrgather_vx, T, F, F, UopSplitType.VEC_RGATHER_VX),
18158c35d23Shuxuan0307
182e2695e90SzhanglyGit    VSLIDEUP_VX   -> OPIVX(FuType.vppu, VpermType.vslideup, T, F, F, UopSplitType.VEC_SLIDEUP),
183e2695e90SzhanglyGit    VSLIDEDOWN_VX -> OPIVX(FuType.vppu, VpermType.vslidedown, T, F, F, UopSplitType.VEC_SLIDEDOWN),
18458c35d23Shuxuan0307
1857e79df6bSzhanglyGit    VADC_VXM      -> OPIVX(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F),
186e2695e90SzhanglyGit    VMADC_VXM      -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vvm, F, T, F, UopSplitType.VEC_VXM),
187e2695e90SzhanglyGit    VMADC_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmadc_vv, F, T, F, UopSplitType.VEC_VXM),
1887e79df6bSzhanglyGit    VSBC_VXM      -> OPIVX(FuType.vialuF, VialuFixType.vsbc_vvm, T, F, F),
189e2695e90SzhanglyGit    VMSBC_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vv, F, T, F, UopSplitType.VEC_VXM),
190e2695e90SzhanglyGit    VMSBC_VXM     -> OPIVX(FuType.vialuF, VialuFixType.vmsbc_vvm, F, T, F, UopSplitType.VEC_VXM),
19158c35d23Shuxuan0307
1927e79df6bSzhanglyGit    VMERGE_VXM    -> OPIVX(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F),
19358c35d23Shuxuan0307
1947e79df6bSzhanglyGit    VMV_V_X    -> OPIVX(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F),
19558c35d23Shuxuan0307
196e2695e90SzhanglyGit    VMSEQ_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, UopSplitType.VEC_VXM),
197e2695e90SzhanglyGit    VMSNE_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, UopSplitType.VEC_VXM),
198e2695e90SzhanglyGit    VMSLTU_VX     -> OPIVX(FuType.vialuF, VialuFixType.vmsltu_vv, F, T, F, UopSplitType.VEC_VXM),
199e2695e90SzhanglyGit    VMSLT_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmslt_vv, F, T, F, UopSplitType.VEC_VXM),
200e2695e90SzhanglyGit    VMSLEU_VX     -> OPIVX(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, UopSplitType.VEC_VXM),
201e2695e90SzhanglyGit    VMSLE_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, UopSplitType.VEC_VXM),
202e2695e90SzhanglyGit    VMSGTU_VX     -> OPIVX(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, UopSplitType.VEC_VXM),
203e2695e90SzhanglyGit    VMSGT_VX      -> OPIVX(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, UopSplitType.VEC_VXM),
20458c35d23Shuxuan0307
2057e79df6bSzhanglyGit    VSLL_VX       -> OPIVX(FuType.vialuF, VialuFixType.vsll_vv, T, F, F),
2067e79df6bSzhanglyGit    VSRL_VX       -> OPIVX(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F),
2077e79df6bSzhanglyGit    VSRA_VX       -> OPIVX(FuType.vialuF, VialuFixType.vsra_vv, T, F, F),
208e2695e90SzhanglyGit    VNSRL_WX      -> OPIVX(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, UopSplitType.VEC_WXV),
209e2695e90SzhanglyGit    VNSRA_WX      -> OPIVX(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, UopSplitType.VEC_WXV),
210f9cac32fSczw
2117e79df6bSzhanglyGit    VSADDU_VX     -> OPIVX(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T),
2127e79df6bSzhanglyGit    VSADD_VX      -> OPIVX(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T),
2137e79df6bSzhanglyGit    VSSUBU_VX     -> OPIVX(FuType.vialuF, VialuFixType.vssubu_vv, T, F, T),
2147e79df6bSzhanglyGit    VSSUB_VX      -> OPIVX(FuType.vialuF, VialuFixType.vssub_vv, T, F, T),
21558c35d23Shuxuan0307
21658c35d23Shuxuan0307
217*adf68ff3Sczw    VSMUL_VX      -> OPIVX(FuType.vimac, VimacType.vsmul, T, F, T, UopSplitType.VEC_VVV),
21858c35d23Shuxuan0307
2197e79df6bSzhanglyGit    VSSRL_VX      -> OPIVX(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F),
2207e79df6bSzhanglyGit    VSSRA_VX      -> OPIVX(FuType.vialuF, VialuFixType.vssra_vv, T, F, F),
22158c35d23Shuxuan0307
222e2695e90SzhanglyGit    VNCLIPU_WX    -> OPIVX(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, UopSplitType.VEC_WXV),
223e2695e90SzhanglyGit    VNCLIP_WX     -> OPIVX(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, UopSplitType.VEC_WXV),
22458c35d23Shuxuan0307  )
22558c35d23Shuxuan0307
226b65b9ebaSXuan Hu  val opivi: Array[(BitPat, XSDecodeBase)] = Array(
2272f2537e9Sczw    VADD_VI       -> OPIVI(FuType.vialuF, VialuFixType.vadd_vv,   T, F, F),
2282f2537e9Sczw    VRSUB_VI      -> OPIVI(FuType.vialuF, VialuFixType.vrsub_vv, T, F, F),
22958c35d23Shuxuan0307
2302f2537e9Sczw    VAND_VI       -> OPIVI(FuType.vialuF, VialuFixType.vand_vv, T, F, F),
2312f2537e9Sczw    VOR_VI        -> OPIVI(FuType.vialuF, VialuFixType.vor_vv, T, F, F),
2322f2537e9Sczw    VXOR_VI       -> OPIVI(FuType.vialuF, VialuFixType.vxor_vv, T, F, F),
23358c35d23Shuxuan0307
234e2695e90SzhanglyGit    VRGATHER_VI   -> OPIVI(FuType.vppu, VpermType.vrgather, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_RGATHER),
23558c35d23Shuxuan0307
236e2695e90SzhanglyGit    VSLIDEUP_VI   -> OPIVI(FuType.vppu, VpermType.vslideup, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_ISLIDEUP),
237e2695e90SzhanglyGit    VSLIDEDOWN_VI -> OPIVI(FuType.vppu, VpermType.vslidedown, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_ISLIDEDOWN),
23858c35d23Shuxuan0307
2392f2537e9Sczw    VADC_VIM      -> OPIVI(FuType.vialuF, VialuFixType.vadc_vvm, T, F, F),
240e2695e90SzhanglyGit    VMADC_VIM     -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vvm, T, F, F, uopSplitType = UopSplitType.VEC_VVM),
241e2695e90SzhanglyGit    VMADC_VI      -> OPIVI(FuType.vialuF, VialuFixType.vmadc_vv, T, F, F, uopSplitType = UopSplitType.VEC_VVM),
24258c35d23Shuxuan0307
243de9e1949Sczw    VMERGE_VIM    -> OPIVI(FuType.vialuF, VialuFixType.vmerge_vvm, T, F, F),
24458c35d23Shuxuan0307
2452f2537e9Sczw    VMV_V_I    -> OPIVI(FuType.vialuF, VialuFixType.vmv_v_v, T, F, F),
24658c35d23Shuxuan0307
247e2695e90SzhanglyGit    VMSEQ_VI      -> OPIVI(FuType.vialuF, VialuFixType.vmseq_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM),
248e2695e90SzhanglyGit    VMSNE_VI      -> OPIVI(FuType.vialuF, VialuFixType.vmsne_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM),
249e2695e90SzhanglyGit    VMSLEU_VI     -> OPIVI(FuType.vialuF, VialuFixType.vmsleu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_VVM),
250e2695e90SzhanglyGit    VMSLE_VI      -> OPIVI(FuType.vialuF, VialuFixType.vmsle_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM),
251e2695e90SzhanglyGit    VMSGTU_VI     -> OPIVI(FuType.vialuF, VialuFixType.vmsgtu_vv, F, T, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_VVM),
252e2695e90SzhanglyGit    VMSGT_VI      -> OPIVI(FuType.vialuF, VialuFixType.vmsgt_vv, F, T, F, uopSplitType = UopSplitType.VEC_VVM),
25358c35d23Shuxuan0307
254de9e1949Sczw    VSLL_VI       -> OPIVI(FuType.vialuF, VialuFixType.vsll_vv, T, F, F, selImm = SelImm.IMM_OPIVIU),
255de9e1949Sczw    VSRL_VI       -> OPIVI(FuType.vialuF, VialuFixType.vsrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU),
256de9e1949Sczw    VSRA_VI       -> OPIVI(FuType.vialuF, VialuFixType.vsra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU),
257e2695e90SzhanglyGit    VNSRL_WI      -> OPIVI(FuType.vialuF, VialuFixType.vnsrl_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WVV),
258e2695e90SzhanglyGit    VNSRA_WI      -> OPIVI(FuType.vialuF, VialuFixType.vnsra_wv, T, F, F, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WVV),
25958c35d23Shuxuan0307
260de9e1949Sczw    VSADDU_VI     -> OPIVI(FuType.vialuF, VialuFixType.vsaddu_vv, T, F, T, selImm = SelImm.IMM_OPIVIU),
261de9e1949Sczw    VSADD_VI      -> OPIVI(FuType.vialuF, VialuFixType.vsadd_vv, T, F, T),
26258c35d23Shuxuan0307
263de9e1949Sczw    VSSRL_VI      -> OPIVI(FuType.vialuF, VialuFixType.vssrl_vv, T, F, F, selImm = SelImm.IMM_OPIVIU),
264de9e1949Sczw    VSSRA_VI      -> OPIVI(FuType.vialuF, VialuFixType.vssra_vv, T, F, F, selImm = SelImm.IMM_OPIVIU),
265f9cac32fSczw
266e2695e90SzhanglyGit    VNCLIPU_WI    -> OPIVI(FuType.vialuF, VialuFixType.vnclipu_wv, T, F, T, selImm = SelImm.IMM_OPIVIU, uopSplitType = UopSplitType.VEC_WVV),
267e2695e90SzhanglyGit    VNCLIP_WI     -> OPIVI(FuType.vialuF, VialuFixType.vnclip_wv, T, F, T, uopSplitType = UopSplitType.VEC_WVV),
26858c35d23Shuxuan0307
2692f2537e9Sczw    VMV1R_V       -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F),
2702f2537e9Sczw    VMV2R_V       -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F),
2712f2537e9Sczw    VMV4R_V       -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F),
2722f2537e9Sczw    VMV8R_V       -> OPIVI(FuType.vipu, VipuType.dummy, T, F, F),
27358c35d23Shuxuan0307  )
2747f2b7720SXuan Hu
275b65b9ebaSXuan Hu  val opmvv: Array[(BitPat, XSDecodeBase)] = Array(
276e2695e90SzhanglyGit    VAADD_VV     -> OPMVV(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VVV),
277e2695e90SzhanglyGit    VAADDU_VV    -> OPMVV(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VVV),
278e2695e90SzhanglyGit    VASUB_VV     -> OPMVV(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VVV),
279e2695e90SzhanglyGit    VASUBU_VV    -> OPMVV(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VVV),
280*adf68ff3Sczw    VCOMPRESS_VM -> OPMVV(T, FuType.vppu, VpermType.vcompress, F, T, F, UopSplitType.VEC_COMPRESS),
281e2695e90SzhanglyGit    VCPOP_M      -> OPMVV(T, FuType.vipu, VipuType.vcpop_m, T, F, F, UopSplitType.VEC_M0X),
2827e79df6bSzhanglyGit    VDIV_VV      -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F),
2837e79df6bSzhanglyGit    VDIVU_VV     -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F),
284e2695e90SzhanglyGit    VFIRST_M     -> OPMVV(T, FuType.vipu, VipuType.vfirst_m, T, F, F, UopSplitType.VEC_M0X_VFIRST),
285e2695e90SzhanglyGit    VID_V        -> OPMVV(T, FuType.vipu, VipuType.vid_v, F, T, F, UopSplitType.VEC_MVV),
286e2695e90SzhanglyGit    VIOTA_M      -> OPMVV(T, FuType.vipu, VipuType.viota_m, F, T, F, UopSplitType.VEC_MVV),
287b65b9ebaSXuan Hu
288*adf68ff3Sczw    VMACC_VV     -> OPMVV(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VVV),
289b65b9ebaSXuan Hu
290*adf68ff3Sczw    VMADD_VV     -> OPMVV(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VVV),
291e2695e90SzhanglyGit    VMAND_MM     -> OPMVV(T, FuType.vialuF, VialuFixType.vmand_mm, F, T, F, UopSplitType.VEC_MMM),
292e2695e90SzhanglyGit    VMANDN_MM    -> OPMVV(T, FuType.vialuF, VialuFixType.vmandn_mm, F, T, F, UopSplitType.VEC_MMM),
293e2695e90SzhanglyGit    VMNAND_MM    -> OPMVV(T, FuType.vialuF, VialuFixType.vmnand_mm, F, T, F, UopSplitType.VEC_MMM),
294e2695e90SzhanglyGit    VMNOR_MM     -> OPMVV(T, FuType.vialuF, VialuFixType.vmnor_mm, F, T, F, UopSplitType.VEC_MMM),
295e2695e90SzhanglyGit    VMOR_MM      -> OPMVV(T, FuType.vialuF, VialuFixType.vmor_mm, F, T, F, UopSplitType.VEC_MMM),
296e2695e90SzhanglyGit    VMORN_MM     -> OPMVV(T, FuType.vialuF, VialuFixType.vmorn_mm, F, T, F, UopSplitType.VEC_MMM),
297e2695e90SzhanglyGit    VMXNOR_MM    -> OPMVV(T, FuType.vialuF, VialuFixType.vmxnor_mm, F, T, F, UopSplitType.VEC_MMM),
298e2695e90SzhanglyGit    VMXOR_MM     -> OPMVV(T, FuType.vialuF, VialuFixType.vmxor_mm, F, T, F, UopSplitType.VEC_MMM),
299e2695e90SzhanglyGit    VMSBF_M      -> OPMVV(T, FuType.vipu, VipuType.vmsbf_m, F, T, F, UopSplitType.VEC_M0M),
300e2695e90SzhanglyGit    VMSIF_M      -> OPMVV(T, FuType.vipu, VipuType.vmsif_m, F, T, F, UopSplitType.VEC_M0M),
301e2695e90SzhanglyGit    VMSOF_M      -> OPMVV(T, FuType.vipu, VipuType.vmsof_m, F, T, F, UopSplitType.VEC_M0M),
302*adf68ff3Sczw    VMUL_VV      -> OPMVV(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VVV),
303*adf68ff3Sczw    VMULH_VV     -> OPMVV(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VVV),
304*adf68ff3Sczw    VMULHSU_VV   -> OPMVV(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VVV),
305*adf68ff3Sczw    VMULHU_VV    -> OPMVV(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VVV),
306b65b9ebaSXuan Hu
3077e79df6bSzhanglyGit    VMV_X_S      -> OPMVV(T, FuType.vipu, VipuType.dummy, T, F, F),
308*adf68ff3Sczw    VNMSAC_VV    -> OPMVV(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VVV),
309*adf68ff3Sczw    VNMSUB_VV    -> OPMVV(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VVV),
310e2695e90SzhanglyGit    VREDAND_VS   -> OPMVV(T, FuType.vipu, VipuType.vredand_vs, F, T, F, UopSplitType.VEC_VRED),
311e2695e90SzhanglyGit    VREDMAX_VS   -> OPMVV(T, FuType.vipu, VipuType.vredmax_vs, F, T, F, UopSplitType.VEC_VRED),
312e2695e90SzhanglyGit    VREDMAXU_VS  -> OPMVV(T, FuType.vipu, VipuType.vredmaxu_vs, F, T, F, UopSplitType.VEC_VRED),
313e2695e90SzhanglyGit    VREDMIN_VS   -> OPMVV(T, FuType.vipu, VipuType.vredmin_vs, F, T, F, UopSplitType.VEC_VRED),
314e2695e90SzhanglyGit    VREDMINU_VS  -> OPMVV(T, FuType.vipu, VipuType.vredminu_vs, F, T, F, UopSplitType.VEC_VRED),
315e2695e90SzhanglyGit    VREDOR_VS    -> OPMVV(T, FuType.vipu, VipuType.vredor_vs, F, T, F, UopSplitType.VEC_VRED),
316e2695e90SzhanglyGit    VREDSUM_VS   -> OPMVV(T, FuType.vipu, VipuType.vredsum_vs, F, T, F, UopSplitType.VEC_VRED),
317e2695e90SzhanglyGit    VREDXOR_VS   -> OPMVV(T, FuType.vipu, VipuType.vredxor_vs, F, T, F, UopSplitType.VEC_VRED),
3187e79df6bSzhanglyGit    VREM_VV      -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F),
3197e79df6bSzhanglyGit    VREMU_VV     -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F),
320e2695e90SzhanglyGit    VSEXT_VF2    -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf2, F, T, F, UopSplitType.VEC_EXT2),
321e2695e90SzhanglyGit    VSEXT_VF4    -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf4, F, T, F, UopSplitType.VEC_EXT4),
322e2695e90SzhanglyGit    VSEXT_VF8    -> OPMVV(T, FuType.vialuF, VialuFixType.vsext_vf8, F, T, F, UopSplitType.VEC_EXT8),
323e2695e90SzhanglyGit    VZEXT_VF2    -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf2, F, T, F, UopSplitType.VEC_EXT2),
324e2695e90SzhanglyGit    VZEXT_VF4    -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf4, F, T, F, UopSplitType.VEC_EXT4),
325e2695e90SzhanglyGit    VZEXT_VF8    -> OPMVV(T, FuType.vialuF, VialuFixType.vzext_vf8, F, T, F, UopSplitType.VEC_EXT8),
326e2695e90SzhanglyGit    VWADD_VV     -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VVW),
327e2695e90SzhanglyGit    VWADD_WV     -> OPMVV(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WVW),
328e2695e90SzhanglyGit    VWADDU_VV    -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VVW),
329e2695e90SzhanglyGit    VWADDU_WV    -> OPMVV(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WVW),
330*adf68ff3Sczw    VWMACC_VV    -> OPMVV(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VVW),
331*adf68ff3Sczw    VWMACCSU_VV  -> OPMVV(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VVW),
332*adf68ff3Sczw    VWMACCU_VV   -> OPMVV(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VVW),
333*adf68ff3Sczw    VWMUL_VV     -> OPMVV(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VVW),
334*adf68ff3Sczw    VWMULSU_VV   -> OPMVV(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VVW),
335*adf68ff3Sczw    VWMULU_VV    -> OPMVV(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VVW),
336e2695e90SzhanglyGit    VWSUB_VV     -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VVW),
337e2695e90SzhanglyGit    VWSUB_WV     -> OPMVV(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WVW),
338e2695e90SzhanglyGit    VWSUBU_VV    -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VVW),
339e2695e90SzhanglyGit    VWSUBU_WV    -> OPMVV(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WVW),
340c6661c33SHaojin Tang  )
341912e2179SXuan Hu
342b65b9ebaSXuan Hu  val opmvx: Array[(BitPat, XSDecodeBase)] = Array(
343e2695e90SzhanglyGit    VAADD_VX       -> OPMVX(T, FuType.vialuF, VialuFixType.vaadd_vv, F, T, F, UopSplitType.VEC_VXV),
344e2695e90SzhanglyGit    VAADDU_VX      -> OPMVX(T, FuType.vialuF, VialuFixType.vaaddu_vv, F, T, F, UopSplitType.VEC_VXV),
345e2695e90SzhanglyGit    VASUB_VX       -> OPMVX(T, FuType.vialuF, VialuFixType.vasub_vv, F, T, F, UopSplitType.VEC_VXV),
346e2695e90SzhanglyGit    VASUBU_VX      -> OPMVX(T, FuType.vialuF, VialuFixType.vasubu_vv, F, T, F, UopSplitType.VEC_VXV),
3477e79df6bSzhanglyGit    VDIV_VX        -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F),
3487e79df6bSzhanglyGit    VDIVU_VX       -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F),
349*adf68ff3Sczw    VMACC_VX       -> OPMVX(T, FuType.vimac, VimacType.vmacc, F, T, F, UopSplitType.VEC_VXV),
350*adf68ff3Sczw    VMADD_VX       -> OPMVX(T, FuType.vimac, VimacType.vmadd, F, T, F, UopSplitType.VEC_VXV),
351*adf68ff3Sczw    VMUL_VX        -> OPMVX(T, FuType.vimac, VimacType.vmul, F, T, F, UopSplitType.VEC_VXV),
352*adf68ff3Sczw    VMULH_VX       -> OPMVX(T, FuType.vimac, VimacType.vmulh, F, T, F, UopSplitType.VEC_VXV),
353*adf68ff3Sczw    VMULHSU_VX     -> OPMVX(T, FuType.vimac, VimacType.vmulhsu, F, T, F, UopSplitType.VEC_VXV),
354*adf68ff3Sczw    VMULHU_VX      -> OPMVX(T, FuType.vimac, VimacType.vmulhu, F, T, F, UopSplitType.VEC_VXV),
355e2695e90SzhanglyGit    VMV_S_X        -> OPMVX(T, FuType.vipu, VipuType.vmv_s_x, F, T, F, UopSplitType.VEC_0XV),
356b65b9ebaSXuan Hu
357*adf68ff3Sczw    VNMSAC_VX      -> OPMVX(T, FuType.vimac, VimacType.vnmsac, F, T, F, UopSplitType.VEC_VXV),
358*adf68ff3Sczw    VNMSUB_VX      -> OPMVX(T, FuType.vimac, VimacType.vnmsub, F, T, F, UopSplitType.VEC_VXV),
3597e79df6bSzhanglyGit    VREM_VX        -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F),
3607e79df6bSzhanglyGit    VREMU_VX       -> OPMVX(T, FuType.vipu, VipuType.dummy, F, T, F),
361b65b9ebaSXuan Hu
362e2695e90SzhanglyGit    VSLIDE1DOWN_VX -> OPMVX(T, FuType.vppu, VpermType.vslide1down, F, T, F, UopSplitType.VEC_SLIDE1DOWN),
363e2695e90SzhanglyGit    VSLIDE1UP_VX   -> OPMVX(T, FuType.vppu, VpermType.vslide1up, F, T, F, UopSplitType.VEC_SLIDE1UP),
364e2695e90SzhanglyGit    VWADD_VX       -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_vv, F, T, F, UopSplitType.VEC_VXW),
365e2695e90SzhanglyGit    VWADD_WX       -> OPMVX(T, FuType.vialuF, VialuFixType.vwadd_wv, F, T, F, UopSplitType.VEC_WXW),
366e2695e90SzhanglyGit    VWADDU_VX      -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_vv, F, T, F, UopSplitType.VEC_VXW),
367e2695e90SzhanglyGit    VWADDU_WX      -> OPMVX(T, FuType.vialuF, VialuFixType.vwaddu_wv, F, T, F, UopSplitType.VEC_WXW),
368b65b9ebaSXuan Hu
369b65b9ebaSXuan Hu    // OutOfMemoryError
370*adf68ff3Sczw    VWMACC_VX      -> OPMVX(T, FuType.vimac, VimacType.vwmacc, F, T, F, UopSplitType.VEC_VXW),
371*adf68ff3Sczw    VWMACCSU_VX    -> OPMVX(T, FuType.vimac, VimacType.vwmaccsu, F, T, F, UopSplitType.VEC_VXW),
372*adf68ff3Sczw    VWMACCU_VX     -> OPMVX(T, FuType.vimac, VimacType.vwmaccu, F, T, F, UopSplitType.VEC_VXW),
373b65b9ebaSXuan Hu
374*adf68ff3Sczw    VWMACCUS_VX    -> OPMVX(T, FuType.vimac, VimacType.vwmaccus, F, T, F, UopSplitType.VEC_VXW),
375*adf68ff3Sczw    VWMUL_VX       -> OPMVX(T, FuType.vimac, VimacType.vwmul, F, T, F, UopSplitType.VEC_VXW),
376*adf68ff3Sczw    VWMULSU_VX     -> OPMVX(T, FuType.vimac, VimacType.vwmulsu, F, T, F, UopSplitType.VEC_VXW),
377b65b9ebaSXuan Hu    // Ok
378*adf68ff3Sczw    VWMULU_VX      -> OPMVX(T, FuType.vimac, VimacType.vwmulu, F, T, F, UopSplitType.VEC_VXW),
379e2695e90SzhanglyGit    VWSUB_VX       -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_vv, F, T, F, UopSplitType.VEC_VXW),
380e2695e90SzhanglyGit    VWSUB_WX       -> OPMVX(T, FuType.vialuF, VialuFixType.vwsub_wv, F, T, F, UopSplitType.VEC_WXW),
381e2695e90SzhanglyGit    VWSUBU_VX      -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_vv, F, T, F, UopSplitType.VEC_VXW),
382e2695e90SzhanglyGit    VWSUBU_WX      -> OPMVX(T, FuType.vialuF, VialuFixType.vwsubu_wv, F, T, F, UopSplitType.VEC_WXW),
383c6661c33SHaojin Tang  )
3847f2b7720SXuan Hu
385b65b9ebaSXuan Hu  val opfvv: Array[(BitPat, XSDecodeBase)] = Array(
386b448988dSczw    // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
38740767ba3Sxiaofeibao-xjtu    VFADD_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F),
38840767ba3Sxiaofeibao-xjtu    VFSUB_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F),
389b448988dSczw
390b448988dSczw    // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
39140767ba3Sxiaofeibao-xjtu    VFWADD_VV          -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F),
39240767ba3Sxiaofeibao-xjtu    VFWSUB_VV          -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F),
39340767ba3Sxiaofeibao-xjtu    VFWADD_WV          -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F),
39440767ba3Sxiaofeibao-xjtu    VFWSUB_WV          -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F),
395b448988dSczw
396b448988dSczw    // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
39740767ba3Sxiaofeibao-xjtu    VFMUL_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmul, F, T, F),
39840767ba3Sxiaofeibao-xjtu    VFDIV_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfdiv , F, T, F),
399b448988dSczw
400b448988dSczw    // 13.5. Vector Widening Floating-Point Multiply
40140767ba3Sxiaofeibao-xjtu    VFWMUL_VV          -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmul, F, T, F),
402b448988dSczw
403b448988dSczw    // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
40440767ba3Sxiaofeibao-xjtu    VFMACC_VV          -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmacc , F, T, F),
40540767ba3Sxiaofeibao-xjtu    VFNMACC_VV         -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmacc, F, T, F),
40640767ba3Sxiaofeibao-xjtu    VFMSAC_VV          -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmsac , F, T, F),
40740767ba3Sxiaofeibao-xjtu    VFNMSAC_VV         -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmsac, F, T, F),
40840767ba3Sxiaofeibao-xjtu    VFMADD_VV          -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmadd , F, T, F),
40940767ba3Sxiaofeibao-xjtu    VFNMADD_VV         -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmadd, F, T, F),
41040767ba3Sxiaofeibao-xjtu    VFMSUB_VV          -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmsub , F, T, F),
41140767ba3Sxiaofeibao-xjtu    VFNMSUB_VV         -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmsub, F, T, F),
412b448988dSczw
413b448988dSczw    // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
41440767ba3Sxiaofeibao-xjtu    VFWMACC_VV         -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmacc , F, T, F),
41540767ba3Sxiaofeibao-xjtu    VFWNMACC_VV        -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmacc, F, T, F),
41640767ba3Sxiaofeibao-xjtu    VFWMSAC_VV         -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfmsac , F, T, F),
41740767ba3Sxiaofeibao-xjtu    VFWNMSAC_VV        -> OPFVV(SrcType.vp, SrcType.vp, FuType.vfpu, VfpuType.vfnmsac, F, T, F),
418b448988dSczw
419b448988dSczw    // 13.8. Vector Floating-Point Square-Root Instruction
420912e2179SXuan Hu    VFSQRT_V           -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
421b448988dSczw
422b448988dSczw    // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
423912e2179SXuan Hu    VFRSQRT7_V         -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
424b448988dSczw
425b448988dSczw    // 13.10. Vector Floating-Point Reciprocal Estimate Instruction
426912e2179SXuan Hu    VFREC7_V           -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
427b448988dSczw
428b448988dSczw    // 13.11. Vector Floating-Point MIN/MAX Instructions
42940767ba3Sxiaofeibao-xjtu    VFMIN_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmin, F, T, F),
43040767ba3Sxiaofeibao-xjtu    VFMAX_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmax, F, T, F),
431b448988dSczw
432b448988dSczw    // 13.12. Vector Floating-Point Sign-Injection Instructions
43340767ba3Sxiaofeibao-xjtu    VFSGNJ_VV          -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsgnj , F, T, F),
43440767ba3Sxiaofeibao-xjtu    VFSGNJN_VV         -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsgnjn, F, T, F),
43540767ba3Sxiaofeibao-xjtu    VFSGNJX_VV         -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfsgnjx, F, T, F),
436b448988dSczw
437b448988dSczw    // 13.13. Vector Floating-Point Compare Instructions
43840767ba3Sxiaofeibao-xjtu    VMFEQ_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfeq, F, T, F),
43940767ba3Sxiaofeibao-xjtu    VMFNE_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfne, F, T, F),
44040767ba3Sxiaofeibao-xjtu    VMFLT_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vflt, F, T, F),
44140767ba3Sxiaofeibao-xjtu    VMFLE_VV           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfle, F, T, F),
442b448988dSczw
443b448988dSczw    // 13.14. Vector Floating-Point Classify Instruction
44440767ba3Sxiaofeibao-xjtu    VFCLASS_V          -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.fclass, F, T, F),
445b448988dSczw
446b448988dSczw    // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
447912e2179SXuan Hu    VFCVT_XU_F_V       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
448912e2179SXuan Hu    VFCVT_X_F_V        -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
449912e2179SXuan Hu    VFCVT_RTZ_XU_F_V   -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
450912e2179SXuan Hu    VFCVT_RTZ_X_F_V    -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
451912e2179SXuan Hu    VFCVT_F_XU_V       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
452912e2179SXuan Hu    VFCVT_F_X_V        -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
453b448988dSczw
454b448988dSczw    // 13.18. Widening Floating-Point/Integer Type-Convert Instructions
455912e2179SXuan Hu    VFWCVT_XU_F_V      -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
456912e2179SXuan Hu    VFWCVT_X_F_V       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
457912e2179SXuan Hu    VFWCVT_RTZ_XU_F_V  -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
458912e2179SXuan Hu    VFWCVT_RTZ_X_F_V   -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
459912e2179SXuan Hu    VFWCVT_F_XU_V      -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
460912e2179SXuan Hu    VFWCVT_F_X_V       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
461912e2179SXuan Hu    VFWCVT_F_F_V       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
462b448988dSczw
463b65b9ebaSXuan Hu    // !
464b448988dSczw    // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
465912e2179SXuan Hu    VFNCVT_XU_F_W      -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
466912e2179SXuan Hu    VFNCVT_X_F_W       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
467912e2179SXuan Hu    VFNCVT_RTZ_XU_F_W  -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
468912e2179SXuan Hu    VFNCVT_RTZ_X_F_W   -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
469912e2179SXuan Hu    VFNCVT_F_XU_W      -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
470912e2179SXuan Hu    VFNCVT_F_X_W       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
471912e2179SXuan Hu    VFNCVT_F_F_W       -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
472912e2179SXuan Hu    VFNCVT_ROD_F_F_W   -> OPFVV(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
473b448988dSczw
474b448988dSczw    // 14.3. Vector Single-Width Floating-Point Reduction Instructions
475912e2179SXuan Hu    VFREDOSUM_VS       -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
476912e2179SXuan Hu    VFREDUSUM_VS       -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
477912e2179SXuan Hu    VFREDMAX_VS        -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
478912e2179SXuan Hu    VFREDMIN_VS        -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
479b448988dSczw
480b448988dSczw    // 14.4. Vector Widening Floating-Point Reduction Instructions
481912e2179SXuan Hu    VFWREDOSUM_VS      -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
482912e2179SXuan Hu    VFWREDUSUM_VS      -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
483b448988dSczw
484b448988dSczw    // 16.2. Floating-Point Scalar Move Instructions
48540767ba3Sxiaofeibao-xjtu    VFMV_F_S           -> OPFVV(SrcType.vp, SrcType.X , FuType.vfpu, VfpuType.vfmove, F, T, F),// f[rd] = vs2[0] (rs1=0)
486b448988dSczw  )
4877f2b7720SXuan Hu
488b65b9ebaSXuan Hu  val opfvf: Array[(BitPat, XSDecodeBase)] = Array(
489b448988dSczw    // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
49040767ba3Sxiaofeibao-xjtu    VFADD_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfadd, F, T, F),
49140767ba3Sxiaofeibao-xjtu    VFSUB_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfsub, F, T, F),
492912e2179SXuan Hu    VFRSUB_VF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
493b448988dSczw
494b448988dSczw    // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
495912e2179SXuan Hu    VFWADD_VF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
496912e2179SXuan Hu    VFWSUB_VF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
497912e2179SXuan Hu    VFWADD_WF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
498912e2179SXuan Hu    VFWSUB_WF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
499b448988dSczw
500b448988dSczw    // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
501912e2179SXuan Hu    VFMUL_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
50240767ba3Sxiaofeibao-xjtu    VFDIV_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfdiv, F, T, F),
503912e2179SXuan Hu    VFRDIV_VF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
504b448988dSczw
505b448988dSczw    // 13.5. Vector Widening Floating-Point Multiply
506912e2179SXuan Hu    VFWMUL_VF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
507b448988dSczw
508b448988dSczw    // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
50940767ba3Sxiaofeibao-xjtu    VFMACC_VF          -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.vfmacc, F, T, F),
510912e2179SXuan Hu    VFNMACC_VF         -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
511912e2179SXuan Hu    VFMSAC_VF          -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
512912e2179SXuan Hu    VFNMSAC_VF         -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
513912e2179SXuan Hu    VFMADD_VF          -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
514912e2179SXuan Hu    VFNMADD_VF         -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
515912e2179SXuan Hu    VFMSUB_VF          -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
516912e2179SXuan Hu    VFNMSUB_VF         -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
517b448988dSczw
518b448988dSczw    // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
519912e2179SXuan Hu    VFWMACC_VF         -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
520912e2179SXuan Hu    VFWNMACC_VF        -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
521912e2179SXuan Hu    VFWMSAC_VF         -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
522912e2179SXuan Hu    VFWNMSAC_VF        -> OPFVF(SrcType.fp, SrcType.vp, FuType.vfpu, VfpuType.dummy, F, T, F),
523b448988dSczw
524b448988dSczw    // 13.11. Vector Floating-Point MIN/MAX Instructions
52540767ba3Sxiaofeibao-xjtu    VFMIN_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfmin, F, T, F),
52640767ba3Sxiaofeibao-xjtu    VFMAX_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.vfmax, F, T, F),
527b448988dSczw
528b448988dSczw    // 13.12. Vector Floating-Point Sign-Injection Instructions
529912e2179SXuan Hu    VFSGNJ_VF          -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
530912e2179SXuan Hu    VFSGNJN_VF         -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
531912e2179SXuan Hu    VFSGNJX_VF         -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
532b448988dSczw
533b448988dSczw    // 13.13. Vector Floating-Point Compare Instructions
534912e2179SXuan Hu    VMFEQ_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T),
535912e2179SXuan Hu    VMFNE_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T),
536912e2179SXuan Hu    VMFLT_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T),
537912e2179SXuan Hu    VMFLE_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T),
538912e2179SXuan Hu    VMFGT_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T),
539912e2179SXuan Hu    VMFGE_VF           -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, F, T),
540b448988dSczw
541b448988dSczw    // 13.15. Vector Floating-Point Merge Instruction
542912e2179SXuan Hu    VFMERGE_VFM        -> OPFVF(SrcType.fp, SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),
543b448988dSczw
544b448988dSczw    // 13.16. Vector Floating-Point Move Instruction
545912e2179SXuan Hu    VFMV_V_F           -> OPFVF(SrcType.X , SrcType.X , FuType.vfpu, VfpuType.dummy, F, T, F),// src2=SrcType.X
546b448988dSczw
547b448988dSczw    // 16.2. Floating-Point Scalar Move Instructions
548de9e1949Sczw    VFMV_S_F           -> OPFVF(SrcType.fp, SrcType.vp, FuType.vppu, VpermType.vfmv_s_f, F, T, F),// vs2=0 // vs3 = vd
549b448988dSczw
550b448988dSczw    // 16.3.3. Vector Slide1up
551e2695e90SzhanglyGit    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]
552b448988dSczw
553b448988dSczw    // 16.3.4. Vector Slide1down Instruction
554b448988dSczw    // vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1]
555e2695e90SzhanglyGit    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]
5567f2b7720SXuan Hu  )
5577f2b7720SXuan Hu
558b65b9ebaSXuan Hu  val vset: Array[(BitPat, XSDecodeBase)] = Array(
5594aa9ed34Sfdy    VSETVLI   -> VSET(F, T, ALUOpType.vsetvli1,  F, SelImm.IMM_VSETVLI),
5604aa9ed34Sfdy    VSETIVLI  -> VSET(T, T, ALUOpType.vsetivli1, F, SelImm.IMM_VSETIVLI),
5614aa9ed34Sfdy    VSETVL    -> VSET(F, F, ALUOpType.vsetvl1,   T, SelImm.X), // flush pipe
562912e2179SXuan Hu  )
5637f2b7720SXuan Hu
564b65b9ebaSXuan Hu  val vls: Array[(BitPat, XSDecodeBase)] = Array(
565912e2179SXuan Hu    // 7.4. Vector Unit-Stride Instructions
566912e2179SXuan Hu    VLE8_V        -> VLD(SrcType.X,   VlduType.dummy),
567912e2179SXuan Hu    VLE16_V       -> VLD(SrcType.X,   VlduType.dummy),
568912e2179SXuan Hu    VLE32_V       -> VLD(SrcType.X,   VlduType.dummy),
569912e2179SXuan Hu    VLE64_V       -> VLD(SrcType.X,   VlduType.dummy),
570912e2179SXuan Hu    VSE8_V        -> VST(SrcType.X,   VstuType.dummy),
571912e2179SXuan Hu    VSE16_V       -> VST(SrcType.X,   VstuType.dummy),
572912e2179SXuan Hu    VSE32_V       -> VST(SrcType.X,   VstuType.dummy),
573912e2179SXuan Hu    VSE64_V       -> VST(SrcType.X,   VstuType.dummy),
574912e2179SXuan Hu    VLM_V         -> VLD(SrcType.X,   VlduType.dummy, mask = T),
575912e2179SXuan Hu    VSM_V         -> VST(SrcType.X,   VstuType.dummy, mask = T),
576912e2179SXuan Hu    // 7.5. Vector Strided Instructions
577912e2179SXuan Hu    VLSE8_V       -> VLD(SrcType.xp,  VlduType.dummy, strided = T),
578912e2179SXuan Hu    VLSE16_V      -> VLD(SrcType.xp,  VlduType.dummy, strided = T),
579912e2179SXuan Hu    VLSE32_V      -> VLD(SrcType.xp,  VlduType.dummy, strided = T),
580912e2179SXuan Hu    VLSE64_V      -> VLD(SrcType.xp,  VlduType.dummy, strided = T),
581912e2179SXuan Hu    VSSE8_V       -> VST(SrcType.xp,  VstuType.dummy, strided = T),
582912e2179SXuan Hu    VSSE16_V      -> VST(SrcType.xp,  VstuType.dummy, strided = T),
583912e2179SXuan Hu    VSSE32_V      -> VST(SrcType.xp,  VstuType.dummy, strided = T),
584912e2179SXuan Hu    VSSE64_V      -> VST(SrcType.xp,  VstuType.dummy, strided = T),
585912e2179SXuan Hu    // 7.6. Vector Indexed Instructions
586912e2179SXuan Hu    VLUXEI8_V     -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = F),
587912e2179SXuan Hu    VLUXEI16_V    -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = F),
588912e2179SXuan Hu    VLUXEI32_V    -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = F),
589912e2179SXuan Hu    VLUXEI64_V    -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = F),
590912e2179SXuan Hu    VLOXEI8_V     -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = T),
591912e2179SXuan Hu    VLOXEI16_V    -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = T),
592912e2179SXuan Hu    VLOXEI32_V    -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = T),
593912e2179SXuan Hu    VLOXEI64_V    -> VLD(SrcType.vp,  VlduType.dummy, indexed = T, ordered = T),
594912e2179SXuan Hu    VSUXEI8_V     -> VLD(SrcType.vp,  VstuType.dummy, indexed = T, ordered = F),
595912e2179SXuan Hu    VSUXEI16_V    -> VST(SrcType.vp,  VstuType.dummy, indexed = T, ordered = F),
596912e2179SXuan Hu    VSUXEI32_V    -> VST(SrcType.vp,  VstuType.dummy, indexed = T, ordered = F),
597912e2179SXuan Hu    VSUXEI64_V    -> VST(SrcType.vp,  VstuType.dummy, indexed = T, ordered = F),
598912e2179SXuan Hu    VSOXEI8_V     -> VST(SrcType.vp,  VstuType.dummy, indexed = T, ordered = T),
599912e2179SXuan Hu    VSOXEI16_V    -> VST(SrcType.vp,  VstuType.dummy, indexed = T, ordered = T),
600912e2179SXuan Hu    VSOXEI32_V    -> VST(SrcType.vp,  VstuType.dummy, indexed = T, ordered = T),
601912e2179SXuan Hu    VSOXEI64_V    -> VST(SrcType.vp,  VstuType.dummy, indexed = T, ordered = T),
602912e2179SXuan Hu    // 7.7. Unit-stride Fault-Only-First Loads
603912e2179SXuan Hu    VLE8FF_V      -> VLD(SrcType.X,   VlduType.dummy, ff = T),
604912e2179SXuan Hu    VLE16FF_V     -> VLD(SrcType.X,   VlduType.dummy, ff = T),
605912e2179SXuan Hu    VLE32FF_V     -> VLD(SrcType.X,   VlduType.dummy, ff = T),
606912e2179SXuan Hu    VLE64FF_V     -> VLD(SrcType.X,   VlduType.dummy, ff = T),
607912e2179SXuan Hu    // 7.8. Vector Load/Store Segment Instructions
608912e2179SXuan Hu    // 7.8.1. Vector Unit-Stride Segment Loads and Stores
609912e2179SXuan Hu    // TODO
610912e2179SXuan Hu    // 7.8.2. Vector Strided Segment Loads and Stores
611912e2179SXuan Hu    // TODO
612912e2179SXuan Hu    // 7.8.3. Vector Indexed Segment Loads and Stores
613912e2179SXuan Hu    // TODO
614912e2179SXuan Hu    // 7.9. Vector Load/Store Whole Register Instructions
615912e2179SXuan Hu    VL1RE8_V      -> VLD(SrcType.X,   VlduType.dummy, whole = T),
616912e2179SXuan Hu    VL1RE16_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
617912e2179SXuan Hu    VL1RE32_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
618912e2179SXuan Hu    VL1RE64_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
619912e2179SXuan Hu    VL2RE8_V      -> VLD(SrcType.X,   VlduType.dummy, whole = T),
620912e2179SXuan Hu    VL2RE16_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
621912e2179SXuan Hu    VL2RE32_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
622912e2179SXuan Hu    VL2RE64_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
623912e2179SXuan Hu    VL4RE8_V      -> VLD(SrcType.X,   VlduType.dummy, whole = T),
624912e2179SXuan Hu    VL4RE16_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
625912e2179SXuan Hu    VL4RE32_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
626912e2179SXuan Hu    VL4RE64_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
627912e2179SXuan Hu    VL8RE8_V      -> VLD(SrcType.X,   VlduType.dummy, whole = T),
628912e2179SXuan Hu    VL8RE16_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
629912e2179SXuan Hu    VL8RE32_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
630912e2179SXuan Hu    VL8RE64_V     -> VLD(SrcType.X,   VlduType.dummy, whole = T),
631912e2179SXuan Hu    VS1R_V        -> VST(SrcType.X,   VlduType.dummy, whole = T),
632912e2179SXuan Hu    VS2R_V        -> VST(SrcType.X,   VlduType.dummy, whole = T),
633912e2179SXuan Hu    VS4R_V        -> VST(SrcType.X,   VlduType.dummy, whole = T),
634912e2179SXuan Hu    VS8R_V        -> VST(SrcType.X,   VlduType.dummy, whole = T),
635912e2179SXuan Hu  )
636912e2179SXuan Hu
637b65b9ebaSXuan Hu  override val decodeArray: Array[(BitPat, XSDecodeBase)] = vset ++ vls ++
638b65b9ebaSXuan Hu    opivv ++ opivx ++ opivi ++ opmvv ++ opmvx ++ opfvv ++ opfvf
6397f2b7720SXuan Hu}
640