public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] add opcode for xtheadv
@ 2023-11-08 13:28 chenyixuan
  2023-11-09  7:28 ` Jan Beulich
  2023-11-09 10:18 ` Christoph Müllner
  0 siblings, 2 replies; 4+ messages in thread
From: chenyixuan @ 2023-11-08 13:28 UTC (permalink / raw)
  To: binutils; +Cc: kito.cheng, shiyulong, oriachiuan, shihua, jiawei

From: XYenChi <oriachiuan@gmail.com>

Add xtheadv opcode and minimal support.

bfd/ChangeLog:

2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>

        * elfxx-riscv.c (riscv_parse_check_conflicts):Add xtheadv.
        (riscv_multi_subset_supports):Add xtheadv.
        (riscv_multi_subset_supports_ext):Add xtheadv.

gas/ChangeLog:

2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>

        * config/tc-riscv.c (my_getVsetvliExpression):Add xtheadv special vetvl with vediv.

include/ChangeLog:

2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>

        * opcode/riscv-opc.h (MATCH_VLBV): xtheadv opcodes.
        (MASK_VLBV):
        (MATCH_VLHV):
        (MASK_VLHV):
        (MATCH_VLWV):
        (MASK_VLWV):
        (MATCH_VLSBV):
        (MASK_VLSBV):
        (MATCH_VLSHV):
        (MASK_VLSHV):
        (MATCH_VLSWV):
        (MASK_VLSWV):
        (MATCH_VLXBV):
        (MASK_VLXBV):
        (MATCH_VLXHV):
        (MASK_VLXHV):
        (MATCH_VLXWV):
        (MASK_VLXWV):
        (MATCH_VSUXBV):
        (MASK_VSUXBV):
        (MATCH_VSUXHV):
        (MASK_VSUXHV):
        (MATCH_VSUXWV):
        (MASK_VSUXWV):
        (MATCH_VSUXEV):
        (MASK_VSUXEV):
        (MATCH_VLBFFV):
        (MASK_VLBFFV):
        (MATCH_VLHFFV):
        (MASK_VLHFFV):
        (MATCH_VLWFFV):
        (MASK_VLWFFV):
        (MATCH_VLSEG2BV):
        (MASK_VLSEG2BV):
        (MATCH_VLSEG2HV):
        (MASK_VLSEG2HV):
        (MATCH_VLSEG2WV):
        (MASK_VLSEG2WV):
        (MATCH_VLSEG3BV):
        (MASK_VLSEG3BV):
        (MATCH_VLSEG3HV):
        (MASK_VLSEG3HV):
        (MATCH_VLSEG3WV):
        (MASK_VLSEG3WV):
        (MATCH_VLSEG4BV):
        (MASK_VLSEG4BV):
        (MATCH_VLSEG4HV):
        (MASK_VLSEG4HV):
        (MATCH_VLSEG4WV):
        (MASK_VLSEG4WV):
        (MATCH_VLSEG5BV):
        (MASK_VLSEG5BV):
        (MATCH_VLSEG5HV):
        (MASK_VLSEG5HV):
        (MATCH_VLSEG5WV):
        (MASK_VLSEG5WV):
        (MATCH_VLSEG6BV):
        (MASK_VLSEG6BV):
        (MATCH_VLSEG6HV):
        (MASK_VLSEG6HV):
        (MATCH_VLSEG6WV):
        (MASK_VLSEG6WV):
        (MATCH_VLSEG7BV):
        (MASK_VLSEG7BV):
        (MATCH_VLSEG7HV):
        (MASK_VLSEG7HV):
        (MATCH_VLSEG7WV):
        (MASK_VLSEG7WV):
        (MATCH_VLSEG8BV):
        (MASK_VLSEG8BV):
        (MATCH_VLSEG8HV):
        (MASK_VLSEG8HV):
        (MATCH_VLSEG8WV):
        (MASK_VLSEG8WV):
        (MATCH_VLSSEG2BV):
        (MASK_VLSSEG2BV):
        (MATCH_VLSSEG2HV):
        (MASK_VLSSEG2HV):
        (MATCH_VLSSEG2WV):
        (MASK_VLSSEG2WV):
        (MATCH_VLSSEG3BV):
        (MASK_VLSSEG3BV):
        (MATCH_VLSSEG3HV):
        (MASK_VLSSEG3HV):
        (MATCH_VLSSEG3WV):
        (MASK_VLSSEG3WV):
        (MATCH_VLSSEG4BV):
        (MASK_VLSSEG4BV):
        (MATCH_VLSSEG4HV):
        (MASK_VLSSEG4HV):
        (MATCH_VLSSEG4WV):
        (MASK_VLSSEG4WV):
        (MATCH_VLSSEG5BV):
        (MASK_VLSSEG5BV):
        (MATCH_VLSSEG5HV):
        (MASK_VLSSEG5HV):
        (MATCH_VLSSEG5WV):
        (MASK_VLSSEG5WV):
        (MATCH_VLSSEG6BV):
        (MASK_VLSSEG6BV):
        (MATCH_VLSSEG6HV):
        (MASK_VLSSEG6HV):
        (MATCH_VLSSEG6WV):
        (MASK_VLSSEG6WV):
        (MATCH_VLSSEG7BV):
        (MASK_VLSSEG7BV):
        (MATCH_VLSSEG7HV):
        (MASK_VLSSEG7HV):
        (MATCH_VLSSEG7WV):
        (MASK_VLSSEG7WV):
        (MATCH_VLSSEG8BV):
        (MASK_VLSSEG8BV):
        (MATCH_VLSSEG8HV):
        (MASK_VLSSEG8HV):
        (MATCH_VLSSEG8WV):
        (MASK_VLSSEG8WV):
        (MATCH_VLXSEG2BV):
        (MASK_VLXSEG2BV):
        (MATCH_VLXSEG2HV):
        (MASK_VLXSEG2HV):
        (MATCH_VLXSEG2WV):
        (MASK_VLXSEG2WV):
        (MATCH_VLXSEG3BV):
        (MASK_VLXSEG3BV):
        (MATCH_VLXSEG3HV):
        (MASK_VLXSEG3HV):
        (MATCH_VLXSEG3WV):
        (MASK_VLXSEG3WV):
        (MATCH_VLXSEG4BV):
        (MASK_VLXSEG4BV):
        (MATCH_VLXSEG4HV):
        (MASK_VLXSEG4HV):
        (MATCH_VLXSEG4WV):
        (MASK_VLXSEG4WV):
        (MATCH_VLXSEG5BV):
        (MASK_VLXSEG5BV):
        (MATCH_VLXSEG5HV):
        (MASK_VLXSEG5HV):
        (MATCH_VLXSEG5WV):
        (MASK_VLXSEG5WV):
        (MATCH_VLXSEG6BV):
        (MASK_VLXSEG6BV):
        (MATCH_VLXSEG6HV):
        (MASK_VLXSEG6HV):
        (MATCH_VLXSEG6WV):
        (MASK_VLXSEG6WV):
        (MATCH_VLXSEG7BV):
        (MASK_VLXSEG7BV):
        (MATCH_VLXSEG7HV):
        (MASK_VLXSEG7HV):
        (MATCH_VLXSEG7WV):
        (MASK_VLXSEG7WV):
        (MATCH_VLXSEG8BV):
        (MASK_VLXSEG8BV):
        (MATCH_VLXSEG8HV):
        (MASK_VLXSEG8HV):
        (MATCH_VLXSEG8WV):
        (MASK_VLXSEG8WV):
        (MATCH_VLSEG2BFFV):
        (MASK_VLSEG2BFFV):
        (MATCH_VLSEG2HFFV):
        (MASK_VLSEG2HFFV):
        (MATCH_VLSEG2WFFV):
        (MASK_VLSEG2WFFV):
        (MATCH_VLSEG3BFFV):
        (MASK_VLSEG3BFFV):
        (MATCH_VLSEG3HFFV):
        (MASK_VLSEG3HFFV):
        (MATCH_VLSEG3WFFV):
        (MASK_VLSEG3WFFV):
        (MATCH_VLSEG4BFFV):
        (MASK_VLSEG4BFFV):
        (MATCH_VLSEG4HFFV):
        (MASK_VLSEG4HFFV):
        (MATCH_VLSEG4WFFV):
        (MASK_VLSEG4WFFV):
        (MATCH_VLSEG5BFFV):
        (MASK_VLSEG5BFFV):
        (MATCH_VLSEG5HFFV):
        (MASK_VLSEG5HFFV):
        (MATCH_VLSEG5WFFV):
        (MASK_VLSEG5WFFV):
        (MATCH_VLSEG6BFFV):
        (MASK_VLSEG6BFFV):
        (MATCH_VLSEG6HFFV):
        (MASK_VLSEG6HFFV):
        (MATCH_VLSEG6WFFV):
        (MASK_VLSEG6WFFV):
        (MATCH_VLSEG7BFFV):
        (MASK_VLSEG7BFFV):
        (MATCH_VLSEG7HFFV):
        (MASK_VLSEG7HFFV):
        (MATCH_VLSEG7WFFV):
        (MASK_VLSEG7WFFV):
        (MATCH_VLSEG8BFFV):
        (MASK_VLSEG8BFFV):
        (MATCH_VLSEG8HFFV):
        (MASK_VLSEG8HFFV):
        (MATCH_VLSEG8WFFV):
        (MASK_VLSEG8WFFV):
        (MATCH_VNSRLVV):
        (MASK_VNSRLVV):
        (MATCH_VNSRLVX):
        (MASK_VNSRLVX):
        (MATCH_VNSRLVI):
        (MASK_VNSRLVI):
        (MATCH_VNSRAVV):
        (MASK_VNSRAVV):
        (MATCH_VNSRAVX):
        (MASK_VNSRAVX):
        (MATCH_VNSRAVI):
        (MASK_VNSRAVI):
        (MATCH_VWMACCSUVV_ZV):
        (MASK_VWMACCSUVV_ZV):
        (MATCH_VWMACCSUVX_ZV):
        (MASK_VWMACCSUVX_ZV):
        (MATCH_VWMACCUSVX_ZV):
        (MASK_VWMACCUSVX_ZV):
        (MATCH_VAADDVV_ZV):
        (MASK_VAADDVV_ZV):
        (MATCH_VAADDVX_ZV):
        (MASK_VAADDVX_ZV):
        (MATCH_VAADDVI):
        (MASK_VAADDVI):
        (MATCH_VASUBVV_ZV):
        (MASK_VASUBVV_ZV):
        (MATCH_VASUBVX_ZV):
        (MASK_VASUBVX_ZV):
        (MATCH_VWSMACCUVV):
        (MASK_VWSMACCUVV):
        (MATCH_VWSMACCUVX):
        (MASK_VWSMACCUVX):
        (MATCH_VWSMACCVV):
        (MASK_VWSMACCVV):
        (MATCH_VWSMACCVX):
        (MASK_VWSMACCVX):
        (MATCH_VWSMACCSUVV):
        (MASK_VWSMACCSUVV):
        (MATCH_VWSMACCSUVX):
        (MASK_VWSMACCSUVX):
        (MATCH_VWSMACCUSVX):
        (MASK_VWSMACCUSVX):
        (MATCH_VFSQRTV_ZV):
        (MASK_VFSQRTV_ZV):
        (MATCH_VFCLASSV_ZV):
        (MASK_VFCLASSV_ZV):
        (MATCH_VFCVTXUFV_ZV):
        (MASK_VFCVTXUFV_ZV):
        (MATCH_VFCVTXFV_ZV):
        (MASK_VFCVTXFV_ZV):
        (MATCH_VFCVTFXUV_ZV):
        (MASK_VFCVTFXUV_ZV):
        (MATCH_VFCVTFXV_ZV):
        (MASK_VFCVTFXV_ZV):
        (MATCH_VFWCVTXUFV_ZV):
        (MASK_VFWCVTXUFV_ZV):
        (MATCH_VFWCVTXFV_ZV):
        (MASK_VFWCVTXFV_ZV):
        (MATCH_VFWCVTFXUV_ZV):
        (MASK_VFWCVTFXUV_ZV):
        (MATCH_VFWCVTFXV_ZV):
        (MASK_VFWCVTFXV_ZV):
        (MATCH_VFWCVTFFV_ZV):
        (MASK_VFWCVTFFV_ZV):
        (MATCH_VNCLIPUVV):
        (MASK_VNCLIPUVV):
        (MATCH_VNCLIPUVX):
        (MASK_VNCLIPUVX):
        (MATCH_VNCLIPUVI):
        (MASK_VNCLIPUVI):
        (MATCH_VNCLIPVV):
        (MASK_VNCLIPVV):
        (MATCH_VNCLIPVX):
        (MASK_VNCLIPVX):
        (MATCH_VNCLIPVI):
        (MASK_VNCLIPVI):
        (MATCH_VMFORDVV):
        (MASK_VMFORDVV):
        (MATCH_VFNCVTXUFV):
        (MASK_VFNCVTXUFV):
        (MATCH_VFNCVTXFV):
        (MASK_VFNCVTXFV):
        (MATCH_VFNCVTFXUV):
        (MASK_VFNCVTFXUV):
        (MATCH_VFNCVTFXV):
        (MASK_VFNCVTFXV):
        (MATCH_VFNCVTFFV):
        (MASK_VFNCVTFFV):
        (MATCH_VMFORDVF):
        (MASK_VMFORDVF):
        (MATCH_VMPOPCM):
        (MASK_VMPOPCM):
        (MATCH_VMFIRSTM):
        (MASK_VMFIRSTM):
        (MATCH_VMSBFM_ZV):
        (MASK_VMSBFM_ZV):
        (MATCH_VMSIFM_ZV):
        (MASK_VMSIFM_ZV):
        (MATCH_VMSOFM_ZV):
        (MASK_VMSOFM_ZV):
        (MATCH_VIOTAM_ZV):
        (MASK_VIOTAM_ZV):
        (MATCH_VIDV_ZV):
        (MASK_VIDV_ZV):
        (MATCH_VEXTXV):
        (MASK_VEXTXV):
        (MATCH_VMVXS_ZV):
        (MASK_VMVXS_ZV):
        (MATCH_VMVSX_ZV):
        (MASK_VMVSX_ZV):
        (MATCH_VFMVFS_ZV):
        (MASK_VFMVFS_ZV):
        (MATCH_VFMVSF_ZV):
        (MASK_VFMVSF_ZV):
        (MATCH_VAMOADDWV):
        (MASK_VAMOADDWV):
        (MATCH_VAMOADDDV):
        (MASK_VAMOADDDV):
        (MATCH_VAMOSWAPWV):
        (MASK_VAMOSWAPWV):
        (MATCH_VAMOSWAPDV):
        (MASK_VAMOSWAPDV):
        (MATCH_VAMOXORWV):
        (MASK_VAMOXORWV):
        (MATCH_VAMOXORDV):
        (MASK_VAMOXORDV):
        (MATCH_VAMOANDWV):
        (MASK_VAMOANDWV):
        (MATCH_VAMOANDDV):
        (MASK_VAMOANDDV):
        (MATCH_VAMOORWV):
        (MASK_VAMOORWV):
        (MATCH_VAMOORDV):
        (MASK_VAMOORDV):
        (MATCH_VAMOMINWV):
        (MASK_VAMOMINWV):
        (MATCH_VAMOMINDV):
        (MASK_VAMOMINDV):
        (MATCH_VAMOMAXWV):
        (MASK_VAMOMAXWV):
        (MATCH_VAMOMAXDV):
        (MASK_VAMOMAXDV):
        (MATCH_VAMOMINUWV):
        (MASK_VAMOMINUWV):
        (MATCH_VAMOMINUDV):
        (MASK_VAMOMINUDV):
        (MATCH_VAMOMAXUWV):
        (MASK_VAMOMAXUWV):
        (MATCH_VAMOMAXUDV):
        (MASK_VAMOMAXUDV):
        * opcode/riscv.h (enum riscv_insn_class):Add xtheadv class

opcodes/ChangeLog:

2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>

        * riscv-opc.c:Merge RVV 1.0 and xtheadv instruction definations.


---
 bfd/elfxx-riscv.c          |   19 +-
 gas/config/tc-riscv.c      |   84 ++-
 include/opcode/riscv-opc.h |  398 ++++++++++++++
 include/opcode/riscv.h     |    6 +
 opcodes/riscv-opc.c        | 1026 ++++++++++++++++++++++++++----------
 5 files changed, 1227 insertions(+), 306 deletions(-)

diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
index c9acf124626..1f04ac6d9be 100644
--- a/bfd/elfxx-riscv.c
+++ b/bfd/elfxx-riscv.c
@@ -1374,6 +1374,7 @@ static struct riscv_supported_ext riscv_supported_vendor_x_ext[] =
   {"xtheadmempair",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
   {"xtheadsync",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
   {"xventanacondops",	ISA_SPEC_CLASS_DRAFT,	1, 0, 0 },
+  {"xtheadv",    ISA_SPEC_CLASS_DRAFT, 0, 7, 1},
   {NULL, 0, 0, 0, 0}
 };
 
@@ -1994,7 +1995,8 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
 	  && strncmp (s->name, "zve", 3) == 0)
 	support_zve = true;
       if (!support_zvl
-	  && strncmp (s->name, "zvl", 3) == 0)
+	  && strncmp (s->name, "zvl", 3) == 0
+    && strncmp (s->name, "zvls", 4) != 0)
 	support_zvl = true;
       if (support_zve && support_zvl)
 	break;
@@ -2514,14 +2516,19 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
     case INSN_CLASS_ZKSH:
       return riscv_subset_supports (rps, "zksh");
     case INSN_CLASS_V:
-      return (riscv_subset_supports (rps, "v")
+      return ((riscv_subset_supports (rps, "v")
 	      || riscv_subset_supports (rps, "zve64x")
-	      || riscv_subset_supports (rps, "zve32x"));
+	      || riscv_subset_supports (rps, "zve32x"))
+	      && !riscv_subset_supports (rps, "zvamo"));
     case INSN_CLASS_ZVEF:
       return (riscv_subset_supports (rps, "v")
 	      || riscv_subset_supports (rps, "zve64d")
 	      || riscv_subset_supports (rps, "zve64f")
 	      || riscv_subset_supports (rps, "zve32f"));
+    case INSN_CLASS_V_OR_XTHEADV:
+    case INSN_CLASS_ZVEF_OR_XTHEADV:
+      return riscv_subset_supports (rps, "v")
+        || riscv_subset_supports(rps, "xtheadv");
     case INSN_CLASS_ZVBB:
       return riscv_subset_supports (rps, "zvbb");
     case INSN_CLASS_ZVBC:
@@ -2556,6 +2563,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
       return riscv_subset_supports (rps, "xcvmac");
     case INSN_CLASS_XCVALU:
       return riscv_subset_supports (rps, "xcvalu");
+    case INSN_CLASS_XTHEADV:
+      return riscv_subset_supports(rps, "xtheadv");
     case INSN_CLASS_XTHEADBA:
       return riscv_subset_supports (rps, "xtheadba");
     case INSN_CLASS_XTHEADBB:
@@ -2768,8 +2777,10 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
       return "zksh";
     case INSN_CLASS_V:
       return _("v' or `zve64x' or `zve32x");
+    case INSN_CLASS_XTHEADV:
+      return _("v' or `zvlsseg' or `zvamo");
     case INSN_CLASS_ZVEF:
-      return _("v' or `zve64d' or `zve64f' or `zve32f");
+      return _("v");
     case INSN_CLASS_ZVBB:
       return _("zvbb");
     case INSN_CLASS_ZVBC:
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index 402c46ad753..d1752eacc08 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -2298,56 +2298,104 @@ my_getVsetvliExpression (expressionS *ep, char *str)
 {
   unsigned int vsew_value = 0, vlmul_value = 0;
   unsigned int vta_value = 0, vma_value = 0;
+  unsigned int vlen_value = 0, vediv_value = 0; /* RVV 0.7. */
   bfd_boolean vsew_found = FALSE, vlmul_found = FALSE;
   bfd_boolean vta_found = FALSE, vma_found = FALSE;
+  bfd_boolean vlen_found = FALSE, vediv_found = FALSE; /* RVV 0.7. */
 
-  if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew), &vsew_value))
+  if(riscv_subset_supports (&riscv_rps_as, "zve32x"))
+  {
+    if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew), &vsew_value))
     {
       if (*str == ',')
-	++str;
+		++str;
       if (vsew_found)
-	as_bad (_("multiple vsew constants"));
+		as_bad (_("multiple vsew constants"));
       vsew_found = TRUE;
     }
-  if (arg_lookup (&str, riscv_vlmul, ARRAY_SIZE (riscv_vlmul), &vlmul_value))
+    if (arg_lookup (&str, riscv_vlmul, ARRAY_SIZE (riscv_vlmul), &vlmul_value))
     {
       if (*str == ',')
-	++str;
+		++str;
       if (vlmul_found)
-	as_bad (_("multiple vlmul constants"));
-      vlmul_found = TRUE;
+		as_bad (_("multiple vlmul constants"));
+      vlmul_found = TRUE;	
     }
-  if (arg_lookup (&str, riscv_vta, ARRAY_SIZE (riscv_vta), &vta_value))
+    if (arg_lookup (&str, riscv_vta, ARRAY_SIZE (riscv_vta), &vta_value))
     {
       if (*str == ',')
-	++str;
+		++str;
       if (vta_found)
-	as_bad (_("multiple vta constants"));
-      vta_found = TRUE;
+		as_bad (_("multiple vta constants"));
+      	vta_found = TRUE;
     }
-  if (arg_lookup (&str, riscv_vma, ARRAY_SIZE (riscv_vma), &vma_value))
+    if (arg_lookup (&str, riscv_vma, ARRAY_SIZE (riscv_vma), &vma_value))
     {
       if (*str == ',')
-	++str;
+		++str;
       if (vma_found)
-	as_bad (_("multiple vma constants"));
+		as_bad (_("multiple vma constants"));
       vma_found = TRUE;
     }
 
-  if (vsew_found || vlmul_found || vta_found || vma_found)
+    if (vsew_found || vlmul_found || vta_found || vma_found)
     {
       ep->X_op = O_constant;
       ep->X_add_number = (vlmul_value << OP_SH_VLMUL)
-			 | (vsew_value << OP_SH_VSEW)
-			 | (vta_value << OP_SH_VTA)
-			 | (vma_value << OP_SH_VMA);
+	      | (vsew_value << OP_SH_VSEW)
+	      | (vta_value << OP_SH_VTA)
+	      | (vma_value << OP_SH_VMA);
       expr_parse_end = str;
     }
+    else
+    {
+      my_getExpression (ep, str);
+      str = expr_parse_end;
+    }
+  }
   else
+  {
+    /* RVV 0.7. */
+    if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew), &vsew_value))
+    {
+      if (*str == ',')
+	++str;
+      if (vsew_found)
+	as_bad (_("multiple vsew constants"));
+      vsew_found = TRUE;
+    }
+
+    if (arg_lookup (&str, riscv_vlen, ARRAY_SIZE (riscv_vlen), &vlen_value))
+    {
+      if (*str == ',')
+	++str;
+      if (vlen_found)
+	as_bad (_("multiple vlen constants"));
+      vlen_found = TRUE;
+    }
+    if (arg_lookup (&str, riscv_vediv, ARRAY_SIZE (riscv_vediv), &vediv_value))
+    {
+      if (*str == ',')
+	++str;
+      if (vediv_found)
+	as_bad (_("multiple vediv constants"));
+      vediv_found = TRUE;
+    }
+
+    if (vsew_found || vlmul_found || vta_found || vma_found)
+    {
+      ep->X_op = O_constant;
+      ep->X_add_number = (vediv_value << 5)
+	      | (vsew_value << 2)
+	      | (vlen_value);
+      expr_parse_end = str;
+    }
+    else
     {
       my_getExpression (ep, str);
       str = expr_parse_end;
     }
+  }
 }
 
 /* Detect and handle implicitly zero load-store offsets.  For example,
diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
index 24217062edc..496f4703f3d 100644
--- a/include/opcode/riscv-opc.h
+++ b/include/opcode/riscv-opc.h
@@ -2121,6 +2121,404 @@
 #define MASK_VDOTUVV  0xfc00707f
 #define MATCH_VFDOTVV  0xe4001057
 #define MASK_VFDOTVV  0xfc00707f
+/* XTHEADV  */
+#define MATCH_VLBV  0x10000007
+#define MASK_VLBV   0xfdf0707f
+#define MATCH_VLHV  0x10005007
+#define MASK_VLHV   0xfdf0707f
+#define MATCH_VLWV  0x10006007
+#define MASK_VLWV   0xfdf0707f
+
+#define MATCH_VLSBV    0x18000007
+#define MASK_VLSBV     0xfc00707f
+#define MATCH_VLSHV    0x18005007
+#define MASK_VLSHV     0xfc00707f
+#define MATCH_VLSWV    0x18006007
+#define MASK_VLSWV     0xfc00707f
+
+#define MATCH_VLXBV    0x1c000007
+#define MASK_VLXBV     0xfc00707f
+#define MATCH_VLXHV    0x1c005007
+#define MASK_VLXHV     0xfc00707f
+#define MATCH_VLXWV    0x1c006007
+#define MASK_VLXWV     0xfc00707f
+#define MATCH_VSUXBV   0x1c000027
+#define MASK_VSUXBV    0xfc00707f
+#define MATCH_VSUXHV   0x1c005027
+#define MASK_VSUXHV    0xfc00707f
+#define MATCH_VSUXWV   0x1c006027
+#define MASK_VSUXWV    0xfc00707f
+#define MATCH_VSUXEV   0x1c007027
+#define MASK_VSUXEV    0xfc00707f
+
+#define MATCH_VLBFFV  0x11000007
+#define MASK_VLBFFV   0xfdf0707f
+#define MATCH_VLHFFV  0x11005007
+#define MASK_VLHFFV   0xfdf0707f
+#define MATCH_VLWFFV  0x11006007
+#define MASK_VLWFFV   0xfdf0707f
+
+#define MATCH_VLSEG2BV  0x30000007
+#define MASK_VLSEG2BV   0xfdf0707f
+#define MATCH_VLSEG2HV  0x30005007
+#define MASK_VLSEG2HV   0xfdf0707f
+#define MATCH_VLSEG2WV  0x30006007
+#define MASK_VLSEG2WV   0xfdf0707f
+
+#define MATCH_VLSEG3BV  0x50000007
+#define MASK_VLSEG3BV   0xfdf0707f
+#define MATCH_VLSEG3HV  0x50005007
+#define MASK_VLSEG3HV   0xfdf0707f
+#define MATCH_VLSEG3WV  0x50006007
+#define MASK_VLSEG3WV   0xfdf0707f
+
+#define MATCH_VLSEG4BV  0x70000007
+#define MASK_VLSEG4BV   0xfdf0707f
+#define MATCH_VLSEG4HV  0x70005007
+#define MASK_VLSEG4HV   0xfdf0707f
+#define MATCH_VLSEG4WV  0x70006007
+#define MASK_VLSEG4WV   0xfdf0707f
+
+#define MATCH_VLSEG5BV  0x90000007
+#define MASK_VLSEG5BV   0xfdf0707f
+#define MATCH_VLSEG5HV  0x90005007
+#define MASK_VLSEG5HV   0xfdf0707f
+#define MATCH_VLSEG5WV  0x90006007
+#define MASK_VLSEG5WV   0xfdf0707f
+
+#define MATCH_VLSEG6BV  0xb0000007
+#define MASK_VLSEG6BV   0xfdf0707f
+#define MATCH_VLSEG6HV  0xb0005007
+#define MASK_VLSEG6HV   0xfdf0707f
+#define MATCH_VLSEG6WV  0xb0006007
+#define MASK_VLSEG6WV   0xfdf0707f
+
+#define MATCH_VLSEG7BV  0xd0000007
+#define MASK_VLSEG7BV   0xfdf0707f
+#define MATCH_VLSEG7HV  0xd0005007
+#define MASK_VLSEG7HV   0xfdf0707f
+#define MATCH_VLSEG7WV  0xd0006007
+#define MASK_VLSEG7WV   0xfdf0707f
+
+#define MATCH_VLSEG8BV  0xf0000007
+#define MASK_VLSEG8BV   0xfdf0707f
+#define MATCH_VLSEG8HV  0xf0005007
+#define MASK_VLSEG8HV   0xfdf0707f
+#define MATCH_VLSEG8WV  0xf0006007
+#define MASK_VLSEG8WV   0xfdf0707f
+
+#define MATCH_VLSSEG2BV  0x38000007
+#define MASK_VLSSEG2BV   0xfc00707f
+#define MATCH_VLSSEG2HV  0x38005007
+#define MASK_VLSSEG2HV   0xfc00707f
+#define MATCH_VLSSEG2WV  0x38006007
+#define MASK_VLSSEG2WV   0xfc00707f
+
+#define MATCH_VLSSEG3BV  0x58000007
+#define MASK_VLSSEG3BV   0xfc00707f
+#define MATCH_VLSSEG3HV  0x58005007
+#define MASK_VLSSEG3HV   0xfc00707f
+#define MATCH_VLSSEG3WV  0x58006007
+#define MASK_VLSSEG3WV   0xfc00707f
+
+#define MATCH_VLSSEG4BV  0x78000007
+#define MASK_VLSSEG4BV   0xfc00707f
+#define MATCH_VLSSEG4HV  0x78005007
+#define MASK_VLSSEG4HV   0xfc00707f
+#define MATCH_VLSSEG4WV  0x78006007
+#define MASK_VLSSEG4WV   0xfc00707f
+
+#define MATCH_VLSSEG5BV  0x98000007
+#define MASK_VLSSEG5BV   0xfc00707f
+#define MATCH_VLSSEG5HV  0x98005007
+#define MASK_VLSSEG5HV   0xfc00707f
+#define MATCH_VLSSEG5WV  0x98006007
+#define MASK_VLSSEG5WV   0xfc00707f
+
+#define MATCH_VLSSEG6BV  0xb8000007
+#define MASK_VLSSEG6BV   0xfc00707f
+#define MATCH_VLSSEG6HV  0xb8005007
+#define MASK_VLSSEG6HV   0xfc00707f
+#define MATCH_VLSSEG6WV  0xb8006007
+#define MASK_VLSSEG6WV   0xfc00707f
+
+#define MATCH_VLSSEG7BV  0xd8000007
+#define MASK_VLSSEG7BV   0xfc00707f
+#define MATCH_VLSSEG7HV  0xd8005007
+#define MASK_VLSSEG7HV   0xfc00707f
+#define MATCH_VLSSEG7WV  0xd8006007
+#define MASK_VLSSEG7WV   0xfc00707f
+
+#define MATCH_VLSSEG8BV  0xf8000007
+#define MASK_VLSSEG8BV   0xfc00707f
+#define MATCH_VLSSEG8HV  0xf8005007
+#define MASK_VLSSEG8HV   0xfc00707f
+#define MATCH_VLSSEG8WV  0xf8006007
+#define MASK_VLSSEG8WV   0xfc00707f
+
+#define MATCH_VLXSEG2BV  0x3c000007
+#define MASK_VLXSEG2BV   0xfc00707f
+#define MATCH_VLXSEG2HV  0x3c005007
+#define MASK_VLXSEG2HV   0xfc00707f
+#define MATCH_VLXSEG2WV  0x3c006007
+#define MASK_VLXSEG2WV   0xfc00707f
+
+#define MATCH_VLXSEG3BV  0x5c000007
+#define MASK_VLXSEG3BV   0xfc00707f
+#define MATCH_VLXSEG3HV  0x5c005007
+#define MASK_VLXSEG3HV   0xfc00707f
+#define MATCH_VLXSEG3WV  0x5c006007
+#define MASK_VLXSEG3WV   0xfc00707f
+
+#define MATCH_VLXSEG4BV  0x7c000007
+#define MASK_VLXSEG4BV   0xfc00707f
+#define MATCH_VLXSEG4HV  0x7c005007
+#define MASK_VLXSEG4HV   0xfc00707f
+#define MATCH_VLXSEG4WV  0x7c006007
+#define MASK_VLXSEG4WV   0xfc00707f
+
+#define MATCH_VLXSEG5BV  0x9c000007
+#define MASK_VLXSEG5BV   0xfc00707f
+#define MATCH_VLXSEG5HV  0x9c005007
+#define MASK_VLXSEG5HV   0xfc00707f
+#define MATCH_VLXSEG5WV  0x9c006007
+#define MASK_VLXSEG5WV   0xfc00707f
+
+#define MATCH_VLXSEG6BV  0xbc000007
+#define MASK_VLXSEG6BV   0xfc00707f
+#define MATCH_VLXSEG6HV  0xbc005007
+#define MASK_VLXSEG6HV   0xfc00707f
+#define MATCH_VLXSEG6WV  0xbc006007
+#define MASK_VLXSEG6WV   0xfc00707f
+
+#define MATCH_VLXSEG7BV  0xdc000007
+#define MASK_VLXSEG7BV   0xfc00707f
+#define MATCH_VLXSEG7HV  0xdc005007
+#define MASK_VLXSEG7HV   0xfc00707f
+#define MATCH_VLXSEG7WV  0xdc006007
+#define MASK_VLXSEG7WV   0xfc00707f
+
+#define MATCH_VLXSEG8BV  0xfc000007
+#define MASK_VLXSEG8BV   0xfc00707f
+#define MATCH_VLXSEG8HV  0xfc005007
+#define MASK_VLXSEG8HV   0xfc00707f
+#define MATCH_VLXSEG8WV  0xfc006007
+#define MASK_VLXSEG8WV   0xfc00707f
+
+#define MATCH_VLSEG2BFFV  0x31000007
+#define MASK_VLSEG2BFFV   0xfdf0707f
+#define MATCH_VLSEG2HFFV  0x31005007
+#define MASK_VLSEG2HFFV   0xfdf0707f
+#define MATCH_VLSEG2WFFV  0x31006007
+#define MASK_VLSEG2WFFV   0xfdf0707f
+
+#define MATCH_VLSEG3BFFV  0x51000007
+#define MASK_VLSEG3BFFV   0xfdf0707f
+#define MATCH_VLSEG3HFFV  0x51005007
+#define MASK_VLSEG3HFFV   0xfdf0707f
+#define MATCH_VLSEG3WFFV  0x51006007
+#define MASK_VLSEG3WFFV   0xfdf0707f
+
+#define MATCH_VLSEG4BFFV  0x71000007
+#define MASK_VLSEG4BFFV   0xfdf0707f
+#define MATCH_VLSEG4HFFV  0x71005007
+#define MASK_VLSEG4HFFV   0xfdf0707f
+#define MATCH_VLSEG4WFFV  0x71006007
+#define MASK_VLSEG4WFFV   0xfdf0707f
+
+#define MATCH_VLSEG5BFFV  0x91000007
+#define MASK_VLSEG5BFFV   0xfdf0707f
+#define MATCH_VLSEG5HFFV  0x91005007
+#define MASK_VLSEG5HFFV   0xfdf0707f
+#define MATCH_VLSEG5WFFV  0x91006007
+#define MASK_VLSEG5WFFV   0xfdf0707f
+
+#define MATCH_VLSEG6BFFV  0xb1000007
+#define MASK_VLSEG6BFFV   0xfdf0707f
+#define MATCH_VLSEG6HFFV  0xb1005007
+#define MASK_VLSEG6HFFV   0xfdf0707f
+#define MATCH_VLSEG6WFFV  0xb1006007
+#define MASK_VLSEG6WFFV   0xfdf0707f
+
+#define MATCH_VLSEG7BFFV  0xd1000007
+#define MASK_VLSEG7BFFV   0xfdf0707f
+#define MATCH_VLSEG7HFFV  0xd1005007
+#define MASK_VLSEG7HFFV   0xfdf0707f
+#define MATCH_VLSEG7WFFV  0xd1006007
+#define MASK_VLSEG7WFFV   0xfdf0707f
+
+#define MATCH_VLSEG8BFFV  0xf1000007
+#define MASK_VLSEG8BFFV   0xfdf0707f
+#define MATCH_VLSEG8HFFV  0xf1005007
+#define MASK_VLSEG8HFFV   0xfdf0707f
+#define MATCH_VLSEG8WFFV  0xf1006007
+#define MASK_VLSEG8WFFV   0xfdf0707f
+
+#define MATCH_VNSRLVV  0xb0000057
+#define MASK_VNSRLVV   0xfc00707f
+#define MATCH_VNSRLVX  0xb0004057
+#define MASK_VNSRLVX   0xfc00707f
+#define MATCH_VNSRLVI  0xb0003057
+#define MASK_VNSRLVI   0xfc00707f
+#define MATCH_VNSRAVV  0xb4000057
+#define MASK_VNSRAVV   0xfc00707f
+#define MATCH_VNSRAVX  0xb4004057
+#define MASK_VNSRAVX   0xfc00707f
+#define MATCH_VNSRAVI  0xb4003057
+#define MASK_VNSRAVI   0xfc00707f
+
+#define MATCH_VWMACCSUVV_ZV 0xf8002057
+#define MASK_VWMACCSUVV_ZV  0xfc00707f
+#define MATCH_VWMACCSUVX_ZV 0xf8006057
+#define MASK_VWMACCSUVX_ZV  0xfc00707f
+#define MATCH_VWMACCUSVX_ZV 0xfc006057
+#define MASK_VWMACCUSVX_ZV  0xfc00707f
+
+#define MATCH_VAADDVV_ZV  0x90000057
+#define MASK_VAADDVV_ZV   0xfc00707f
+#define MATCH_VAADDVX_ZV  0x90004057
+#define MASK_VAADDVX_ZV   0xfc00707f
+#define MATCH_VAADDVI     0x90003057
+#define MASK_VAADDVI      0xfc00707f
+#define MATCH_VASUBVV_ZV  0x98000057
+#define MASK_VASUBVV_ZV   0xfc00707f
+#define MATCH_VASUBVX_ZV  0x98004057
+#define MASK_VASUBVX_ZV   0xfc00707f
+
+#define MATCH_VWSMACCUVV  0xf0000057
+#define MASK_VWSMACCUVV   0xfc00707f
+#define MATCH_VWSMACCUVX  0xf0004057
+#define MASK_VWSMACCUVX   0xfc00707f
+#define MATCH_VWSMACCVV   0xf4000057
+#define MASK_VWSMACCVV    0xfc00707f
+#define MATCH_VWSMACCVX   0xf4004057
+#define MASK_VWSMACCVX    0xfc00707f
+#define MATCH_VWSMACCSUVV 0xf8000057
+#define MASK_VWSMACCSUVV  0xfc00707f
+#define MATCH_VWSMACCSUVX 0xf8004057
+#define MASK_VWSMACCSUVX  0xfc00707f
+#define MATCH_VWSMACCUSVX 0xfc004057
+#define MASK_VWSMACCUSVX  0xfc00707f
+
+#define MATCH_VFSQRTV_ZV  0x8c001057
+#define MASK_VFSQRTV_ZV   0xfc0ff07f
+#define MATCH_VFCLASSV_ZV 0x8c081057
+#define MASK_VFCLASSV_ZV  0xfc0ff07f
+
+#define MATCH_VFCVTXUFV_ZV  0x88001057
+#define MASK_VFCVTXUFV_ZV   0xfc0ff07f
+#define MATCH_VFCVTXFV_ZV   0x88009057
+#define MASK_VFCVTXFV_ZV    0xfc0ff07f
+#define MATCH_VFCVTFXUV_ZV  0x88011057
+#define MASK_VFCVTFXUV_ZV   0xfc0ff07f
+#define MATCH_VFCVTFXV_ZV   0x88019057
+#define MASK_VFCVTFXV_ZV    0xfc0ff07f
+
+#define MATCH_VFWCVTXUFV_ZV  0x88041057
+#define MASK_VFWCVTXUFV_ZV   0xfc0ff07f
+#define MATCH_VFWCVTXFV_ZV   0x88049057
+#define MASK_VFWCVTXFV_ZV    0xfc0ff07f
+#define MATCH_VFWCVTFXUV_ZV  0x88051057
+#define MASK_VFWCVTFXUV_ZV   0xfc0ff07f
+#define MATCH_VFWCVTFXV_ZV   0x88059057
+#define MASK_VFWCVTFXV_ZV    0xfc0ff07f
+#define MATCH_VFWCVTFFV_ZV   0x88061057
+#define MASK_VFWCVTFFV_ZV    0xfc0ff07f
+
+#define MATCH_VNCLIPUVV 0xb8000057
+#define MASK_VNCLIPUVV  0xfc00707f
+#define MATCH_VNCLIPUVX 0xb8004057
+#define MASK_VNCLIPUVX  0xfc00707f
+#define MATCH_VNCLIPUVI 0xb8003057
+#define MASK_VNCLIPUVI  0xfc00707f
+#define MATCH_VNCLIPVV  0xbc000057
+#define MASK_VNCLIPVV   0xfc00707f
+#define MATCH_VNCLIPVX  0xbc004057
+#define MASK_VNCLIPVX   0xfc00707f
+#define MATCH_VNCLIPVI  0xbc003057
+#define MASK_VNCLIPVI   0xfc00707f
+
+#define MATCH_VMFORDVV 0x68001057
+#define MASK_VMFORDVV  0xfc00707f
+
+#define MATCH_VFNCVTXUFV  0x88081057
+#define MASK_VFNCVTXUFV   0xfc0ff07f
+#define MATCH_VFNCVTXFV   0x88089057
+#define MASK_VFNCVTXFV    0xfc0ff07f
+#define MATCH_VFNCVTFXUV  0x88091057
+#define MASK_VFNCVTFXUV   0xfc0ff07f
+#define MATCH_VFNCVTFXV   0x88099057
+#define MASK_VFNCVTFXV    0xfc0ff07f
+#define MATCH_VFNCVTFFV   0x880a1057
+#define MASK_VFNCVTFFV    0xfc0ff07f
+
+#define MATCH_VMFORDVF 0x68005057
+#define MASK_VMFORDVF  0xfc00707f
+#define MATCH_VMPOPCM  0x50002057
+#define MASK_VMPOPCM   0xfc0ff07f
+#define MATCH_VMFIRSTM 0x54002057
+#define MASK_VMFIRSTM  0xfc0ff07f
+
+#define MATCH_VMSBFM_ZV   0x5800a057
+#define MASK_VMSBFM_ZV    0xfc0ff07f
+#define MATCH_VMSIFM_ZV   0x5801a057
+#define MASK_VMSIFM_ZV    0xfc0ff07f
+#define MATCH_VMSOFM_ZV   0x58012057
+#define MASK_VMSOFM_ZV    0xfc0ff07f
+#define MATCH_VIOTAM_ZV   0x58082057
+#define MASK_VIOTAM_ZV    0xfc0ff07f
+#define MATCH_VIDV_ZV     0x5808a057
+#define MASK_VIDV_ZV      0xfdfff07f
+
+#define MATCH_VEXTXV      0x32002057
+#define MASK_VEXTXV       0xfe00707f
+#define MATCH_VMVXS_ZV    0x32002057
+#define MASK_VMVXS_ZV     0xfe0ff07f
+#define MATCH_VMVSX_ZV    0x36006057
+#define MASK_VMVSX_ZV     0xfff0707f
+
+#define MATCH_VFMVFS_ZV   0x32001057
+#define MASK_VFMVFS_ZV    0xfe0ff07f
+#define MATCH_VFMVSF_ZV   0x36005057
+#define MASK_VFMVSF_ZV    0xfff0707f
+
+/* ZVAMO extension.  */
+#define MATCH_VAMOADDWV   0x0000602f
+#define MASK_VAMOADDWV    0xf800707f
+#define MATCH_VAMOADDDV   0x0000702f
+#define MASK_VAMOADDDV    0xf800707f
+#define MATCH_VAMOSWAPWV  0x0800602f
+#define MASK_VAMOSWAPWV   0xf800707f
+#define MATCH_VAMOSWAPDV  0x0800702f
+#define MASK_VAMOSWAPDV   0xf800707f
+#define MATCH_VAMOXORWV   0x2000602f
+#define MASK_VAMOXORWV    0xf800707f
+#define MATCH_VAMOXORDV   0x2000702f
+#define MASK_VAMOXORDV    0xf800707f
+#define MATCH_VAMOANDWV   0x6000602f
+#define MASK_VAMOANDWV    0xf800707f
+#define MATCH_VAMOANDDV   0x6000702f
+#define MASK_VAMOANDDV    0xf800707f
+#define MATCH_VAMOORWV    0x4000602f
+#define MASK_VAMOORWV     0xf800707f
+#define MATCH_VAMOORDV    0x4000702f
+#define MASK_VAMOORDV     0xf800707f
+#define MATCH_VAMOMINWV   0x8000602f
+#define MASK_VAMOMINWV    0xf800707f
+#define MATCH_VAMOMINDV   0x8000702f
+#define MASK_VAMOMINDV    0xf800707f
+#define MATCH_VAMOMAXWV   0xa000602f
+#define MASK_VAMOMAXWV    0xf800707f
+#define MATCH_VAMOMAXDV   0xa000702f
+#define MASK_VAMOMAXDV    0xf800707f
+#define MATCH_VAMOMINUWV  0xc000602f
+#define MASK_VAMOMINUWV   0xf800707f
+#define MATCH_VAMOMINUDV  0xc000702f
+#define MASK_VAMOMINUDV   0xf800707f
+#define MATCH_VAMOMAXUWV  0xe000602f
+#define MASK_VAMOMAXUWV   0xf800707f
+#define MATCH_VAMOMAXUDV  0xe000702f
+#define MASK_VAMOMAXUDV   0xf800707f
 /* Zvbb instructions.  */
 #define MATCH_VANDN_VV 0x4000057
 #define MASK_VANDN_VV 0xfc00707f
diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h
index 710a9b73189..55898009f85 100644
--- a/include/opcode/riscv.h
+++ b/include/opcode/riscv.h
@@ -436,7 +436,9 @@ enum riscv_insn_class
   INSN_CLASS_ZBC_OR_ZBKC,
   INSN_CLASS_ZKND_OR_ZKNE,
   INSN_CLASS_V,
+  INSN_CLASS_V_OR_XTHEADV,
   INSN_CLASS_ZVEF,
+  INSN_CLASS_ZVEF_OR_XTHEADV,
   INSN_CLASS_ZVBB,
   INSN_CLASS_ZVBC,
   INSN_CLASS_ZVKG,
@@ -467,6 +469,7 @@ enum riscv_insn_class
   INSN_CLASS_XTHEADMEMIDX,
   INSN_CLASS_XTHEADMEMPAIR,
   INSN_CLASS_XTHEADSYNC,
+  INSN_CLASS_XTHEADV,
   INSN_CLASS_XVENTANACONDOPS,
 };
 
@@ -586,6 +589,9 @@ extern const char * const riscv_vsew[8];
 extern const char * const riscv_vlmul[8];
 extern const char * const riscv_vta[2];
 extern const char * const riscv_vma[2];
+/* xtheadv.  */
+extern const char * const riscv_vlen[4];
+extern const char * const riscv_vediv[4];
 extern const char * const riscv_fli_symval[32];
 extern const float riscv_fli_numval[32];
 
diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
index 72d727cd77e..30ccb083c4b 100644
--- a/opcodes/riscv-opc.c
+++ b/opcodes/riscv-opc.c
@@ -110,6 +110,18 @@ const char * const riscv_vma[2] =
   "mu", "ma"
 };
 
+/* xtheadv, The vsetvli vlmul constants.  */
+const char * const riscv_vlen[4] =
+{
+    "m1", "m2", "m4", "m8"
+};
+
+/* xtheadv, The vsetvli vediv constants.  */
+const char * const riscv_vediv[4] =
+{
+    "d1", "d2", "d4", "d8"
+};
+
 /* The FLI.[HSDQ] symbolic constants (NULL for numeric constant).  */
 const char * const riscv_fli_symval[32] =
 {
@@ -1150,8 +1162,8 @@ const struct riscv_opcode riscv_opcodes[] =
 {"sm3p1",    0, INSN_CLASS_ZKSH,    "d,s",    MATCH_SM3P1, MASK_SM3P1, match_opcode, 0 },
 
 /* RVV instructions.  */
-{"vsetvl",     0, INSN_CLASS_V,  "d,s,t",  MATCH_VSETVL, MASK_VSETVL, match_opcode, 0},
-{"vsetvli",    0, INSN_CLASS_V,  "d,s,Vc", MATCH_VSETVLI, MASK_VSETVLI, match_opcode, 0},
+{"vsetvl",     0, INSN_CLASS_V_OR_XTHEADV,  "d,s,t",  MATCH_VSETVL, MASK_VSETVL, match_opcode, 0},
+{"vsetvli",    0, INSN_CLASS_V_OR_XTHEADV,  "d,s,Vc", MATCH_VSETVLI, MASK_VSETVLI, match_opcode, 0},
 {"vsetivli",   0, INSN_CLASS_V,  "d,Z,Vb", MATCH_VSETIVLI, MASK_VSETIVLI, match_opcode, 0},
 
 {"vlm.v",      0, INSN_CLASS_V,  "Vd,0(s)", MATCH_VLMV, MASK_VLMV, match_opcode, INSN_DREF },
@@ -1507,33 +1519,33 @@ const struct riscv_opcode riscv_opcodes[] =
 
 {"vneg.v",     0, INSN_CLASS_V,  "Vd,VtVm",  MATCH_VRSUBVX, MASK_VRSUBVX | MASK_RS1, match_opcode, INSN_ALIAS },
 
-{"vadd.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VADDVV, MASK_VADDVV, match_opcode, 0 },
-{"vadd.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VADDVX, MASK_VADDVX, match_opcode, 0 },
-{"vadd.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VADDVI, MASK_VADDVI, match_opcode, 0 },
-{"vsub.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSUBVV, MASK_VSUBVV, match_opcode, 0 },
-{"vsub.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSUBVX, MASK_VSUBVX, match_opcode, 0 },
-{"vrsub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VRSUBVX, MASK_VRSUBVX, match_opcode, 0 },
-{"vrsub.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VRSUBVI, MASK_VRSUBVI, match_opcode, 0 },
-
-{"vwcvt.x.x.v",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VWCVTXXV, MASK_VWCVTXXV, match_opcode, INSN_ALIAS },
-{"vwcvtu.x.x.v", 0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VWCVTUXXV, MASK_VWCVTUXXV, match_opcode, INSN_ALIAS },
-
-{"vwaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDUVV, MASK_VWADDUVV, match_opcode, 0 },
-{"vwaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDUVX, MASK_VWADDUVX, match_opcode, 0 },
-{"vwsubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBUVV, MASK_VWSUBUVV, match_opcode, 0 },
-{"vwsubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBUVX, MASK_VWSUBUVX, match_opcode, 0 },
-{"vwadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDVV, MASK_VWADDVV, match_opcode, 0 },
-{"vwadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDVX, MASK_VWADDVX, match_opcode, 0 },
-{"vwsub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBVV, MASK_VWSUBVV, match_opcode, 0 },
-{"vwsub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBVX, MASK_VWSUBVX, match_opcode, 0 },
-{"vwaddu.wv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDUWV, MASK_VWADDUWV, match_opcode, 0 },
-{"vwaddu.wx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDUWX, MASK_VWADDUWX, match_opcode, 0 },
-{"vwsubu.wv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBUWV, MASK_VWSUBUWV, match_opcode, 0 },
-{"vwsubu.wx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBUWX, MASK_VWSUBUWX, match_opcode, 0 },
-{"vwadd.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDWV, MASK_VWADDWV, match_opcode, 0 },
-{"vwadd.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDWX, MASK_VWADDWX, match_opcode, 0 },
-{"vwsub.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBWV, MASK_VWSUBWV, match_opcode, 0 },
-{"vwsub.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBWX, MASK_VWSUBWX, match_opcode, 0 },
+{"vadd.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VADDVV, MASK_VADDVV, match_opcode, 0 },
+{"vadd.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VADDVX, MASK_VADDVX, match_opcode, 0 },
+{"vadd.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VADDVI, MASK_VADDVI, match_opcode, 0 },
+{"vsub.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSUBVV, MASK_VSUBVV, match_opcode, 0 },
+{"vsub.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSUBVX, MASK_VSUBVX, match_opcode, 0 },
+{"vrsub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VRSUBVX, MASK_VRSUBVX, match_opcode, 0 },
+{"vrsub.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VRSUBVI, MASK_VRSUBVI, match_opcode, 0 },
+
+{"vwcvt.x.x.v",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm", MATCH_VWCVTXXV, MASK_VWCVTXXV, match_opcode, INSN_ALIAS },
+{"vwcvtu.x.x.v", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm", MATCH_VWCVTUXXV, MASK_VWCVTUXXV, match_opcode, INSN_ALIAS },
+
+{"vwaddu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDUVV, MASK_VWADDUVV, match_opcode, 0 },
+{"vwaddu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDUVX, MASK_VWADDUVX, match_opcode, 0 },
+{"vwsubu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBUVV, MASK_VWSUBUVV, match_opcode, 0 },
+{"vwsubu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBUVX, MASK_VWSUBUVX, match_opcode, 0 },
+{"vwadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDVV, MASK_VWADDVV, match_opcode, 0 },
+{"vwadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDVX, MASK_VWADDVX, match_opcode, 0 },
+{"vwsub.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBVV, MASK_VWSUBVV, match_opcode, 0 },
+{"vwsub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBVX, MASK_VWSUBVX, match_opcode, 0 },
+{"vwaddu.wv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDUWV, MASK_VWADDUWV, match_opcode, 0 },
+{"vwaddu.wx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDUWX, MASK_VWADDUWX, match_opcode, 0 },
+{"vwsubu.wv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBUWV, MASK_VWSUBUWV, match_opcode, 0 },
+{"vwsubu.wx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBUWX, MASK_VWSUBUWX, match_opcode, 0 },
+{"vwadd.wv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDWV, MASK_VWADDWV, match_opcode, 0 },
+{"vwadd.wx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDWX, MASK_VWADDWX, match_opcode, 0 },
+{"vwsub.wv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBWV, MASK_VWSUBWV, match_opcode, 0 },
+{"vwsub.wx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBWX, MASK_VWSUBWX, match_opcode, 0 },
 
 {"vzext.vf2",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VZEXT_VF2, MASK_VZEXT_VF2, match_opcode, 0 },
 {"vsext.vf2",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VSEXT_VF2, MASK_VSEXT_VF2, match_opcode, 0 },
@@ -1542,43 +1554,43 @@ const struct riscv_opcode riscv_opcodes[] =
 {"vzext.vf8",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VZEXT_VF8, MASK_VZEXT_VF8, match_opcode, 0 },
 {"vsext.vf8",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VSEXT_VF8, MASK_VSEXT_VF8, match_opcode, 0 },
 
-{"vadc.vvm",   0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VADCVVM, MASK_VADCVVM, match_opcode, 0 },
-{"vadc.vxm",   0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VADCVXM, MASK_VADCVXM, match_opcode, 0 },
-{"vadc.vim",   0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VADCVIM, MASK_VADCVIM, match_opcode, 0 },
-{"vmadc.vvm",  0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMADCVVM, MASK_VMADCVVM, match_opcode, 0 },
-{"vmadc.vxm",  0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMADCVXM, MASK_VMADCVXM, match_opcode, 0 },
-{"vmadc.vim",  0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VMADCVIM, MASK_VMADCVIM, match_opcode, 0 },
+{"vadc.vvm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VADCVVM, MASK_VADCVVM, match_opcode, 0 },
+{"vadc.vxm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VADCVXM, MASK_VADCVXM, match_opcode, 0 },
+{"vadc.vim",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0", MATCH_VADCVIM, MASK_VADCVIM, match_opcode, 0 },
+{"vmadc.vvm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VMADCVVM, MASK_VMADCVVM, match_opcode, 0 },
+{"vmadc.vxm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VMADCVXM, MASK_VMADCVXM, match_opcode, 0 },
+{"vmadc.vim",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0", MATCH_VMADCVIM, MASK_VMADCVIM, match_opcode, 0 },
 {"vmadc.vv",   0, INSN_CLASS_V,  "Vd,Vt,Vs", MATCH_VMADCVV, MASK_VMADCVV, match_opcode, 0 },
 {"vmadc.vx",   0, INSN_CLASS_V,  "Vd,Vt,s", MATCH_VMADCVX, MASK_VMADCVX, match_opcode, 0 },
 {"vmadc.vi",   0, INSN_CLASS_V,  "Vd,Vt,Vi", MATCH_VMADCVI, MASK_VMADCVI, match_opcode, 0 },
-{"vsbc.vvm",   0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VSBCVVM, MASK_VSBCVVM, match_opcode, 0 },
-{"vsbc.vxm",   0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VSBCVXM, MASK_VSBCVXM, match_opcode, 0 },
-{"vmsbc.vvm",  0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMSBCVVM, MASK_VMSBCVVM, match_opcode, 0 },
-{"vmsbc.vxm",  0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMSBCVXM, MASK_VMSBCVXM, match_opcode, 0 },
+{"vsbc.vvm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VSBCVVM, MASK_VSBCVVM, match_opcode, 0 },
+{"vsbc.vxm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VSBCVXM, MASK_VSBCVXM, match_opcode, 0 },
+{"vmsbc.vvm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VMSBCVVM, MASK_VMSBCVVM, match_opcode, 0 },
+{"vmsbc.vxm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VMSBCVXM, MASK_VMSBCVXM, match_opcode, 0 },
 {"vmsbc.vv",   0, INSN_CLASS_V,  "Vd,Vt,Vs", MATCH_VMSBCVV, MASK_VMSBCVV, match_opcode, 0 },
 {"vmsbc.vx",   0, INSN_CLASS_V,  "Vd,Vt,s", MATCH_VMSBCVX, MASK_VMSBCVX, match_opcode, 0 },
 
-{"vnot.v",     0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VNOTV, MASK_VNOTV, match_opcode, INSN_ALIAS },
-
-{"vand.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VANDVV, MASK_VANDVV, match_opcode, 0 },
-{"vand.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VANDVX, MASK_VANDVX, match_opcode, 0 },
-{"vand.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VANDVI, MASK_VANDVI, match_opcode, 0 },
-{"vor.vv",     0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VORVV, MASK_VORVV, match_opcode, 0 },
-{"vor.vx",     0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VORVX, MASK_VORVX, match_opcode, 0 },
-{"vor.vi",     0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VORVI, MASK_VORVI, match_opcode, 0 },
-{"vxor.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VXORVV, MASK_VXORVV, match_opcode, 0 },
-{"vxor.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VXORVX, MASK_VXORVX, match_opcode, 0 },
-{"vxor.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VXORVI, MASK_VXORVI, match_opcode, 0 },
-
-{"vsll.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSLLVV, MASK_VSLLVV, match_opcode, 0 },
-{"vsll.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSLLVX, MASK_VSLLVX, match_opcode, 0 },
-{"vsll.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSLLVI, MASK_VSLLVI, match_opcode, 0 },
-{"vsrl.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSRLVV, MASK_VSRLVV, match_opcode, 0 },
-{"vsrl.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSRLVX, MASK_VSRLVX, match_opcode, 0 },
-{"vsrl.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSRLVI, MASK_VSRLVI, match_opcode, 0 },
-{"vsra.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSRAVV, MASK_VSRAVV, match_opcode, 0 },
-{"vsra.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSRAVX, MASK_VSRAVX, match_opcode, 0 },
-{"vsra.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSRAVI, MASK_VSRAVI, match_opcode, 0 },
+{"vnot.v",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm", MATCH_VNOTV, MASK_VNOTV, match_opcode, INSN_ALIAS },
+
+{"vand.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VANDVV, MASK_VANDVV, match_opcode, 0 },
+{"vand.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VANDVX, MASK_VANDVX, match_opcode, 0 },
+{"vand.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VANDVI, MASK_VANDVI, match_opcode, 0 },
+{"vor.vv",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VORVV, MASK_VORVV, match_opcode, 0 },
+{"vor.vx",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VORVX, MASK_VORVX, match_opcode, 0 },
+{"vor.vi",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VORVI, MASK_VORVI, match_opcode, 0 },
+{"vxor.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VXORVV, MASK_VXORVV, match_opcode, 0 },
+{"vxor.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VXORVX, MASK_VXORVX, match_opcode, 0 },
+{"vxor.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VXORVI, MASK_VXORVI, match_opcode, 0 },
+
+{"vsll.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSLLVV, MASK_VSLLVV, match_opcode, 0 },
+{"vsll.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSLLVX, MASK_VSLLVX, match_opcode, 0 },
+{"vsll.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSLLVI, MASK_VSLLVI, match_opcode, 0 },
+{"vsrl.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSRLVV, MASK_VSRLVV, match_opcode, 0 },
+{"vsrl.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSRLVX, MASK_VSRLVX, match_opcode, 0 },
+{"vsrl.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSRLVI, MASK_VSRLVI, match_opcode, 0 },
+{"vsra.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSRAVV, MASK_VSRAVV, match_opcode, 0 },
+{"vsra.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSRAVX, MASK_VSRAVX, match_opcode, 0 },
+{"vsra.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSRAVI, MASK_VSRAVI, match_opcode, 0 },
 
 {"vncvt.x.x.w",0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VNCVTXXW, MASK_VNCVTXXW, match_opcode, INSN_ALIAS },
 
@@ -1589,130 +1601,138 @@ const struct riscv_opcode riscv_opcodes[] =
 {"vnsra.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNSRAWX, MASK_VNSRAWX, match_opcode, 0 },
 {"vnsra.wi",   0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VNSRAWI, MASK_VNSRAWI, match_opcode, 0 },
 
-{"vmseq.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSEQVV, MASK_VMSEQVV, match_opcode, 0 },
-{"vmseq.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSEQVX, MASK_VMSEQVX, match_opcode, 0 },
-{"vmseq.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSEQVI, MASK_VMSEQVI, match_opcode, 0 },
-{"vmsne.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSNEVV, MASK_VMSNEVV, match_opcode, 0 },
-{"vmsne.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSNEVX, MASK_VMSNEVX, match_opcode, 0 },
-{"vmsne.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSNEVI, MASK_VMSNEVI, match_opcode, 0 },
-{"vmsltu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, 0 },
-{"vmsltu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLTUVX, MASK_VMSLTUVX, match_opcode, 0 },
-{"vmslt.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, 0 },
-{"vmslt.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLTVX, MASK_VMSLTVX, match_opcode, 0 },
-{"vmsleu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, 0 },
-{"vmsleu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLEUVX, MASK_VMSLEUVX, match_opcode, 0 },
-{"vmsleu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, 0 },
-{"vmsle.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, 0 },
-{"vmsle.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLEVX, MASK_VMSLEVX, match_opcode, 0 },
-{"vmsle.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, 0 },
-{"vmsgtu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSGTUVX, MASK_VMSGTUVX, match_opcode, 0 },
-{"vmsgtu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, 0 },
-{"vmsgt.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSGTVX, MASK_VMSGTVX, match_opcode, 0 },
-{"vmsgt.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, 0 },
-{"vmsgt.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, INSN_ALIAS },
-{"vmsgtu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, INSN_ALIAS },
-{"vmsge.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, INSN_ALIAS },
-{"vmsgeu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, INSN_ALIAS },
-{"vmslt.vi",   0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, INSN_ALIAS },
-{"vmsltu.vi",  0, INSN_CLASS_V,  "Vd,Vu,0Vm", MATCH_VMSNEVV, MASK_VMSNEVV, match_vs1_eq_vs2, INSN_ALIAS },
-{"vmsltu.vi",  0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, INSN_ALIAS },
-{"vmsge.vi",   0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, INSN_ALIAS },
-{"vmsgeu.vi",  0, INSN_CLASS_V,  "Vd,Vu,0Vm", MATCH_VMSEQVV, MASK_VMSEQVV, match_vs1_eq_vs2, INSN_ALIAS },
-{"vmsgeu.vi",  0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, INSN_ALIAS },
-
-{"vmsge.vx",   0, INSN_CLASS_V, "Vd,Vt,sVm", 0, (int) M_VMSGE, match_never, INSN_MACRO },
-{"vmsge.vx",   0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGE, match_never, INSN_MACRO },
-{"vmsgeu.vx",  0, INSN_CLASS_V, "Vd,Vt,sVm", 1, (int) M_VMSGE, match_never, INSN_MACRO },
-{"vmsgeu.vx",  0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 1, (int) M_VMSGE, match_never, INSN_MACRO },
-
-{"vminu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMINUVV, MASK_VMINUVV, match_opcode, 0},
-{"vminu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMINUVX, MASK_VMINUVX, match_opcode, 0},
-{"vmin.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMINVV, MASK_VMINVV, match_opcode, 0},
-{"vmin.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMINVX, MASK_VMINVX, match_opcode, 0},
-{"vmaxu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMAXUVV, MASK_VMAXUVV, match_opcode, 0},
-{"vmaxu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMAXUVX, MASK_VMAXUVX, match_opcode, 0},
-{"vmax.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMAXVV, MASK_VMAXVV, match_opcode, 0},
-{"vmax.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMAXVX, MASK_VMAXVX, match_opcode, 0},
-
-{"vmul.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULVV, MASK_VMULVV, match_opcode, 0 },
-{"vmul.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULVX, MASK_VMULVX, match_opcode, 0 },
-{"vmulh.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHVV, MASK_VMULHVV, match_opcode, 0 },
-{"vmulh.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHVX, MASK_VMULHVX, match_opcode, 0 },
-{"vmulhu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHUVV, MASK_VMULHUVV, match_opcode, 0 },
-{"vmulhu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHUVX, MASK_VMULHUVX, match_opcode, 0 },
-{"vmulhsu.vv", 0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHSUVV, MASK_VMULHSUVV, match_opcode, 0 },
-{"vmulhsu.vx", 0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHSUVX, MASK_VMULHSUVX, match_opcode, 0 },
-
-{"vwmul.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULVV, MASK_VWMULVV, match_opcode, 0 },
-{"vwmul.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULVX, MASK_VWMULVX, match_opcode, 0 },
-{"vwmulu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULUVV, MASK_VWMULUVV, match_opcode, 0 },
-{"vwmulu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULUVX, MASK_VWMULUVX, match_opcode, 0 },
-{"vwmulsu.vv", 0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULSUVV, MASK_VWMULSUVV, match_opcode, 0 },
-{"vwmulsu.vx", 0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULSUVX, MASK_VWMULSUVX, match_opcode, 0 },
-
-{"vmacc.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMACCVV, MASK_VMACCVV, match_opcode, 0},
-{"vmacc.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VMACCVX, MASK_VMACCVX, match_opcode, 0},
-{"vnmsac.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VNMSACVV, MASK_VNMSACVV, match_opcode, 0},
-{"vnmsac.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VNMSACVX, MASK_VNMSACVX, match_opcode, 0},
-{"vmadd.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMADDVV, MASK_VMADDVV, match_opcode, 0},
-{"vmadd.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VMADDVX, MASK_VMADDVX, match_opcode, 0},
-{"vnmsub.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VNMSUBVV, MASK_VNMSUBVV, match_opcode, 0},
-{"vnmsub.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VNMSUBVX, MASK_VNMSUBVX, match_opcode, 0},
-
-{"vwmaccu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCUVV, MASK_VWMACCUVV, match_opcode, 0},
-{"vwmaccu.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCUVX, MASK_VWMACCUVX, match_opcode, 0},
-{"vwmacc.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCVV, MASK_VWMACCVV, match_opcode, 0},
-{"vwmacc.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCVX, MASK_VWMACCVX, match_opcode, 0},
+{"vmseq.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSEQVV, MASK_VMSEQVV, match_opcode, 0 },
+{"vmseq.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSEQVX, MASK_VMSEQVX, match_opcode, 0 },
+{"vmseq.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSEQVI, MASK_VMSEQVI, match_opcode, 0 },
+{"vmsne.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSNEVV, MASK_VMSNEVV, match_opcode, 0 },
+{"vmsne.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSNEVX, MASK_VMSNEVX, match_opcode, 0 },
+{"vmsne.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSNEVI, MASK_VMSNEVI, match_opcode, 0 },
+{"vmsltu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, 0 },
+{"vmsltu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLTUVX, MASK_VMSLTUVX, match_opcode, 0 },
+{"vmslt.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, 0 },
+{"vmslt.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLTVX, MASK_VMSLTVX, match_opcode, 0 },
+{"vmsleu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, 0 },
+{"vmsleu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLEUVX, MASK_VMSLEUVX, match_opcode, 0 },
+{"vmsleu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, 0 },
+{"vmsle.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, 0 },
+{"vmsle.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLEVX, MASK_VMSLEVX, match_opcode, 0 },
+{"vmsle.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, 0 },
+{"vmsgtu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSGTUVX, MASK_VMSGTUVX, match_opcode, 0 },
+{"vmsgtu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, 0 },
+{"vmsgt.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSGTVX, MASK_VMSGTVX, match_opcode, 0 },
+{"vmsgt.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, 0 },
+{"vmsgt.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, INSN_ALIAS },
+{"vmsgtu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, INSN_ALIAS },
+{"vmsge.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, INSN_ALIAS },
+{"vmsgeu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, INSN_ALIAS },
+{"vmslt.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, INSN_ALIAS },
+{"vmsltu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vu,0Vm", MATCH_VMSNEVV, MASK_VMSNEVV, match_vs1_eq_vs2, INSN_ALIAS },
+{"vmsltu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, INSN_ALIAS },
+{"vmsge.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, INSN_ALIAS },
+{"vmsgeu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vu,0Vm", MATCH_VMSEQVV, MASK_VMSEQVV, match_vs1_eq_vs2, INSN_ALIAS },
+{"vmsgeu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, INSN_ALIAS },
+
+{"vmsge.vx",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", 0, (int) M_VMSGE, match_never, INSN_MACRO },
+{"vmsge.vx",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGE, match_never, INSN_MACRO },
+{"vmsgeu.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", 1, (int) M_VMSGE, match_never, INSN_MACRO },
+{"vmsgeu.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,s,VM,VT", 1, (int) M_VMSGE, match_never, INSN_MACRO },
+
+{"vminu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMINUVV, MASK_VMINUVV, match_opcode, 0},
+{"vminu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMINUVX, MASK_VMINUVX, match_opcode, 0},
+{"vmin.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMINVV, MASK_VMINVV, match_opcode, 0},
+{"vmin.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMINVX, MASK_VMINVX, match_opcode, 0},
+{"vmaxu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMAXUVV, MASK_VMAXUVV, match_opcode, 0},
+{"vmaxu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMAXUVX, MASK_VMAXUVX, match_opcode, 0},
+{"vmax.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMAXVV, MASK_VMAXVV, match_opcode, 0},
+{"vmax.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMAXVX, MASK_VMAXVX, match_opcode, 0},
+
+{"vmul.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULVV, MASK_VMULVV, match_opcode, 0 },
+{"vmul.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULVX, MASK_VMULVX, match_opcode, 0 },
+{"vmulh.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULHVV, MASK_VMULHVV, match_opcode, 0 },
+{"vmulh.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULHVX, MASK_VMULHVX, match_opcode, 0 },
+{"vmulhu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULHUVV, MASK_VMULHUVV, match_opcode, 0 },
+{"vmulhu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULHUVX, MASK_VMULHUVX, match_opcode, 0 },
+{"vmulhsu.vv", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULHSUVV, MASK_VMULHSUVV, match_opcode, 0 },
+{"vmulhsu.vx", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULHSUVX, MASK_VMULHSUVX, match_opcode, 0 },
+
+{"vwmul.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWMULVV, MASK_VWMULVV, match_opcode, 0 },
+{"vwmul.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWMULVX, MASK_VWMULVX, match_opcode, 0 },
+{"vwmulu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWMULUVV, MASK_VWMULUVV, match_opcode, 0 },
+{"vwmulu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWMULUVX, MASK_VWMULUVX, match_opcode, 0 },
+{"vwmulsu.vv", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWMULSUVV, MASK_VWMULSUVV, match_opcode, 0 },
+{"vwmulsu.vx", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWMULSUVX, MASK_VWMULSUVX, match_opcode, 0 },
+
+{"vmacc.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMACCVV, MASK_VMACCVV, match_opcode, 0},
+{"vmacc.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VMACCVX, MASK_VMACCVX, match_opcode, 0},
+{"vnmsac.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VNMSACVV, MASK_VNMSACVV, match_opcode, 0},
+{"vnmsac.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VNMSACVX, MASK_VNMSACVX, match_opcode, 0},
+{"vmadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMADDVV, MASK_VMADDVV, match_opcode, 0},
+{"vmadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VMADDVX, MASK_VMADDVX, match_opcode, 0},
+{"vnmsub.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VNMSUBVV, MASK_VNMSUBVV, match_opcode, 0},
+{"vnmsub.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VNMSUBVX, MASK_VNMSUBVX, match_opcode, 0},
+
+{"vwmaccu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWMACCUVV, MASK_VWMACCUVV, match_opcode, 0},
+{"vwmaccu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VWMACCUVX, MASK_VWMACCUVX, match_opcode, 0},
+{"vwmacc.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWMACCVV, MASK_VWMACCVV, match_opcode, 0},
+{"vwmacc.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VWMACCVX, MASK_VWMACCVX, match_opcode, 0},
 {"vwmaccsu.vv", 0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCSUVV, MASK_VWMACCSUVV, match_opcode, 0},
+{"vwmaccsu.vv", 0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWMACCSUVV_ZV, MASK_VWMACCSUVV_ZV, match_opcode, 0},
 {"vwmaccsu.vx", 0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCSUVX, MASK_VWMACCSUVX, match_opcode, 0},
+{"vwmaccsu.vx", 0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWMACCSUVX_ZV, MASK_VWMACCSUVX_ZV, match_opcode, 0},
 {"vwmaccus.vx", 0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCUSVX, MASK_VWMACCUSVX, match_opcode, 0},
-
-{"vdivu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VDIVUVV, MASK_VDIVUVV, match_opcode, 0 },
-{"vdivu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VDIVUVX, MASK_VDIVUVX, match_opcode, 0 },
-{"vdiv.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VDIVVV, MASK_VDIVVV, match_opcode, 0 },
-{"vdiv.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VDIVVX, MASK_VDIVVX, match_opcode, 0 },
-{"vremu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VREMUVV, MASK_VREMUVV, match_opcode, 0 },
-{"vremu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VREMUVX, MASK_VREMUVX, match_opcode, 0 },
-{"vrem.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VREMVV, MASK_VREMVV, match_opcode, 0 },
-{"vrem.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VREMVX, MASK_VREMVX, match_opcode, 0 },
-
-{"vmerge.vvm", 0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMERGEVVM, MASK_VMERGEVVM, match_opcode, 0 },
-{"vmerge.vxm", 0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMERGEVXM, MASK_VMERGEVXM, match_opcode, 0 },
-{"vmerge.vim", 0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VMERGEVIM, MASK_VMERGEVIM, match_opcode, 0 },
-
-{"vmv.v.v",    0, INSN_CLASS_V,  "Vd,Vs", MATCH_VMVVV, MASK_VMVVV, match_opcode, 0 },
-{"vmv.v.x",    0, INSN_CLASS_V,  "Vd,s", MATCH_VMVVX, MASK_VMVVX, match_opcode, 0 },
-{"vmv.v.i",    0, INSN_CLASS_V,  "Vd,Vi", MATCH_VMVVI, MASK_VMVVI, match_opcode, 0 },
-
-{"vsaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSADDUVV, MASK_VSADDUVV, match_opcode, 0 },
-{"vsaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSADDUVX, MASK_VSADDUVX, match_opcode, 0 },
-{"vsaddu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VSADDUVI, MASK_VSADDUVI, match_opcode, 0 },
-{"vsadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSADDVV, MASK_VSADDVV, match_opcode, 0 },
-{"vsadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSADDVX, MASK_VSADDVX, match_opcode, 0 },
-{"vsadd.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VSADDVI, MASK_VSADDVI, match_opcode, 0 },
-{"vssubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSUBUVV, MASK_VSSUBUVV, match_opcode, 0 },
-{"vssubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSUBUVX, MASK_VSSUBUVX, match_opcode, 0 },
-{"vssub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSUBVV, MASK_VSSUBVV, match_opcode, 0 },
-{"vssub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSUBVX, MASK_VSSUBVX, match_opcode, 0 },
+{"vwmaccus.vx", 0, INSN_CLASS_XTHEADV, "Vd,s,VtVm", MATCH_VWMACCUSVX_ZV, MASK_VWMACCUSVX_ZV, match_opcode, 0},
+
+{"vdivu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDIVUVV, MASK_VDIVUVV, match_opcode, 0 },
+{"vdivu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VDIVUVX, MASK_VDIVUVX, match_opcode, 0 },
+{"vdiv.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDIVVV, MASK_VDIVVV, match_opcode, 0 },
+{"vdiv.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VDIVVX, MASK_VDIVVX, match_opcode, 0 },
+{"vremu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VREMUVV, MASK_VREMUVV, match_opcode, 0 },
+{"vremu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VREMUVX, MASK_VREMUVX, match_opcode, 0 },
+{"vrem.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VREMVV, MASK_VREMVV, match_opcode, 0 },
+{"vrem.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VREMVX, MASK_VREMVX, match_opcode, 0 },
+
+{"vmerge.vvm", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VMERGEVVM, MASK_VMERGEVVM, match_opcode, 0 },
+{"vmerge.vxm", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VMERGEVXM, MASK_VMERGEVXM, match_opcode, 0 },
+{"vmerge.vim", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0", MATCH_VMERGEVIM, MASK_VMERGEVIM, match_opcode, 0 },
+
+{"vmv.v.v",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs", MATCH_VMVVV, MASK_VMVVV, match_opcode, 0 },
+{"vmv.v.x",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s", MATCH_VMVVX, MASK_VMVVX, match_opcode, 0 },
+{"vmv.v.i",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vi", MATCH_VMVVI, MASK_VMVVI, match_opcode, 0 },
+
+{"vsaddu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSADDUVV, MASK_VSADDUVV, match_opcode, 0 },
+{"vsaddu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSADDUVX, MASK_VSADDUVX, match_opcode, 0 },
+{"vsaddu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VSADDUVI, MASK_VSADDUVI, match_opcode, 0 },
+{"vsadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSADDVV, MASK_VSADDVV, match_opcode, 0 },
+{"vsadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSADDVX, MASK_VSADDVX, match_opcode, 0 },
+{"vsadd.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VSADDVI, MASK_VSADDVI, match_opcode, 0 },
+{"vssubu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSUBUVV, MASK_VSSUBUVV, match_opcode, 0 },
+{"vssubu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSUBUVX, MASK_VSSUBUVX, match_opcode, 0 },
+{"vssub.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSUBVV, MASK_VSSUBVV, match_opcode, 0 },
+{"vssub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSUBVX, MASK_VSSUBVX, match_opcode, 0 },
 
 {"vaaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VAADDUVV, MASK_VAADDUVV, match_opcode, 0 },
 {"vaaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VAADDUVX, MASK_VAADDUVX, match_opcode, 0 },
 {"vaadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VAADDVV, MASK_VAADDVV, match_opcode, 0 },
+{"vaadd.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VAADDVV_ZV, MASK_VAADDVV_ZV, match_opcode, 0 },
 {"vaadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VAADDVX, MASK_VAADDVX, match_opcode, 0 },
+{"vaadd.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VAADDVX_ZV, MASK_VAADDVX_ZV, match_opcode, 0 },
+{"vaadd.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,ViVm", MATCH_VAADDVI, MASK_VAADDVI, match_opcode, 0 },
 {"vasubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VASUBUVV, MASK_VASUBUVV, match_opcode, 0 },
 {"vasubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VASUBUVX, MASK_VASUBUVX, match_opcode, 0 },
 {"vasub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VASUBVV, MASK_VASUBVV, match_opcode, 0 },
+{"vasub.vv", 0, INSN_CLASS_XTHEADV, "Vd,Vt,VsVm", MATCH_VASUBVV_ZV, MASK_VASUBVV_ZV, match_opcode, 0 },
 {"vasub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VASUBVX, MASK_VASUBVX, match_opcode, 0 },
+{"vasub.vx", 0, INSN_CLASS_XTHEADV, "Vd,Vt,sVm", MATCH_VASUBVX_ZV, MASK_VASUBVX_ZV, match_opcode, 0 },
 
-{"vsmul.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSMULVV, MASK_VSMULVV, match_opcode, 0 },
-{"vsmul.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSMULVX, MASK_VSMULVX, match_opcode, 0 },
+{"vsmul.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSMULVV, MASK_VSMULVV, match_opcode, 0 },
+{"vsmul.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSMULVX, MASK_VSMULVX, match_opcode, 0 },
 
-{"vssrl.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSRLVV, MASK_VSSRLVV, match_opcode, 0 },
-{"vssrl.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSRLVX, MASK_VSSRLVX, match_opcode, 0 },
-{"vssrl.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSSRLVI, MASK_VSSRLVI, match_opcode, 0 },
-{"vssra.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSRAVV, MASK_VSSRAVV, match_opcode, 0 },
-{"vssra.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSRAVX, MASK_VSSRAVX, match_opcode, 0 },
-{"vssra.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSSRAVI, MASK_VSSRAVI, match_opcode, 0 },
+{"vssrl.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSRLVV, MASK_VSSRLVV, match_opcode, 0 },
+{"vssrl.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSRLVX, MASK_VSSRLVX, match_opcode, 0 },
+{"vssrl.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSSRLVI, MASK_VSSRLVI, match_opcode, 0 },
+{"vssra.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSRAVV, MASK_VSSRAVV, match_opcode, 0 },
+{"vssra.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSRAVX, MASK_VSSRAVX, match_opcode, 0 },
+{"vssra.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSSRAVI, MASK_VSSRAVI, match_opcode, 0 },
 
 {"vnclipu.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VNCLIPUWV, MASK_VNCLIPUWV, match_opcode, 0 },
 {"vnclipu.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNCLIPUWX, MASK_VNCLIPUWX, match_opcode, 0 },
@@ -1721,190 +1741,210 @@ const struct riscv_opcode riscv_opcodes[] =
 {"vnclip.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNCLIPWX, MASK_VNCLIPWX, match_opcode, 0 },
 {"vnclip.wi",   0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VNCLIPWI, MASK_VNCLIPWI, match_opcode, 0 },
 
-{"vfadd.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFADDVV, MASK_VFADDVV, match_opcode, 0},
-{"vfadd.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFADDVF, MASK_VFADDVF, match_opcode, 0},
-{"vfsub.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSUBVV, MASK_VFSUBVV, match_opcode, 0},
-{"vfsub.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSUBVF, MASK_VFSUBVF, match_opcode, 0},
-{"vfrsub.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFRSUBVF, MASK_VFRSUBVF, match_opcode, 0},
-
-{"vfwadd.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWADDVV, MASK_VFWADDVV, match_opcode, 0},
-{"vfwadd.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWADDVF, MASK_VFWADDVF, match_opcode, 0},
-{"vfwsub.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWSUBVV, MASK_VFWSUBVV, match_opcode, 0},
-{"vfwsub.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWSUBVF, MASK_VFWSUBVF, match_opcode, 0},
-{"vfwadd.wv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWADDWV, MASK_VFWADDWV, match_opcode, 0},
-{"vfwadd.wf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWADDWF, MASK_VFWADDWF, match_opcode, 0},
-{"vfwsub.wv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWSUBWV, MASK_VFWSUBWV, match_opcode, 0},
-{"vfwsub.wf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWSUBWF, MASK_VFWSUBWF, match_opcode, 0},
-
-{"vfmul.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMULVV, MASK_VFMULVV, match_opcode, 0},
-{"vfmul.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMULVF, MASK_VFMULVF, match_opcode, 0},
-{"vfdiv.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFDIVVV, MASK_VFDIVVV, match_opcode, 0},
-{"vfdiv.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFDIVVF, MASK_VFDIVVF, match_opcode, 0},
-{"vfrdiv.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFRDIVVF, MASK_VFRDIVVF, match_opcode, 0},
-
-{"vfwmul.vv",  0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWMULVV, MASK_VFWMULVV, match_opcode, 0},
-{"vfwmul.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWMULVF, MASK_VFWMULVF, match_opcode, 0},
-
-{"vfmadd.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMADDVV, MASK_VFMADDVV, match_opcode, 0},
-{"vfmadd.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMADDVF, MASK_VFMADDVF, match_opcode, 0},
-{"vfnmadd.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMADDVV, MASK_VFNMADDVV, match_opcode, 0},
-{"vfnmadd.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMADDVF, MASK_VFNMADDVF, match_opcode, 0},
-{"vfmsub.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMSUBVV, MASK_VFMSUBVV, match_opcode, 0},
-{"vfmsub.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMSUBVF, MASK_VFMSUBVF, match_opcode, 0},
-{"vfnmsub.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMSUBVV, MASK_VFNMSUBVV, match_opcode, 0},
-{"vfnmsub.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMSUBVF, MASK_VFNMSUBVF, match_opcode, 0},
-{"vfmacc.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMACCVV, MASK_VFMACCVV, match_opcode, 0},
-{"vfmacc.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMACCVF, MASK_VFMACCVF, match_opcode, 0},
-{"vfnmacc.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMACCVV, MASK_VFNMACCVV, match_opcode, 0},
-{"vfnmacc.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMACCVF, MASK_VFNMACCVF, match_opcode, 0},
-{"vfmsac.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMSACVV, MASK_VFMSACVV, match_opcode, 0},
-{"vfmsac.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMSACVF, MASK_VFMSACVF, match_opcode, 0},
-{"vfnmsac.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMSACVV, MASK_VFNMSACVV, match_opcode, 0},
-{"vfnmsac.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMSACVF, MASK_VFNMSACVF, match_opcode, 0},
-
-{"vfwmacc.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWMACCVV, MASK_VFWMACCVV, match_opcode, 0},
-{"vfwmacc.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWMACCVF, MASK_VFWMACCVF, match_opcode, 0},
-{"vfwnmacc.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWNMACCVV, MASK_VFWNMACCVV, match_opcode, 0},
-{"vfwnmacc.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWNMACCVF, MASK_VFWNMACCVF, match_opcode, 0},
-{"vfwmsac.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWMSACVV, MASK_VFWMSACVV, match_opcode, 0},
-{"vfwmsac.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWMSACVF, MASK_VFWMSACVF, match_opcode, 0},
-{"vfwnmsac.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWNMSACVV, MASK_VFWNMSACVV, match_opcode, 0},
-{"vfwnmsac.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWNMSACVF, MASK_VFWNMSACVF, match_opcode, 0},
+{"vfadd.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFADDVV, MASK_VFADDVV, match_opcode, 0},
+{"vfadd.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFADDVF, MASK_VFADDVF, match_opcode, 0},
+{"vfsub.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSUBVV, MASK_VFSUBVV, match_opcode, 0},
+{"vfsub.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSUBVF, MASK_VFSUBVF, match_opcode, 0},
+{"vfrsub.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFRSUBVF, MASK_VFRSUBVF, match_opcode, 0},
+
+{"vfwadd.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWADDVV, MASK_VFWADDVV, match_opcode, 0},
+{"vfwadd.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWADDVF, MASK_VFWADDVF, match_opcode, 0},
+{"vfwsub.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWSUBVV, MASK_VFWSUBVV, match_opcode, 0},
+{"vfwsub.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWSUBVF, MASK_VFWSUBVF, match_opcode, 0},
+{"vfwadd.wv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWADDWV, MASK_VFWADDWV, match_opcode, 0},
+{"vfwadd.wf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWADDWF, MASK_VFWADDWF, match_opcode, 0},
+{"vfwsub.wv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWSUBWV, MASK_VFWSUBWV, match_opcode, 0},
+{"vfwsub.wf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWSUBWF, MASK_VFWSUBWF, match_opcode, 0},
+
+{"vfmul.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFMULVV, MASK_VFMULVV, match_opcode, 0},
+{"vfmul.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFMULVF, MASK_VFMULVF, match_opcode, 0},
+{"vfdiv.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFDIVVV, MASK_VFDIVVV, match_opcode, 0},
+{"vfdiv.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFDIVVF, MASK_VFDIVVF, match_opcode, 0},
+{"vfrdiv.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFRDIVVF, MASK_VFRDIVVF, match_opcode, 0},
+
+{"vfwmul.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWMULVV, MASK_VFWMULVV, match_opcode, 0},
+{"vfwmul.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWMULVF, MASK_VFWMULVF, match_opcode, 0},
+
+{"vfmadd.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMADDVV, MASK_VFMADDVV, match_opcode, 0},
+{"vfmadd.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMADDVF, MASK_VFMADDVF, match_opcode, 0},
+{"vfnmadd.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMADDVV, MASK_VFNMADDVV, match_opcode, 0},
+{"vfnmadd.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMADDVF, MASK_VFNMADDVF, match_opcode, 0},
+{"vfmsub.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMSUBVV, MASK_VFMSUBVV, match_opcode, 0},
+{"vfmsub.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMSUBVF, MASK_VFMSUBVF, match_opcode, 0},
+{"vfnmsub.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMSUBVV, MASK_VFNMSUBVV, match_opcode, 0},
+{"vfnmsub.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMSUBVF, MASK_VFNMSUBVF, match_opcode, 0},
+{"vfmacc.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMACCVV, MASK_VFMACCVV, match_opcode, 0},
+{"vfmacc.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMACCVF, MASK_VFMACCVF, match_opcode, 0},
+{"vfnmacc.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMACCVV, MASK_VFNMACCVV, match_opcode, 0},
+{"vfnmacc.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMACCVF, MASK_VFNMACCVF, match_opcode, 0},
+{"vfmsac.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMSACVV, MASK_VFMSACVV, match_opcode, 0},
+{"vfmsac.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMSACVF, MASK_VFMSACVF, match_opcode, 0},
+{"vfnmsac.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMSACVV, MASK_VFNMSACVV, match_opcode, 0},
+{"vfnmsac.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMSACVF, MASK_VFNMSACVF, match_opcode, 0},
+
+{"vfwmacc.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWMACCVV, MASK_VFWMACCVV, match_opcode, 0},
+{"vfwmacc.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWMACCVF, MASK_VFWMACCVF, match_opcode, 0},
+{"vfwnmacc.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWNMACCVV, MASK_VFWNMACCVV, match_opcode, 0},
+{"vfwnmacc.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWNMACCVF, MASK_VFWNMACCVF, match_opcode, 0},
+{"vfwmsac.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWMSACVV, MASK_VFWMSACVV, match_opcode, 0},
+{"vfwmsac.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWMSACVF, MASK_VFWMSACVF, match_opcode, 0},
+{"vfwnmsac.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWNMSACVV, MASK_VFWNMSACVV, match_opcode, 0},
+{"vfwnmsac.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWNMSACVF, MASK_VFWNMSACVF, match_opcode, 0},
 
 {"vfsqrt.v",   0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFSQRTV, MASK_VFSQRTV, match_opcode, 0},
+{"vfsqrt.v", 0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFSQRTV_ZV, MASK_VFSQRTV_ZV, match_opcode, 0},
 {"vfrsqrt7.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFRSQRT7V, MASK_VFRSQRT7V, match_opcode, 0},
 {"vfrsqrte7.v",0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFRSQRT7V, MASK_VFRSQRT7V, match_opcode, 0},
 {"vfrec7.v",   0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFREC7V, MASK_VFREC7V, match_opcode, 0},
 {"vfrece7.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFREC7V, MASK_VFREC7V, match_opcode, 0},
 {"vfclass.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCLASSV, MASK_VFCLASSV, match_opcode, 0},
+{"vfclass.v", 0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCLASSV_ZV, MASK_VFCLASSV_ZV, match_opcode, 0},
 
-{"vfmin.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMINVV, MASK_VFMINVV, match_opcode, 0},
-{"vfmin.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMINVF, MASK_VFMINVF, match_opcode, 0},
-{"vfmax.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMAXVV, MASK_VFMAXVV, match_opcode, 0},
-{"vfmax.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMAXVF, MASK_VFMAXVF, match_opcode, 0},
+{"vfmin.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFMINVV, MASK_VFMINVV, match_opcode, 0},
+{"vfmin.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFMINVF, MASK_VFMINVF, match_opcode, 0},
+{"vfmax.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFMAXVV, MASK_VFMAXVV, match_opcode, 0},
+{"vfmax.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFMAXVF, MASK_VFMAXVF, match_opcode, 0},
 
 {"vfneg.v",    0, INSN_CLASS_ZVEF, "Vd,VuVm", MATCH_VFSGNJNVV, MASK_VFSGNJNVV, match_vs1_eq_vs2, INSN_ALIAS },
 {"vfabs.v",    0, INSN_CLASS_ZVEF, "Vd,VuVm", MATCH_VFSGNJXVV, MASK_VFSGNJXVV, match_vs1_eq_vs2, INSN_ALIAS },
 
-{"vfsgnj.vv",  0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJVV, MASK_VFSGNJVV, match_opcode, 0},
-{"vfsgnj.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJVF, MASK_VFSGNJVF, match_opcode, 0},
-{"vfsgnjn.vv", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJNVV, MASK_VFSGNJNVV, match_opcode, 0},
-{"vfsgnjn.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJNVF, MASK_VFSGNJNVF, match_opcode, 0},
-{"vfsgnjx.vv", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJXVV, MASK_VFSGNJXVV, match_opcode, 0},
-{"vfsgnjx.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJXVF, MASK_VFSGNJXVF, match_opcode, 0},
-
-{"vmfeq.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFEQVV, MASK_VMFEQVV, match_opcode, 0},
-{"vmfeq.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFEQVF, MASK_VMFEQVF, match_opcode, 0},
-{"vmfne.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFNEVV, MASK_VMFNEVV, match_opcode, 0},
-{"vmfne.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFNEVF, MASK_VMFNEVF, match_opcode, 0},
-{"vmflt.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, 0},
-{"vmflt.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFLTVF, MASK_VMFLTVF, match_opcode, 0},
-{"vmfle.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, 0},
-{"vmfle.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFLEVF, MASK_VMFLEVF, match_opcode, 0},
-{"vmfgt.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFGTVF, MASK_VMFGTVF, match_opcode, 0},
-{"vmfge.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFGEVF, MASK_VMFGEVF, match_opcode, 0},
+{"vfsgnj.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSGNJVV, MASK_VFSGNJVV, match_opcode, 0},
+{"vfsgnj.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSGNJVF, MASK_VFSGNJVF, match_opcode, 0},
+{"vfsgnjn.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSGNJNVV, MASK_VFSGNJNVV, match_opcode, 0},
+{"vfsgnjn.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSGNJNVF, MASK_VFSGNJNVF, match_opcode, 0},
+{"vfsgnjx.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSGNJXVV, MASK_VFSGNJXVV, match_opcode, 0},
+{"vfsgnjx.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSGNJXVF, MASK_VFSGNJXVF, match_opcode, 0},
+
+{"vmfeq.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFEQVV, MASK_VMFEQVV, match_opcode, 0},
+{"vmfeq.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFEQVF, MASK_VMFEQVF, match_opcode, 0},
+{"vmfne.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFNEVV, MASK_VMFNEVV, match_opcode, 0},
+{"vmfne.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFNEVF, MASK_VMFNEVF, match_opcode, 0},
+{"vmflt.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, 0},
+{"vmflt.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFLTVF, MASK_VMFLTVF, match_opcode, 0},
+{"vmfle.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, 0},
+{"vmfle.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFLEVF, MASK_VMFLEVF, match_opcode, 0},
+{"vmfgt.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFGTVF, MASK_VMFGTVF, match_opcode, 0},
+{"vmfge.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFGEVF, MASK_VMFGEVF, match_opcode, 0},
 
 /* These aliases are for assembly but not disassembly.  */
-{"vmfgt.vv",    0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, INSN_ALIAS},
-{"vmfge.vv",   0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, INSN_ALIAS},
+{"vmfgt.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, INSN_ALIAS},
+{"vmfge.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, INSN_ALIAS},
 
-{"vfmerge.vfm",0, INSN_CLASS_ZVEF, "Vd,Vt,S,V0", MATCH_VFMERGEVFM, MASK_VFMERGEVFM, match_opcode, 0},
-{"vfmv.v.f",   0, INSN_CLASS_ZVEF, "Vd,S", MATCH_VFMVVF, MASK_VFMVVF, match_opcode, 0 },
+{"vfmerge.vfm",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,S,V0", MATCH_VFMERGEVFM, MASK_VFMERGEVFM, match_opcode, 0},
+{"vfmv.v.f",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S", MATCH_VFMVVF, MASK_VFMVVF, match_opcode, 0 },
 
 {"vfcvt.xu.f.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTXUFV, MASK_VFCVTXUFV, match_opcode, 0},
+{"vfcvt.xu.f.v",     0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTXUFV_ZV, MASK_VFCVTXUFV_ZV, match_opcode, 0},
 {"vfcvt.x.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTXFV, MASK_VFCVTXFV, match_opcode, 0},
+{"vfcvt.x.f.v",      0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTXFV_ZV, MASK_VFCVTXFV_ZV, match_opcode, 0},
 {"vfcvt.rtz.xu.f.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTRTZXUFV, MASK_VFCVTRTZXUFV, match_opcode, 0},
 {"vfcvt.rtz.x.f.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTRTZXFV, MASK_VFCVTRTZXFV, match_opcode, 0},
 {"vfcvt.f.xu.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTFXUV, MASK_VFCVTFXUV, match_opcode, 0},
+{"vfcvt.f.xu.v",     0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTFXUV_ZV, MASK_VFCVTFXUV_ZV, match_opcode, 0},
 {"vfcvt.f.x.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTFXV, MASK_VFCVTFXV, match_opcode, 0},
+{"vfcvt.f.x.v",      0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTFXV_ZV, MASK_VFCVTFXV_ZV, match_opcode, 0},
 
 {"vfwcvt.xu.f.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTXUFV, MASK_VFWCVTXUFV, match_opcode, 0},
+{"vfwcvt.xu.f.v",     0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTXUFV_ZV, MASK_VFWCVTXUFV_ZV, match_opcode, 0},
 {"vfwcvt.x.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTXFV, MASK_VFWCVTXFV, match_opcode, 0},
+{"vfwcvt.x.f.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTXFV_ZV, MASK_VFWCVTXFV_ZV, match_opcode, 0},
 {"vfwcvt.rtz.xu.f.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTRTZXUFV, MASK_VFWCVTRTZXUFV, match_opcode, 0},
 {"vfwcvt.rtz.x.f.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTRTZXFV, MASK_VFWCVTRTZXFV, match_opcode, 0},
 {"vfwcvt.f.xu.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFXUV, MASK_VFWCVTFXUV, match_opcode, 0},
+{"vfwcvt.f.xu.v",     0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTFXUV_ZV, MASK_VFWCVTFXUV_ZV, match_opcode, 0},
 {"vfwcvt.f.x.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFXV, MASK_VFWCVTFXV, match_opcode, 0},
+{"vfwcvt.f.x.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTFXV_ZV, MASK_VFWCVTFXV_ZV, match_opcode, 0},
 {"vfwcvt.f.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFFV, MASK_VFWCVTFFV, match_opcode, 0},
+{"vfwcvt.f.f.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTFFV_ZV, MASK_VFWCVTFFV_ZV, match_opcode, 0},
 
 {"vfncvt.xu.f.w",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTXUFW, MASK_VFNCVTXUFW, match_opcode, 0},
 {"vfncvt.x.f.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTXFW, MASK_VFNCVTXFW, match_opcode, 0},
-{"vfncvt.rtz.xu.f.w", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTRTZXUFW, MASK_VFNCVTRTZXUFW, match_opcode, 0},
-{"vfncvt.rtz.x.f.w",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTRTZXFW, MASK_VFNCVTRTZXFW, match_opcode, 0},
-{"vfncvt.f.xu.w",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFXUW, MASK_VFNCVTFXUW, match_opcode, 0},
-{"vfncvt.f.x.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFXW, MASK_VFNCVTFXW, match_opcode, 0},
 {"vfncvt.f.f.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFFW, MASK_VFNCVTFFW, match_opcode, 0},
 {"vfncvt.rod.f.f.w",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTRODFFW, MASK_VFNCVTRODFFW, match_opcode, 0},
 
-{"vredsum.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDSUMVS, MASK_VREDSUMVS, match_opcode, 0},
-{"vredmaxu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMAXUVS, MASK_VREDMAXUVS, match_opcode, 0},
-{"vredmax.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMAXVS, MASK_VREDMAXVS, match_opcode, 0},
-{"vredminu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMINUVS, MASK_VREDMINUVS, match_opcode, 0},
-{"vredmin.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMINVS, MASK_VREDMINVS, match_opcode, 0},
-{"vredand.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDANDVS, MASK_VREDANDVS, match_opcode, 0},
-{"vredor.vs",  0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDORVS, MASK_VREDORVS, match_opcode, 0},
-{"vredxor.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDXORVS, MASK_VREDXORVS, match_opcode, 0},
+{"vredsum.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDSUMVS, MASK_VREDSUMVS, match_opcode, 0},
+{"vredmaxu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMAXUVS, MASK_VREDMAXUVS, match_opcode, 0},
+{"vredmax.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMAXVS, MASK_VREDMAXVS, match_opcode, 0},
+{"vredminu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMINUVS, MASK_VREDMINUVS, match_opcode, 0},
+{"vredmin.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMINVS, MASK_VREDMINVS, match_opcode, 0},
+{"vredand.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDANDVS, MASK_VREDANDVS, match_opcode, 0},
+{"vredor.vs",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDORVS, MASK_VREDORVS, match_opcode, 0},
+{"vredxor.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDXORVS, MASK_VREDXORVS, match_opcode, 0},
 
-{"vwredsumu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VWREDSUMUVS, MASK_VWREDSUMUVS, match_opcode, 0},
-{"vwredsum.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VWREDSUMVS, MASK_VWREDSUMVS, match_opcode, 0},
+{"vwredsumu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VWREDSUMUVS, MASK_VWREDSUMUVS, match_opcode, 0},
+{"vwredsum.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VWREDSUMVS, MASK_VWREDSUMVS, match_opcode, 0},
 
-{"vfredosum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDOSUMVS, MASK_VFREDOSUMVS, match_opcode, 0},
+{"vfredosum.vs",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFREDOSUMVS, MASK_VFREDOSUMVS, match_opcode, 0},
 {"vfredusum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDUSUMVS, MASK_VFREDUSUMVS, match_opcode, 0},
 {"vfredsum.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDUSUMVS, MASK_VFREDUSUMVS, match_opcode, INSN_ALIAS},
-{"vfredmax.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDMAXVS, MASK_VFREDMAXVS, match_opcode, 0},
-{"vfredmin.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDMINVS, MASK_VFREDMINVS, match_opcode, 0},
+{"vfredsum.vs", 0, INSN_CLASS_XTHEADV,   "Vd,Vt,VsVm", MATCH_VFREDUSUMVS, MASK_VFREDUSUMVS, match_opcode, 0},
+{"vfredmax.vs", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFREDMAXVS, MASK_VFREDMAXVS, match_opcode, 0},
+{"vfredmin.vs", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFREDMINVS, MASK_VFREDMINVS, match_opcode, 0},
 
-{"vfwredosum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDOSUMVS, MASK_VFWREDOSUMVS, match_opcode, 0},
+{"vfwredosum.vs",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWREDOSUMVS, MASK_VFWREDOSUMVS, match_opcode, 0},
 {"vfwredusum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS, MASK_VFWREDUSUMVS, match_opcode, 0},
 {"vfwredsum.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS, MASK_VFWREDUSUMVS, match_opcode, INSN_ALIAS},
+{"vfwredsum.vs", 0, INSN_CLASS_XTHEADV,   "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS, MASK_VFWREDUSUMVS, match_opcode, 0},
 
 {"vmmv.m",     0, INSN_CLASS_V, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM, match_vs1_eq_vs2, INSN_ALIAS},
-{"vmcpy.m",    0, INSN_CLASS_V, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM, match_vs1_eq_vs2, INSN_ALIAS},
-{"vmclr.m",    0, INSN_CLASS_V, "Vv", MATCH_VMXORMM, MASK_VMXORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
-{"vmset.m",    0, INSN_CLASS_V, "Vv", MATCH_VMXNORMM, MASK_VMXNORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
-{"vmnot.m",    0, INSN_CLASS_V, "Vd,Vu", MATCH_VMNANDMM, MASK_VMNANDMM, match_vs1_eq_vs2, INSN_ALIAS},
+{"vmcpy.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM, match_vs1_eq_vs2, INSN_ALIAS},
+{"vmclr.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vv", MATCH_VMXORMM, MASK_VMXORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
+{"vmset.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vv", MATCH_VMXNORMM, MASK_VMXNORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
+{"vmnot.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vu", MATCH_VMNANDMM, MASK_VMNANDMM, match_vs1_eq_vs2, INSN_ALIAS},
 
-{"vmand.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDMM, MASK_VMANDMM, match_opcode, 0},
-{"vmnand.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMNANDMM, MASK_VMNANDMM, match_opcode, 0},
+{"vmand.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMANDMM, MASK_VMANDMM, match_opcode, 0},
+{"vmnand.mm",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMNANDMM, MASK_VMNANDMM, match_opcode, 0},
 {"vmandn.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDNMM, MASK_VMANDNMM, match_opcode, 0},
 {"vmandnot.mm",0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDNMM, MASK_VMANDNMM, match_opcode, INSN_ALIAS},
-{"vmxor.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMXORMM, MASK_VMXORMM, match_opcode, 0},
-{"vmor.mm",    0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORMM, MASK_VMORMM, match_opcode, 0},
-{"vmnor.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMNORMM, MASK_VMNORMM, match_opcode, 0},
+{"vmandnot.mm",0, INSN_CLASS_XTHEADV, "Vd,Vt,Vs", MATCH_VMANDNMM, MASK_VMANDNMM, match_opcode, 0},
+{"vmxor.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMXORMM, MASK_VMXORMM, match_opcode, 0},
+{"vmor.mm",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMORMM, MASK_VMORMM, match_opcode, 0},
+{"vmnor.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMNORMM, MASK_VMNORMM, match_opcode, 0},
 {"vmorn.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORNMM, MASK_VMORNMM, match_opcode, 0},
 {"vmornot.mm", 0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORNMM, MASK_VMORNMM, match_opcode, INSN_ALIAS},
-{"vmxnor.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMXNORMM, MASK_VMXNORMM, match_opcode, 0},
+{"vmornot.mm", 0, INSN_CLASS_XTHEADV, "Vd,Vt,Vs", MATCH_VMORNMM, MASK_VMORNMM, match_opcode, 0},
+{"vmxnor.mm",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMXNORMM, MASK_VMXNORMM, match_opcode, 0},
 
 {"vcpop.m",    0, INSN_CLASS_V, "d,VtVm", MATCH_VCPOPM, MASK_VCPOPM, match_opcode, 0},
 {"vpopc.m",    0, INSN_CLASS_V, "d,VtVm", MATCH_VCPOPM, MASK_VCPOPM, match_opcode, INSN_ALIAS},
 {"vfirst.m",   0, INSN_CLASS_V, "d,VtVm", MATCH_VFIRSTM, MASK_VFIRSTM, match_opcode, 0},
 {"vmsbf.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSBFM, MASK_VMSBFM, match_opcode, 0},
+{"vmsbf.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSBFM_ZV, MASK_VMSBFM_ZV, match_opcode, 0},
 {"vmsif.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSIFM, MASK_VMSIFM, match_opcode, 0},
+{"vmsif.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSIFM_ZV, MASK_VMSIFM_ZV, match_opcode, 0},
 {"vmsof.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSOFM, MASK_VMSOFM, match_opcode, 0},
+{"vmsof.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSOFM_ZV, MASK_VMSOFM_ZV, match_opcode, 0},
 {"viota.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VIOTAM, MASK_VIOTAM, match_opcode, 0},
+{"viota.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VIOTAM_ZV, MASK_VIOTAM_ZV, match_opcode, 0},
 {"vid.v",      0, INSN_CLASS_V, "VdVm", MATCH_VIDV, MASK_VIDV, match_opcode, 0},
+{"vid.v",      0, INSN_CLASS_XTHEADV, "VdVm", MATCH_VIDV_ZV, MASK_VIDV_ZV, match_opcode, 0},
 
 {"vmv.x.s",    0, INSN_CLASS_V, "d,Vt", MATCH_VMVXS, MASK_VMVXS, match_opcode, 0},
+{"vmv.x.s",    0, INSN_CLASS_XTHEADV, "d,Vt", MATCH_VMVXS_ZV, MASK_VMVXS_ZV, match_opcode, INSN_ALIAS},
 {"vmv.s.x",    0, INSN_CLASS_V, "Vd,s", MATCH_VMVSX, MASK_VMVSX, match_opcode, 0},
+{"vmv.s.x",    0, INSN_CLASS_XTHEADV, "Vd,s", MATCH_VMVSX_ZV, MASK_VMVSX_ZV, match_opcode, 0},
 
-{"vfmv.f.s",   0, INSN_CLASS_ZVEF, "D,Vt", MATCH_VFMVFS, MASK_VFMVFS, match_opcode, 0},
-{"vfmv.s.f",   0, INSN_CLASS_ZVEF, "Vd,S", MATCH_VFMVSF, MASK_VFMVSF, match_opcode, 0},
+{"vfmv.f.s",   0, INSN_CLASS_V, "D,Vt", MATCH_VFMVFS, MASK_VFMVFS, match_opcode, 0},
+{"vfmv.f.s",   0, INSN_CLASS_XTHEADV, "D,Vt", MATCH_VFMVFS_ZV, MASK_VFMVFS_ZV, match_opcode, 0},
+{"vfmv.s.f",   0, INSN_CLASS_V, "Vd,S", MATCH_VFMVSF, MASK_VFMVSF, match_opcode, 0},
+{"vfmv.s.f",   0, INSN_CLASS_XTHEADV, "Vd,S", MATCH_VFMVSF_ZV, MASK_VFMVSF_ZV, match_opcode, 0},
 
-{"vslideup.vx",0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDEUPVX, MASK_VSLIDEUPVX, match_opcode, 0},
-{"vslideup.vi",0, INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VSLIDEUPVI, MASK_VSLIDEUPVI, match_opcode, 0},
-{"vslidedown.vx",0,INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDEDOWNVX, MASK_VSLIDEDOWNVX, match_opcode, 0},
-{"vslidedown.vi",0,INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VSLIDEDOWNVI, MASK_VSLIDEDOWNVI, match_opcode, 0},
+{"vslideup.vx",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDEUPVX, MASK_VSLIDEUPVX, match_opcode, 0},
+{"vslideup.vi",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm", MATCH_VSLIDEUPVI, MASK_VSLIDEUPVI, match_opcode, 0},
+{"vslidedown.vx",0,INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDEDOWNVX, MASK_VSLIDEDOWNVX, match_opcode, 0},
+{"vslidedown.vi",0,INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm", MATCH_VSLIDEDOWNVI, MASK_VSLIDEDOWNVI, match_opcode, 0},
 
-{"vslide1up.vx",    0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDE1UPVX, MASK_VSLIDE1UPVX, match_opcode, 0},
-{"vslide1down.vx",  0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDE1DOWNVX, MASK_VSLIDE1DOWNVX, match_opcode, 0},
+{"vslide1up.vx",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDE1UPVX, MASK_VSLIDE1UPVX, match_opcode, 0},
+{"vslide1down.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDE1DOWNVX, MASK_VSLIDE1DOWNVX, match_opcode, 0},
 {"vfslide1up.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSLIDE1UPVF, MASK_VFSLIDE1UPVF, match_opcode, 0},
 {"vfslide1down.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSLIDE1DOWNVF, MASK_VFSLIDE1DOWNVF, match_opcode, 0},
 
-{"vrgather.vv",    0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VRGATHERVV, MASK_VRGATHERVV, match_opcode, 0},
-{"vrgather.vx",    0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VRGATHERVX, MASK_VRGATHERVX, match_opcode, 0},
-{"vrgather.vi",    0, INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VRGATHERVI, MASK_VRGATHERVI, match_opcode, 0},
+{"vrgather.vv",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VRGATHERVV, MASK_VRGATHERVV, match_opcode, 0},
+{"vrgather.vx",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VRGATHERVX, MASK_VRGATHERVX, match_opcode, 0},
+{"vrgather.vi",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm", MATCH_VRGATHERVI, MASK_VRGATHERVI, match_opcode, 0},
 {"vrgatherei16.vv",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VRGATHEREI16VV, MASK_VRGATHEREI16VV, match_opcode, 0},
 
-{"vcompress.vm",0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VCOMPRESSVM, MASK_VCOMPRESSVM, match_opcode, 0},
+{"vcompress.vm",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VCOMPRESSVM, MASK_VCOMPRESSVM, match_opcode, 0},
 
 {"vmv1r.v",    0, INSN_CLASS_V, "Vd,Vt", MATCH_VMV1RV, MASK_VMV1RV, match_opcode, 0},
 {"vmv2r.v",    0, INSN_CLASS_V, "Vd,Vt", MATCH_VMV2RV, MASK_VMV2RV, match_opcode, 0},
@@ -1980,6 +2020,424 @@ const struct riscv_opcode riscv_opcodes[] =
 {"c.zext.w",  64, INSN_CLASS_ZCB_AND_ZBA, "Cs",  MATCH_C_ZEXT_W, MASK_C_ZEXT_W, match_opcode, 0 },
 {"c.zext.b",   0, INSN_CLASS_ZCB, "Cs",  MATCH_C_ZEXT_B, MASK_C_ZEXT_B, match_opcode, 0 },
 {"c.sext.w",  64, INSN_CLASS_ZCB, "d",  MATCH_C_ADDIW, MASK_C_ADDIW|MASK_RVC_IMM, match_rd_nonzero, INSN_ALIAS },
+/* RVV 0.7 instructions.*/
+{"vlb.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLBV, MASK_VLBV, match_opcode, INSN_DREF },
+{"vlh.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLHV, MASK_VLHV, match_opcode, INSN_DREF },
+{"vlw.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLWV, MASK_VLWV, match_opcode, INSN_DREF },
+{"vlbu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE8V, MASK_VLE8V, match_opcode, INSN_DREF },
+{"vlhu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE16V, MASK_VLE16V, match_opcode, INSN_DREF },
+{"vlwu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE32V, MASK_VLE32V, match_opcode, INSN_DREF },
+{"vle.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE64V, MASK_VLE64V, match_opcode, INSN_DREF },
+{"vsb.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE8V, MASK_VSE8V, match_opcode, INSN_DREF },
+{"vsh.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE16V, MASK_VSE16V, match_opcode, INSN_DREF },
+{"vsw.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE32V, MASK_VSE32V, match_opcode, INSN_DREF },
+{"vse.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE64V, MASK_VSE64V, match_opcode, INSN_DREF },
+
+{"vlsb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSBV, MASK_VLSBV, match_opcode, INSN_DREF },
+{"vlsh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSHV, MASK_VLSHV, match_opcode, INSN_DREF },
+{"vlsw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSWV, MASK_VLSWV, match_opcode, INSN_DREF },
+{"vlsbu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE8V, MASK_VLSE8V, match_opcode, INSN_DREF },
+{"vlshu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE16V, MASK_VLSE16V, match_opcode, INSN_DREF },
+{"vlswu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE32V, MASK_VLSE32V, match_opcode, INSN_DREF },
+{"vlse.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE64V, MASK_VLSE64V, match_opcode, INSN_DREF },
+{"vssb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE8V, MASK_VSSE8V, match_opcode, INSN_DREF },
+{"vssh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE16V, MASK_VSSE16V, match_opcode, INSN_DREF },
+{"vssw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE32V, MASK_VSSE32V, match_opcode, INSN_DREF },
+{"vsse.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE64V, MASK_VSSE64V, match_opcode, INSN_DREF },
+
+{"vlxb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXBV, MASK_VLXBV, match_opcode, INSN_DREF },
+{"vlxh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXHV, MASK_VLXHV, match_opcode, INSN_DREF },
+{"vlxw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXWV, MASK_VLXWV, match_opcode, INSN_DREF },
+{"vlxbu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI8V, MASK_VLOXEI8V, match_opcode, INSN_DREF },
+{"vlxhu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI16V, MASK_VLOXEI16V, match_opcode, INSN_DREF },
+{"vlxwu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI32V, MASK_VLOXEI16V, match_opcode, INSN_DREF },
+{"vlxe.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI64V, MASK_VLOXEI16V, match_opcode, INSN_DREF },
+{"vsxb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI8V, MASK_VSOXEI8V, match_opcode, INSN_DREF },
+{"vsxh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI16V, MASK_VSOXEI16V, match_opcode, INSN_DREF },
+{"vsxw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI32V, MASK_VSOXEI32V, match_opcode, INSN_DREF },
+{"vsxe.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI64V, MASK_VSOXEI64V, match_opcode, INSN_DREF },
+{"vsuxb.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXBV, MASK_VSUXBV, match_opcode, INSN_DREF },
+{"vsuxh.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXHV, MASK_VSUXHV, match_opcode, INSN_DREF },
+{"vsuxw.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXWV, MASK_VSUXWV, match_opcode, INSN_DREF },
+{"vsuxe.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXEV, MASK_VSUXEV, match_opcode, INSN_DREF },
+
+{"vlbff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLBFFV, MASK_VLBFFV, match_opcode, INSN_DREF },
+{"vlhff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLHFFV, MASK_VLHFFV, match_opcode, INSN_DREF },
+{"vlwff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLWFFV, MASK_VLWFFV, match_opcode, INSN_DREF },
+{"vlbuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE8FFV, MASK_VLE8FFV, match_opcode, INSN_DREF },
+{"vlhuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE16FFV, MASK_VLE16FFV, match_opcode, INSN_DREF },
+{"vlwuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE32FFV, MASK_VLE32FFV, match_opcode, INSN_DREF },
+{"vleff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE64FFV, MASK_VLE64FFV, match_opcode, INSN_DREF },
+
+{"vlseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2BV, MASK_VLSEG2BV, match_opcode, INSN_DREF },
+{"vlseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2HV, MASK_VLSEG2HV, match_opcode, INSN_DREF },
+{"vlseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2WV, MASK_VLSEG2WV, match_opcode, INSN_DREF },
+{"vlseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E8V, MASK_VLSEG2E8V, match_opcode, INSN_DREF },
+{"vlseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E16V, MASK_VLSEG2E16V, match_opcode, INSN_DREF },
+{"vlseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E32V, MASK_VLSEG2E32V, match_opcode, INSN_DREF },
+{"vlseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E64V, MASK_VLSEG2E64V, match_opcode, INSN_DREF },
+{"vsseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E8V, MASK_VSSEG2E8V, match_opcode, INSN_DREF },
+{"vsseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E16V, MASK_VSSEG2E16V, match_opcode, INSN_DREF },
+{"vsseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E32V, MASK_VSSEG2E32V, match_opcode, INSN_DREF },
+{"vsseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E64V, MASK_VSSEG2E64V, match_opcode, INSN_DREF },
+
+{"vlseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3BV, MASK_VLSEG3BV, match_opcode, INSN_DREF },
+{"vlseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3HV, MASK_VLSEG3HV, match_opcode, INSN_DREF },
+{"vlseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3WV, MASK_VLSEG3WV, match_opcode, INSN_DREF },
+{"vlseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E8V, MASK_VLSEG3E8V, match_opcode, INSN_DREF },
+{"vlseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E16V, MASK_VLSEG3E16V, match_opcode, INSN_DREF },
+{"vlseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32V, MASK_VLSEG3E32V, match_opcode, INSN_DREF },
+{"vlseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32V, MASK_VLSEG3E32V, match_opcode, INSN_DREF },
+{"vsseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E8V, MASK_VSSEG3E8V, match_opcode, INSN_DREF },
+{"vsseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E16V, MASK_VSSEG3E16V, match_opcode, INSN_DREF },
+{"vsseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E32V, MASK_VSSEG3E32V, match_opcode, INSN_DREF },
+{"vsseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E64V, MASK_VSSEG3E64V, match_opcode, INSN_DREF },
+
+{"vlseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4BV, MASK_VLSEG4BV, match_opcode, INSN_DREF },
+{"vlseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4HV, MASK_VLSEG4HV, match_opcode, INSN_DREF },
+{"vlseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4WV, MASK_VLSEG4WV, match_opcode, INSN_DREF },
+{"vlseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E8V, MASK_VLSEG4E8V, match_opcode, INSN_DREF },
+{"vlseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E16V, MASK_VLSEG4E16V, match_opcode, INSN_DREF },
+{"vlseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E32V, MASK_VLSEG4E32V, match_opcode, INSN_DREF },
+{"vlseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E64V, MASK_VLSEG4E64V, match_opcode, INSN_DREF },
+{"vsseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E8V, MASK_VSSEG4E8V, match_opcode, INSN_DREF },
+{"vsseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E16V, MASK_VSSEG4E16V, match_opcode, INSN_DREF },
+{"vsseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E32V, MASK_VSSEG4E32V, match_opcode, INSN_DREF },
+{"vsseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E64V, MASK_VSSEG4E64V, match_opcode, INSN_DREF },
+
+{"vlseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5BV, MASK_VLSEG5BV, match_opcode, INSN_DREF },
+{"vlseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5HV, MASK_VLSEG5HV, match_opcode, INSN_DREF },
+{"vlseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5WV, MASK_VLSEG5WV, match_opcode, INSN_DREF },
+{"vlseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E8V, MASK_VLSEG5E8V, match_opcode, INSN_DREF },
+{"vlseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E16V, MASK_VLSEG5E16V, match_opcode, INSN_DREF },
+{"vlseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E32V, MASK_VLSEG5E32V, match_opcode, INSN_DREF },
+{"vlseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E64V, MASK_VLSEG5E64V, match_opcode, INSN_DREF },
+{"vsseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E8V, MASK_VSSEG5E8V, match_opcode, INSN_DREF },
+{"vsseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E16V, MASK_VSSEG5E16V, match_opcode, INSN_DREF },
+{"vsseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E32V, MASK_VSSEG5E32V, match_opcode, INSN_DREF },
+{"vsseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E64V, MASK_VSSEG5E64V, match_opcode, INSN_DREF },
+
+{"vlseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6BV, MASK_VLSEG6BV, match_opcode, INSN_DREF },
+{"vlseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6HV, MASK_VLSEG6HV, match_opcode, INSN_DREF },
+{"vlseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6WV, MASK_VLSEG6WV, match_opcode, INSN_DREF },
+{"vlseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E8V, MASK_VLSEG6E8V, match_opcode, INSN_DREF },
+{"vlseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E16V, MASK_VLSEG6E16V, match_opcode, INSN_DREF },
+{"vlseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E32V, MASK_VLSEG6E32V, match_opcode, INSN_DREF },
+{"vlseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E64V, MASK_VLSEG6E64V, match_opcode, INSN_DREF },
+{"vsseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E8V, MASK_VSSEG6E8V, match_opcode, INSN_DREF },
+{"vsseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E16V, MASK_VSSEG6E16V, match_opcode, INSN_DREF },
+{"vsseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E32V, MASK_VSSEG6E32V, match_opcode, INSN_DREF },
+{"vsseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E64V, MASK_VSSEG6E64V, match_opcode, INSN_DREF },
+
+{"vlseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7BV, MASK_VLSEG7BV, match_opcode, INSN_DREF },
+{"vlseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7HV, MASK_VLSEG7HV, match_opcode, INSN_DREF },
+{"vlseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7WV, MASK_VLSEG7WV, match_opcode, INSN_DREF },
+{"vlseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E8V, MASK_VLSEG7E8V, match_opcode, INSN_DREF },
+{"vlseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E16V, MASK_VLSEG7E16V, match_opcode, INSN_DREF },
+{"vlseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E32V, MASK_VLSEG7E32V, match_opcode, INSN_DREF },
+{"vlseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E64V, MASK_VLSEG7E64V, match_opcode, INSN_DREF },
+{"vsseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E8V, MASK_VSSEG7E8V, match_opcode, INSN_DREF },
+{"vsseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E16V, MASK_VSSEG7E16V, match_opcode, INSN_DREF },
+{"vsseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E32V, MASK_VSSEG7E32V, match_opcode, INSN_DREF },
+{"vsseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E64V, MASK_VSSEG7E64V, match_opcode, INSN_DREF },
+
+{"vlseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8BV, MASK_VLSEG8BV, match_opcode, INSN_DREF },
+{"vlseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8HV, MASK_VLSEG8HV, match_opcode, INSN_DREF },
+{"vlseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8WV, MASK_VLSEG8WV, match_opcode, INSN_DREF },
+{"vlseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E8V, MASK_VLSEG8E8V, match_opcode, INSN_DREF },
+{"vlseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E16V, MASK_VLSEG8E16V, match_opcode, INSN_DREF },
+{"vlseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E32V, MASK_VLSEG8E32V, match_opcode, INSN_DREF },
+{"vlseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E64V, MASK_VLSEG8E64V, match_opcode, INSN_DREF },
+{"vsseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E8V, MASK_VSSEG8E8V, match_opcode, INSN_DREF },
+{"vsseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E16V, MASK_VSSEG8E16V, match_opcode, INSN_DREF },
+{"vsseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E32V, MASK_VSSEG8E32V, match_opcode, INSN_DREF },
+{"vsseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E64V, MASK_VSSEG8E64V, match_opcode, INSN_DREF },
+
+{"vlsseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2BV, MASK_VLSSEG2BV, match_opcode, INSN_DREF },
+{"vlsseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2HV, MASK_VLSSEG2HV, match_opcode, INSN_DREF },
+{"vlsseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2WV, MASK_VLSSEG2WV, match_opcode, INSN_DREF },
+{"vlsseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E8V, MASK_VLSSEG2E8V, match_opcode, INSN_DREF },
+{"vlsseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E16V, MASK_VLSSEG2E16V, match_opcode, INSN_DREF },
+{"vlsseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E32V, MASK_VLSSEG2E32V, match_opcode, INSN_DREF },
+{"vlsseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E64V, MASK_VLSSEG2E64V, match_opcode, INSN_DREF },
+{"vssseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E8V, MASK_VSSSEG2E8V, match_opcode, INSN_DREF },
+{"vssseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E16V, MASK_VSSSEG2E16V, match_opcode, INSN_DREF },
+{"vssseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E32V, MASK_VSSSEG2E32V, match_opcode, INSN_DREF },
+{"vssseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E64V, MASK_VSSSEG2E64V, match_opcode, INSN_DREF },
+
+{"vlsseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3BV, MASK_VLSSEG3BV, match_opcode, INSN_DREF },
+{"vlsseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3HV, MASK_VLSSEG3HV, match_opcode, INSN_DREF },
+{"vlsseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3WV, MASK_VLSSEG3WV, match_opcode, INSN_DREF },
+{"vlsseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E8V, MASK_VLSSEG3E8V, match_opcode, INSN_DREF },
+{"vlsseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E16V, MASK_VLSSEG3E16V, match_opcode, INSN_DREF },
+{"vlsseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E32V, MASK_VLSSEG3E32V, match_opcode, INSN_DREF },
+{"vlsseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E64V, MASK_VLSSEG3E64V, match_opcode, INSN_DREF },
+{"vssseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E8V, MASK_VSSSEG3E8V, match_opcode, INSN_DREF },
+{"vssseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E16V, MASK_VSSSEG3E16V, match_opcode, INSN_DREF },
+{"vssseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E32V, MASK_VSSSEG3E32V, match_opcode, INSN_DREF },
+{"vssseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E64V, MASK_VSSSEG3E64V, match_opcode, INSN_DREF },
+
+{"vlsseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4BV, MASK_VLSSEG4BV, match_opcode, INSN_DREF },
+{"vlsseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4HV, MASK_VLSSEG4HV, match_opcode, INSN_DREF },
+{"vlsseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4WV, MASK_VLSSEG4WV, match_opcode, INSN_DREF },
+{"vlsseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E8V, MASK_VLSSEG4E8V, match_opcode, INSN_DREF },
+{"vlsseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E16V, MASK_VLSSEG4E16V, match_opcode, INSN_DREF },
+{"vlsseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E32V, MASK_VLSSEG4E32V, match_opcode, INSN_DREF },
+{"vlsseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E64V, MASK_VLSSEG4E64V, match_opcode, INSN_DREF },
+{"vssseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E8V, MASK_VSSSEG4E8V, match_opcode, INSN_DREF },
+{"vssseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E16V, MASK_VSSSEG4E16V, match_opcode, INSN_DREF },
+{"vssseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E32V, MASK_VSSSEG4E32V, match_opcode, INSN_DREF },
+{"vssseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E64V, MASK_VSSSEG4E64V, match_opcode, INSN_DREF },
+
+{"vlsseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5BV, MASK_VLSSEG5BV, match_opcode, INSN_DREF },
+{"vlsseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5HV, MASK_VLSSEG5HV, match_opcode, INSN_DREF },
+{"vlsseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5WV, MASK_VLSSEG5WV, match_opcode, INSN_DREF },
+{"vlsseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E8V, MASK_VLSSEG5E8V, match_opcode, INSN_DREF },
+{"vlsseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E16V, MASK_VLSSEG5E16V, match_opcode, INSN_DREF },
+{"vlsseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E32V, MASK_VLSSEG5E32V, match_opcode, INSN_DREF },
+{"vlsseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E64V, MASK_VLSSEG5E64V, match_opcode, INSN_DREF },
+{"vssseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E8V, MASK_VSSSEG5E8V, match_opcode, INSN_DREF },
+{"vssseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E16V, MASK_VSSSEG5E16V, match_opcode, INSN_DREF },
+{"vssseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E32V, MASK_VSSSEG5E32V, match_opcode, INSN_DREF },
+{"vssseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E64V, MASK_VSSSEG5E64V, match_opcode, INSN_DREF },
+
+{"vlsseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6BV, MASK_VLSSEG6BV, match_opcode, INSN_DREF },
+{"vlsseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6HV, MASK_VLSSEG6HV, match_opcode, INSN_DREF },
+{"vlsseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6WV, MASK_VLSSEG6WV, match_opcode, INSN_DREF },
+{"vlsseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E8V, MASK_VLSSEG6E8V, match_opcode, INSN_DREF },
+{"vlsseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E16V, MASK_VLSSEG6E16V, match_opcode, INSN_DREF },
+{"vlsseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E32V, MASK_VLSSEG6E32V, match_opcode, INSN_DREF },
+{"vlsseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E64V, MASK_VLSSEG6E64V, match_opcode, INSN_DREF },
+{"vssseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E8V, MASK_VSSSEG6E8V, match_opcode, INSN_DREF },
+{"vssseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E16V, MASK_VSSSEG6E16V, match_opcode, INSN_DREF },
+{"vssseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E32V, MASK_VSSSEG6E32V, match_opcode, INSN_DREF },
+{"vssseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E64V, MASK_VSSSEG6E64V, match_opcode, INSN_DREF },
+
+{"vlsseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7BV, MASK_VLSSEG7BV, match_opcode, INSN_DREF },
+{"vlsseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7HV, MASK_VLSSEG7HV, match_opcode, INSN_DREF },
+{"vlsseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7WV, MASK_VLSSEG7WV, match_opcode, INSN_DREF },
+{"vlsseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E8V, MASK_VLSSEG7E8V, match_opcode, INSN_DREF },
+{"vlsseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E16V, MASK_VLSSEG7E16V, match_opcode, INSN_DREF },
+{"vlsseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E32V, MASK_VLSSEG7E32V, match_opcode, INSN_DREF },
+{"vlsseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E64V, MASK_VLSSEG7E64V, match_opcode, INSN_DREF },
+{"vssseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E8V, MASK_VSSSEG7E8V, match_opcode, INSN_DREF },
+{"vssseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E16V, MASK_VSSSEG7E16V, match_opcode, INSN_DREF },
+{"vssseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E32V, MASK_VSSSEG7E32V, match_opcode, INSN_DREF },
+{"vssseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E64V, MASK_VSSSEG7E64V, match_opcode, INSN_DREF },
+
+{"vlsseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8BV, MASK_VLSSEG8BV, match_opcode, INSN_DREF },
+{"vlsseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8HV, MASK_VLSSEG8HV, match_opcode, INSN_DREF },
+{"vlsseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8WV, MASK_VLSSEG8WV, match_opcode, INSN_DREF },
+{"vlsseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E8V, MASK_VLSSEG8E8V, match_opcode, INSN_DREF },
+{"vlsseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E16V, MASK_VLSSEG8E16V, match_opcode, INSN_DREF },
+{"vlsseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E32V, MASK_VLSSEG8E32V, match_opcode, INSN_DREF },
+{"vlsseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E64V, MASK_VLSSEG8E64V, match_opcode, INSN_DREF },
+{"vssseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E8V, MASK_VSSSEG8E8V, match_opcode, INSN_DREF },
+{"vssseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E16V, MASK_VSSSEG8E16V, match_opcode, INSN_DREF },
+{"vssseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E32V, MASK_VSSSEG8E32V, match_opcode, INSN_DREF },
+{"vssseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E64V, MASK_VSSSEG8E64V, match_opcode, INSN_DREF },
+
+{"vlxseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG2BV, MASK_VLXSEG2BV, match_opcode, INSN_DREF },
+{"vlxseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG2HV, MASK_VLXSEG2HV, match_opcode, INSN_DREF },
+{"vlxseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG2WV, MASK_VLXSEG2WV, match_opcode, INSN_DREF },
+{"vlxseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI8V, MASK_VLOXSEG2EI8V, match_opcode, INSN_DREF },
+{"vlxseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI16V, MASK_VLOXSEG2EI16V, match_opcode, INSN_DREF },
+{"vlxseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI32V, MASK_VLOXSEG2EI32V, match_opcode, INSN_DREF },
+{"vlxseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI64V, MASK_VLOXSEG2EI64V, match_opcode, INSN_DREF },
+{"vsxseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI8V, MASK_VSOXSEG2EI8V, match_opcode, INSN_DREF },
+{"vsxseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI16V, MASK_VSOXSEG2EI16V, match_opcode, INSN_DREF },
+{"vsxseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI32V, MASK_VSOXSEG2EI32V, match_opcode, INSN_DREF },
+{"vsxseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI64V, MASK_VSOXSEG2EI64V, match_opcode, INSN_DREF },
+
+{"vlxseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG3BV, MASK_VLXSEG3BV, match_opcode, INSN_DREF },
+{"vlxseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG3HV, MASK_VLXSEG3HV, match_opcode, INSN_DREF },
+{"vlxseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG3WV, MASK_VLXSEG3WV, match_opcode, INSN_DREF },
+{"vlxseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI8V, MASK_VLOXSEG3EI8V, match_opcode, INSN_DREF },
+{"vlxseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI16V, MASK_VLOXSEG3EI16V, match_opcode, INSN_DREF },
+{"vlxseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI32V, MASK_VLOXSEG3EI32V, match_opcode, INSN_DREF },
+{"vlxseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI64V, MASK_VLOXSEG3EI64V, match_opcode, INSN_DREF },
+{"vsxseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI8V, MASK_VSOXSEG3EI8V, match_opcode, INSN_DREF },
+{"vsxseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI16V, MASK_VSOXSEG3EI16V, match_opcode, INSN_DREF },
+{"vsxseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI32V, MASK_VSOXSEG3EI32V, match_opcode, INSN_DREF },
+{"vsxseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI64V, MASK_VSOXSEG3EI64V, match_opcode, INSN_DREF },
+
+{"vlxseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG4BV, MASK_VLXSEG4BV, match_opcode, INSN_DREF },
+{"vlxseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG4HV, MASK_VLXSEG4HV, match_opcode, INSN_DREF },
+{"vlxseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG4WV, MASK_VLXSEG4WV, match_opcode, INSN_DREF },
+{"vlxseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI8V, MASK_VLOXSEG4EI8V, match_opcode, INSN_DREF },
+{"vlxseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI16V, MASK_VLOXSEG4EI16V, match_opcode, INSN_DREF },
+{"vlxseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI32V, MASK_VLOXSEG4EI32V, match_opcode, INSN_DREF },
+{"vlxseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI64V, MASK_VLOXSEG4EI64V, match_opcode, INSN_DREF },
+{"vsxseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI8V, MASK_VSOXSEG4EI8V, match_opcode, INSN_DREF },
+{"vsxseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI16V, MASK_VSOXSEG4EI16V, match_opcode, INSN_DREF },
+{"vsxseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI32V, MASK_VSOXSEG4EI32V, match_opcode, INSN_DREF },
+{"vsxseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI64V, MASK_VSOXSEG4EI64V, match_opcode, INSN_DREF },
+
+{"vlxseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG5BV, MASK_VLXSEG5BV, match_opcode, INSN_DREF },
+{"vlxseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG5HV, MASK_VLXSEG5HV, match_opcode, INSN_DREF },
+{"vlxseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG5WV, MASK_VLXSEG5WV, match_opcode, INSN_DREF },
+{"vlxseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI8V, MASK_VLOXSEG5EI8V, match_opcode, INSN_DREF },
+{"vlxseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI16V, MASK_VLOXSEG5EI16V, match_opcode, INSN_DREF },
+{"vlxseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI32V, MASK_VLOXSEG5EI32V, match_opcode, INSN_DREF },
+{"vlxseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI64V, MASK_VLOXSEG5EI64V, match_opcode, INSN_DREF },
+{"vsxseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI8V, MASK_VSOXSEG5EI8V, match_opcode, INSN_DREF },
+{"vsxseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI16V, MASK_VSOXSEG5EI16V, match_opcode, INSN_DREF },
+{"vsxseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI32V, MASK_VSOXSEG5EI32V, match_opcode, INSN_DREF },
+{"vsxseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI64V, MASK_VSOXSEG5EI64V, match_opcode, INSN_DREF },
+
+{"vlxseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG6BV, MASK_VLXSEG6BV, match_opcode, INSN_DREF },
+{"vlxseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG6HV, MASK_VLXSEG6HV, match_opcode, INSN_DREF },
+{"vlxseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG6WV, MASK_VLXSEG6WV, match_opcode, INSN_DREF },
+{"vlxseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI8V, MASK_VLOXSEG6EI8V, match_opcode, INSN_DREF },
+{"vlxseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI16V, MASK_VLOXSEG6EI16V, match_opcode, INSN_DREF },
+{"vlxseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI32V, MASK_VLOXSEG6EI32V, match_opcode, INSN_DREF },
+{"vlxseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI64V, MASK_VLOXSEG6EI64V, match_opcode, INSN_DREF },
+{"vsxseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI8V, MASK_VSOXSEG6EI8V, match_opcode, INSN_DREF },
+{"vsxseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI16V, MASK_VSOXSEG6EI16V, match_opcode, INSN_DREF },
+{"vsxseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI32V, MASK_VSOXSEG6EI32V, match_opcode, INSN_DREF },
+{"vsxseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI64V, MASK_VSOXSEG6EI64V, match_opcode, INSN_DREF },
+
+{"vlxseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG7BV, MASK_VLXSEG7BV, match_opcode, INSN_DREF },
+{"vlxseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG7HV, MASK_VLXSEG7HV, match_opcode, INSN_DREF },
+{"vlxseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG7WV, MASK_VLXSEG7WV, match_opcode, INSN_DREF },
+{"vlxseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI8V, MASK_VLOXSEG7EI8V, match_opcode, INSN_DREF },
+{"vlxseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI16V, MASK_VLOXSEG7EI16V, match_opcode, INSN_DREF },
+{"vlxseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI32V, MASK_VLOXSEG7EI32V, match_opcode, INSN_DREF },
+{"vlxseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI64V, MASK_VLOXSEG7EI64V, match_opcode, INSN_DREF },
+{"vsxseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI8V, MASK_VSOXSEG7EI8V, match_opcode, INSN_DREF },
+{"vsxseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI16V, MASK_VSOXSEG7EI16V, match_opcode, INSN_DREF },
+{"vsxseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI32V, MASK_VSOXSEG7EI32V, match_opcode, INSN_DREF },
+{"vsxseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI64V, MASK_VSOXSEG7EI64V, match_opcode, INSN_DREF },
+
+{"vlxseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG8BV, MASK_VLXSEG8BV, match_opcode, INSN_DREF },
+{"vlxseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG8HV, MASK_VLXSEG8HV, match_opcode, INSN_DREF },
+{"vlxseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG8WV, MASK_VLXSEG8WV, match_opcode, INSN_DREF },
+{"vlxseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI8V, MASK_VLOXSEG8EI8V, match_opcode, INSN_DREF },
+{"vlxseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI16V, MASK_VLOXSEG8EI16V, match_opcode, INSN_DREF },
+{"vlxseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI32V, MASK_VLOXSEG8EI32V, match_opcode, INSN_DREF },
+{"vlxseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI64V, MASK_VLOXSEG8EI64V, match_opcode, INSN_DREF },
+{"vsxseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI8V, MASK_VSOXSEG8EI8V, match_opcode, INSN_DREF },
+{"vsxseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI16V, MASK_VSOXSEG8EI16V, match_opcode, INSN_DREF },
+{"vsxseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI32V, MASK_VSOXSEG8EI32V, match_opcode, INSN_DREF },
+{"vsxseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI64V, MASK_VSOXSEG8EI64V, match_opcode, INSN_DREF },
+
+{"vlseg2bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2BFFV, MASK_VLSEG2BFFV, match_opcode, INSN_DREF },
+{"vlseg2hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2HFFV, MASK_VLSEG2HFFV, match_opcode, INSN_DREF },
+{"vlseg2wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2WFFV, MASK_VLSEG2WFFV, match_opcode, INSN_DREF },
+{"vlseg2buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E8FFV, MASK_VLSEG2E8FFV, match_opcode, INSN_DREF },
+{"vlseg2huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E16FFV, MASK_VLSEG2E16FFV, match_opcode, INSN_DREF },
+{"vlseg2wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E32FFV, MASK_VLSEG2E32FFV, match_opcode, INSN_DREF },
+{"vlseg2eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E64FFV, MASK_VLSEG2E64FFV, match_opcode, INSN_DREF },
+
+{"vlseg3bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3BFFV, MASK_VLSEG3BFFV, match_opcode, INSN_DREF },
+{"vlseg3hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3HFFV, MASK_VLSEG3HFFV, match_opcode, INSN_DREF },
+{"vlseg3wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3WFFV, MASK_VLSEG3WFFV, match_opcode, INSN_DREF },
+{"vlseg3buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E8FFV, MASK_VLSEG3E8FFV, match_opcode, INSN_DREF },
+{"vlseg3huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E16FFV, MASK_VLSEG3E16FFV, match_opcode, INSN_DREF },
+{"vlseg3wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32FFV, MASK_VLSEG3E32FFV, match_opcode, INSN_DREF },
+{"vlseg3eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E64FFV, MASK_VLSEG3E64FFV, match_opcode, INSN_DREF },
+
+{"vlseg4bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4BFFV, MASK_VLSEG4BFFV, match_opcode, INSN_DREF },
+{"vlseg4hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4HFFV, MASK_VLSEG4HFFV, match_opcode, INSN_DREF },
+{"vlseg4wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4WFFV, MASK_VLSEG4WFFV, match_opcode, INSN_DREF },
+{"vlseg4buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E8FFV, MASK_VLSEG4E8FFV, match_opcode, INSN_DREF },
+{"vlseg4huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E16FFV, MASK_VLSEG4E16FFV, match_opcode, INSN_DREF },
+{"vlseg4wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E32FFV, MASK_VLSEG4E32FFV, match_opcode, INSN_DREF },
+{"vlseg4eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E64FFV, MASK_VLSEG4E64FFV, match_opcode, INSN_DREF },
+
+{"vlseg5bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5BFFV, MASK_VLSEG5BFFV, match_opcode, INSN_DREF },
+{"vlseg5hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5HFFV, MASK_VLSEG5HFFV, match_opcode, INSN_DREF },
+{"vlseg5wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5WFFV, MASK_VLSEG5WFFV, match_opcode, INSN_DREF },
+{"vlseg5buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E8FFV, MASK_VLSEG5E8FFV, match_opcode, INSN_DREF },
+{"vlseg5huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E16FFV, MASK_VLSEG5E16FFV, match_opcode, INSN_DREF },
+{"vlseg5wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E32FFV, MASK_VLSEG5E32FFV, match_opcode, INSN_DREF },
+{"vlseg5eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E64FFV, MASK_VLSEG5E64FFV, match_opcode, INSN_DREF },
+
+{"vlseg6bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6BFFV, MASK_VLSEG6BFFV, match_opcode, INSN_DREF },
+{"vlseg6hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6HFFV, MASK_VLSEG6HFFV, match_opcode, INSN_DREF },
+{"vlseg6wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6WFFV, MASK_VLSEG6WFFV, match_opcode, INSN_DREF },
+{"vlseg6buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E8FFV, MASK_VLSEG6E8FFV, match_opcode, INSN_DREF },
+{"vlseg6huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E16FFV, MASK_VLSEG6E16FFV, match_opcode, INSN_DREF },
+{"vlseg6wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E32FFV, MASK_VLSEG6E32FFV, match_opcode, INSN_DREF },
+{"vlseg6eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E64FFV, MASK_VLSEG6E64FFV, match_opcode, INSN_DREF },
+
+{"vlseg7bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7BFFV, MASK_VLSEG7BFFV, match_opcode, INSN_DREF },
+{"vlseg7hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7HFFV, MASK_VLSEG7HFFV, match_opcode, INSN_DREF },
+{"vlseg7wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7WFFV, MASK_VLSEG7WFFV, match_opcode, INSN_DREF },
+{"vlseg7buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E8FFV, MASK_VLSEG7E8FFV, match_opcode, INSN_DREF },
+{"vlseg7huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E16FFV, MASK_VLSEG7E16FFV, match_opcode, INSN_DREF },
+{"vlseg7wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E32FFV, MASK_VLSEG7E32FFV, match_opcode, INSN_DREF },
+{"vlseg7eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E64FFV, MASK_VLSEG7E64FFV, match_opcode, INSN_DREF },
+
+{"vlseg8bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8BFFV, MASK_VLSEG8BFFV, match_opcode, INSN_DREF },
+{"vlseg8hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8HFFV, MASK_VLSEG8HFFV, match_opcode, INSN_DREF },
+{"vlseg8wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8WFFV, MASK_VLSEG8WFFV, match_opcode, INSN_DREF },
+{"vlseg8buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E8FFV, MASK_VLSEG8E8FFV, match_opcode, INSN_DREF },
+{"vlseg8huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E16FFV, MASK_VLSEG8E16FFV, match_opcode, INSN_DREF },
+{"vlseg8wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E32FFV, MASK_VLSEG8E32FFV, match_opcode, INSN_DREF },
+{"vlseg8eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E64FFV, MASK_VLSEG8E64FFV, match_opcode, INSN_DREF },
+
+{"vnsrl.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNSRLVV, MASK_VNSRLVV, match_opcode, 0 },
+{"vnsrl.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNSRLVX, MASK_VNSRLVX, match_opcode, 0 },
+{"vnsrl.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNSRLVI, MASK_VNSRLVI, match_opcode, 0 },
+{"vnsra.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNSRAVV, MASK_VNSRAVV, match_opcode, 0 },
+{"vnsra.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNSRAVX, MASK_VNSRAVX, match_opcode, 0 },
+{"vnsra.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNSRAVI, MASK_VNSRAVI, match_opcode, 0 },
+
+{"vwsmaccu.vv", 0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCUVV, MASK_VWSMACCUVV, match_opcode, 0 },
+{"vwsmaccu.vx", 0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCUVX, MASK_VWSMACCUVX, match_opcode, 0 },
+{"vwsmacc.vv",  0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCVV, MASK_VWSMACCVV, match_opcode, 0 },
+{"vwsmacc.vx",  0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCVX, MASK_VWSMACCVX, match_opcode, 0 },
+{"vwsmaccsu.vv",0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCSUVV, MASK_VWSMACCSUVV, match_opcode, 0 },
+{"vwsmaccsu.vx",0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCSUVX, MASK_VWSMACCSUVX, match_opcode, 0 },
+{"vwsmaccus.vx",0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCUSVX, MASK_VWSMACCUSVX, match_opcode, 0 },
+
+{"vnclipu.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNCLIPUVV, MASK_VNCLIPUVV, match_opcode, 0 },
+{"vnclipu.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNCLIPUVX, MASK_VNCLIPUVX, match_opcode, 0 },
+{"vnclipu.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNCLIPUVI, MASK_VNCLIPUVI, match_opcode, 0 },
+{"vnclip.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNCLIPVV, MASK_VNCLIPVV, match_opcode, 0 },
+{"vnclip.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNCLIPVX, MASK_VNCLIPVX, match_opcode, 0 },
+{"vnclip.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNCLIPVI, MASK_VNCLIPVI, match_opcode, 0 },
+
+{"vmford.vv",  0, INSN_CLASS_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFORDVV, MASK_VMFORDVV, match_opcode, 0},
+{"vmford.vf",  0, INSN_CLASS_XTHEADV, "Vd,Vt,SVm", MATCH_VMFORDVF, MASK_VMFORDVF, match_opcode, 0},
+
+{"vfncvt.xu.f.v",0,INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTXUFV, MASK_VFNCVTXUFV, match_opcode, 0},
+{"vfncvt.x.f.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTXFV, MASK_VFNCVTXFV, match_opcode, 0},
+{"vfncvt.f.xu.v",0,INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFXUV, MASK_VFNCVTFXUV, match_opcode, 0},
+{"vfncvt.f.x.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFXV, MASK_VFNCVTFXV, match_opcode, 0},
+{"vfncvt.f.f.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFFV, MASK_VFNCVTFFV, match_opcode, 0},
+
+{"vmpopc.m",   0, INSN_CLASS_XTHEADV, "d,VtVm", MATCH_VMPOPCM, MASK_VMPOPCM, match_opcode, 0 },
+{"vmfirst.m",  0, INSN_CLASS_XTHEADV, "d,VtVm", MATCH_VMFIRSTM, MASK_VMFIRSTM, match_opcode, 0},
+
+{"vext.x.v",   0, INSN_CLASS_XTHEADV, "d,Vt,s", MATCH_VEXTXV, MASK_VEXTXV, match_opcode, 0},
+
+{"vdot.vv",    0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDOTVV, MASK_VDOTVV, match_opcode, 0},
+{"vdotu.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDOTUVV, MASK_VDOTUVV, match_opcode, 0},
+{"vfdot.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VFDOTVV, MASK_VFDOTVV, match_opcode, 0},
+
+/* Zvamo instructions.  */
+{"vamoaddw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOADDWV, MASK_VAMOADDWV, match_opcode, INSN_DREF},
+{"vamoaddd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOADDDV, MASK_VAMOADDDV, match_opcode, INSN_DREF},
+{"vamoswapw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOSWAPWV, MASK_VAMOSWAPWV, match_opcode, INSN_DREF},
+{"vamoswapd.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOSWAPDV, MASK_VAMOSWAPDV, match_opcode, INSN_DREF},
+
+{"vamoxorw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOXORWV, MASK_VAMOXORWV, match_opcode, INSN_DREF},
+{"vamoxord.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOXORDV, MASK_VAMOXORDV, match_opcode, INSN_DREF},
+{"vamoandw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOANDWV, MASK_VAMOANDWV, match_opcode, INSN_DREF},
+{"vamoandd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOANDDV, MASK_VAMOANDDV, match_opcode, INSN_DREF},
+{"vamoorw.v",    0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOORWV, MASK_VAMOORWV, match_opcode, INSN_DREF},
+{"vamoord.v",    0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOORDV, MASK_VAMOORDV, match_opcode, INSN_DREF},
+
+{"vamominw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINWV, MASK_VAMOMINWV, match_opcode, INSN_DREF},
+{"vamomind.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINDV, MASK_VAMOMINDV, match_opcode, INSN_DREF},
+{"vamomaxw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXWV, MASK_VAMOMAXWV, match_opcode, INSN_DREF},
+{"vamomaxd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXDV, MASK_VAMOMAXDV, match_opcode, INSN_DREF},
+{"vamominuw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINUWV, MASK_VAMOMINUWV, match_opcode, INSN_DREF},
+{"vamominud.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINUDV, MASK_VAMOMINUDV, match_opcode, INSN_DREF},
+{"vamomaxuw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXUWV, MASK_VAMOMAXUWV, match_opcode, INSN_DREF},
+{"vamomaxud.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXUDV, MASK_VAMOMAXUDV, match_opcode, INSN_DREF},
 
 /* Supervisor instructions.  */
 {"csrr",       0, INSN_CLASS_ZICSR, "d,E",   MATCH_CSRRS, MASK_CSRRS|MASK_RS1, match_opcode, INSN_ALIAS },
-- 
2.42.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] add opcode for xtheadv
  2023-11-08 13:28 [PATCH] add opcode for xtheadv chenyixuan
@ 2023-11-09  7:28 ` Jan Beulich
  2023-11-09 10:18 ` Christoph Müllner
  1 sibling, 0 replies; 4+ messages in thread
From: Jan Beulich @ 2023-11-09  7:28 UTC (permalink / raw)
  To: chenyixuan; +Cc: kito.cheng, shiyulong, oriachiuan, shihua, jiawei, binutils

On 08.11.2023 14:28, chenyixuan@iscas.ac.cn wrote:
> From: XYenChi <oriachiuan@gmail.com>
> 
> Add xtheadv opcode and minimal support.
> 
> bfd/ChangeLog:
> 
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> 
>         * elfxx-riscv.c (riscv_parse_check_conflicts):Add xtheadv.
>         (riscv_multi_subset_supports):Add xtheadv.
>         (riscv_multi_subset_supports_ext):Add xtheadv.
> 
> gas/ChangeLog:
> 
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> 
>         * config/tc-riscv.c (my_getVsetvliExpression):Add xtheadv special vetvl with vediv.
> 
> include/ChangeLog:
> 
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> 
>         * opcode/riscv-opc.h (MATCH_VLBV): xtheadv opcodes.
>         (MASK_VLBV):
>         (MATCH_VLHV):
>         (MASK_VLHV):
>         (MATCH_VLWV):
>         (MASK_VLWV):
>         (MATCH_VLSBV):
>         (MASK_VLSBV):
>         (MATCH_VLSHV):
>         (MASK_VLSHV):
>         (MATCH_VLSWV):
>         (MASK_VLSWV):
>         (MATCH_VLXBV):
>         (MASK_VLXBV):
>         (MATCH_VLXHV):
>         (MASK_VLXHV):
>         (MATCH_VLXWV):
>         (MASK_VLXWV):
>         (MATCH_VSUXBV):
>         (MASK_VSUXBV):
>         (MATCH_VSUXHV):
>         (MASK_VSUXHV):
>         (MATCH_VSUXWV):
>         (MASK_VSUXWV):
>         (MATCH_VSUXEV):
>         (MASK_VSUXEV):
>         (MATCH_VLBFFV):
>         (MASK_VLBFFV):
>         (MATCH_VLHFFV):
>         (MASK_VLHFFV):
>         (MATCH_VLWFFV):
>         (MASK_VLWFFV):
>         (MATCH_VLSEG2BV):
>         (MASK_VLSEG2BV):
>         (MATCH_VLSEG2HV):
>         (MASK_VLSEG2HV):
>         (MATCH_VLSEG2WV):
>         (MASK_VLSEG2WV):
>         (MATCH_VLSEG3BV):
>         (MASK_VLSEG3BV):
>         (MATCH_VLSEG3HV):
>         (MASK_VLSEG3HV):
>         (MATCH_VLSEG3WV):
>         (MASK_VLSEG3WV):
>         (MATCH_VLSEG4BV):
>         (MASK_VLSEG4BV):
>         (MATCH_VLSEG4HV):
>         (MASK_VLSEG4HV):
>         (MATCH_VLSEG4WV):
>         (MASK_VLSEG4WV):
>         (MATCH_VLSEG5BV):
>         (MASK_VLSEG5BV):
>         (MATCH_VLSEG5HV):
>         (MASK_VLSEG5HV):
>         (MATCH_VLSEG5WV):
>         (MASK_VLSEG5WV):
>         (MATCH_VLSEG6BV):
>         (MASK_VLSEG6BV):
>         (MATCH_VLSEG6HV):
>         (MASK_VLSEG6HV):
>         (MATCH_VLSEG6WV):
>         (MASK_VLSEG6WV):
>         (MATCH_VLSEG7BV):
>         (MASK_VLSEG7BV):
>         (MATCH_VLSEG7HV):
>         (MASK_VLSEG7HV):
>         (MATCH_VLSEG7WV):
>         (MASK_VLSEG7WV):
>         (MATCH_VLSEG8BV):
>         (MASK_VLSEG8BV):
>         (MATCH_VLSEG8HV):
>         (MASK_VLSEG8HV):
>         (MATCH_VLSEG8WV):
>         (MASK_VLSEG8WV):
>         (MATCH_VLSSEG2BV):
>         (MASK_VLSSEG2BV):
>         (MATCH_VLSSEG2HV):
>         (MASK_VLSSEG2HV):
>         (MATCH_VLSSEG2WV):
>         (MASK_VLSSEG2WV):
>         (MATCH_VLSSEG3BV):
>         (MASK_VLSSEG3BV):
>         (MATCH_VLSSEG3HV):
>         (MASK_VLSSEG3HV):
>         (MATCH_VLSSEG3WV):
>         (MASK_VLSSEG3WV):
>         (MATCH_VLSSEG4BV):
>         (MASK_VLSSEG4BV):
>         (MATCH_VLSSEG4HV):
>         (MASK_VLSSEG4HV):
>         (MATCH_VLSSEG4WV):
>         (MASK_VLSSEG4WV):
>         (MATCH_VLSSEG5BV):
>         (MASK_VLSSEG5BV):
>         (MATCH_VLSSEG5HV):
>         (MASK_VLSSEG5HV):
>         (MATCH_VLSSEG5WV):
>         (MASK_VLSSEG5WV):
>         (MATCH_VLSSEG6BV):
>         (MASK_VLSSEG6BV):
>         (MATCH_VLSSEG6HV):
>         (MASK_VLSSEG6HV):
>         (MATCH_VLSSEG6WV):
>         (MASK_VLSSEG6WV):
>         (MATCH_VLSSEG7BV):
>         (MASK_VLSSEG7BV):
>         (MATCH_VLSSEG7HV):
>         (MASK_VLSSEG7HV):
>         (MATCH_VLSSEG7WV):
>         (MASK_VLSSEG7WV):
>         (MATCH_VLSSEG8BV):
>         (MASK_VLSSEG8BV):
>         (MATCH_VLSSEG8HV):
>         (MASK_VLSSEG8HV):
>         (MATCH_VLSSEG8WV):
>         (MASK_VLSSEG8WV):
>         (MATCH_VLXSEG2BV):
>         (MASK_VLXSEG2BV):
>         (MATCH_VLXSEG2HV):
>         (MASK_VLXSEG2HV):
>         (MATCH_VLXSEG2WV):
>         (MASK_VLXSEG2WV):
>         (MATCH_VLXSEG3BV):
>         (MASK_VLXSEG3BV):
>         (MATCH_VLXSEG3HV):
>         (MASK_VLXSEG3HV):
>         (MATCH_VLXSEG3WV):
>         (MASK_VLXSEG3WV):
>         (MATCH_VLXSEG4BV):
>         (MASK_VLXSEG4BV):
>         (MATCH_VLXSEG4HV):
>         (MASK_VLXSEG4HV):
>         (MATCH_VLXSEG4WV):
>         (MASK_VLXSEG4WV):
>         (MATCH_VLXSEG5BV):
>         (MASK_VLXSEG5BV):
>         (MATCH_VLXSEG5HV):
>         (MASK_VLXSEG5HV):
>         (MATCH_VLXSEG5WV):
>         (MASK_VLXSEG5WV):
>         (MATCH_VLXSEG6BV):
>         (MASK_VLXSEG6BV):
>         (MATCH_VLXSEG6HV):
>         (MASK_VLXSEG6HV):
>         (MATCH_VLXSEG6WV):
>         (MASK_VLXSEG6WV):
>         (MATCH_VLXSEG7BV):
>         (MASK_VLXSEG7BV):
>         (MATCH_VLXSEG7HV):
>         (MASK_VLXSEG7HV):
>         (MATCH_VLXSEG7WV):
>         (MASK_VLXSEG7WV):
>         (MATCH_VLXSEG8BV):
>         (MASK_VLXSEG8BV):
>         (MATCH_VLXSEG8HV):
>         (MASK_VLXSEG8HV):
>         (MATCH_VLXSEG8WV):
>         (MASK_VLXSEG8WV):
>         (MATCH_VLSEG2BFFV):
>         (MASK_VLSEG2BFFV):
>         (MATCH_VLSEG2HFFV):
>         (MASK_VLSEG2HFFV):
>         (MATCH_VLSEG2WFFV):
>         (MASK_VLSEG2WFFV):
>         (MATCH_VLSEG3BFFV):
>         (MASK_VLSEG3BFFV):
>         (MATCH_VLSEG3HFFV):
>         (MASK_VLSEG3HFFV):
>         (MATCH_VLSEG3WFFV):
>         (MASK_VLSEG3WFFV):
>         (MATCH_VLSEG4BFFV):
>         (MASK_VLSEG4BFFV):
>         (MATCH_VLSEG4HFFV):
>         (MASK_VLSEG4HFFV):
>         (MATCH_VLSEG4WFFV):
>         (MASK_VLSEG4WFFV):
>         (MATCH_VLSEG5BFFV):
>         (MASK_VLSEG5BFFV):
>         (MATCH_VLSEG5HFFV):
>         (MASK_VLSEG5HFFV):
>         (MATCH_VLSEG5WFFV):
>         (MASK_VLSEG5WFFV):
>         (MATCH_VLSEG6BFFV):
>         (MASK_VLSEG6BFFV):
>         (MATCH_VLSEG6HFFV):
>         (MASK_VLSEG6HFFV):
>         (MATCH_VLSEG6WFFV):
>         (MASK_VLSEG6WFFV):
>         (MATCH_VLSEG7BFFV):
>         (MASK_VLSEG7BFFV):
>         (MATCH_VLSEG7HFFV):
>         (MASK_VLSEG7HFFV):
>         (MATCH_VLSEG7WFFV):
>         (MASK_VLSEG7WFFV):
>         (MATCH_VLSEG8BFFV):
>         (MASK_VLSEG8BFFV):
>         (MATCH_VLSEG8HFFV):
>         (MASK_VLSEG8HFFV):
>         (MATCH_VLSEG8WFFV):
>         (MASK_VLSEG8WFFV):
>         (MATCH_VNSRLVV):
>         (MASK_VNSRLVV):
>         (MATCH_VNSRLVX):
>         (MASK_VNSRLVX):
>         (MATCH_VNSRLVI):
>         (MASK_VNSRLVI):
>         (MATCH_VNSRAVV):
>         (MASK_VNSRAVV):
>         (MATCH_VNSRAVX):
>         (MASK_VNSRAVX):
>         (MATCH_VNSRAVI):
>         (MASK_VNSRAVI):
>         (MATCH_VWMACCSUVV_ZV):
>         (MASK_VWMACCSUVV_ZV):
>         (MATCH_VWMACCSUVX_ZV):
>         (MASK_VWMACCSUVX_ZV):
>         (MATCH_VWMACCUSVX_ZV):
>         (MASK_VWMACCUSVX_ZV):
>         (MATCH_VAADDVV_ZV):
>         (MASK_VAADDVV_ZV):
>         (MATCH_VAADDVX_ZV):
>         (MASK_VAADDVX_ZV):
>         (MATCH_VAADDVI):
>         (MASK_VAADDVI):
>         (MATCH_VASUBVV_ZV):
>         (MASK_VASUBVV_ZV):
>         (MATCH_VASUBVX_ZV):
>         (MASK_VASUBVX_ZV):
>         (MATCH_VWSMACCUVV):
>         (MASK_VWSMACCUVV):
>         (MATCH_VWSMACCUVX):
>         (MASK_VWSMACCUVX):
>         (MATCH_VWSMACCVV):
>         (MASK_VWSMACCVV):
>         (MATCH_VWSMACCVX):
>         (MASK_VWSMACCVX):
>         (MATCH_VWSMACCSUVV):
>         (MASK_VWSMACCSUVV):
>         (MATCH_VWSMACCSUVX):
>         (MASK_VWSMACCSUVX):
>         (MATCH_VWSMACCUSVX):
>         (MASK_VWSMACCUSVX):
>         (MATCH_VFSQRTV_ZV):
>         (MASK_VFSQRTV_ZV):
>         (MATCH_VFCLASSV_ZV):
>         (MASK_VFCLASSV_ZV):
>         (MATCH_VFCVTXUFV_ZV):
>         (MASK_VFCVTXUFV_ZV):
>         (MATCH_VFCVTXFV_ZV):
>         (MASK_VFCVTXFV_ZV):
>         (MATCH_VFCVTFXUV_ZV):
>         (MASK_VFCVTFXUV_ZV):
>         (MATCH_VFCVTFXV_ZV):
>         (MASK_VFCVTFXV_ZV):
>         (MATCH_VFWCVTXUFV_ZV):
>         (MASK_VFWCVTXUFV_ZV):
>         (MATCH_VFWCVTXFV_ZV):
>         (MASK_VFWCVTXFV_ZV):
>         (MATCH_VFWCVTFXUV_ZV):
>         (MASK_VFWCVTFXUV_ZV):
>         (MATCH_VFWCVTFXV_ZV):
>         (MASK_VFWCVTFXV_ZV):
>         (MATCH_VFWCVTFFV_ZV):
>         (MASK_VFWCVTFFV_ZV):
>         (MATCH_VNCLIPUVV):
>         (MASK_VNCLIPUVV):
>         (MATCH_VNCLIPUVX):
>         (MASK_VNCLIPUVX):
>         (MATCH_VNCLIPUVI):
>         (MASK_VNCLIPUVI):
>         (MATCH_VNCLIPVV):
>         (MASK_VNCLIPVV):
>         (MATCH_VNCLIPVX):
>         (MASK_VNCLIPVX):
>         (MATCH_VNCLIPVI):
>         (MASK_VNCLIPVI):
>         (MATCH_VMFORDVV):
>         (MASK_VMFORDVV):
>         (MATCH_VFNCVTXUFV):
>         (MASK_VFNCVTXUFV):
>         (MATCH_VFNCVTXFV):
>         (MASK_VFNCVTXFV):
>         (MATCH_VFNCVTFXUV):
>         (MASK_VFNCVTFXUV):
>         (MATCH_VFNCVTFXV):
>         (MASK_VFNCVTFXV):
>         (MATCH_VFNCVTFFV):
>         (MASK_VFNCVTFFV):
>         (MATCH_VMFORDVF):
>         (MASK_VMFORDVF):
>         (MATCH_VMPOPCM):
>         (MASK_VMPOPCM):
>         (MATCH_VMFIRSTM):
>         (MASK_VMFIRSTM):
>         (MATCH_VMSBFM_ZV):
>         (MASK_VMSBFM_ZV):
>         (MATCH_VMSIFM_ZV):
>         (MASK_VMSIFM_ZV):
>         (MATCH_VMSOFM_ZV):
>         (MASK_VMSOFM_ZV):
>         (MATCH_VIOTAM_ZV):
>         (MASK_VIOTAM_ZV):
>         (MATCH_VIDV_ZV):
>         (MASK_VIDV_ZV):
>         (MATCH_VEXTXV):
>         (MASK_VEXTXV):
>         (MATCH_VMVXS_ZV):
>         (MASK_VMVXS_ZV):
>         (MATCH_VMVSX_ZV):
>         (MASK_VMVSX_ZV):
>         (MATCH_VFMVFS_ZV):
>         (MASK_VFMVFS_ZV):
>         (MATCH_VFMVSF_ZV):
>         (MASK_VFMVSF_ZV):
>         (MATCH_VAMOADDWV):
>         (MASK_VAMOADDWV):
>         (MATCH_VAMOADDDV):
>         (MASK_VAMOADDDV):
>         (MATCH_VAMOSWAPWV):
>         (MASK_VAMOSWAPWV):
>         (MATCH_VAMOSWAPDV):
>         (MASK_VAMOSWAPDV):
>         (MATCH_VAMOXORWV):
>         (MASK_VAMOXORWV):
>         (MATCH_VAMOXORDV):
>         (MASK_VAMOXORDV):
>         (MATCH_VAMOANDWV):
>         (MASK_VAMOANDWV):
>         (MATCH_VAMOANDDV):
>         (MASK_VAMOANDDV):
>         (MATCH_VAMOORWV):
>         (MASK_VAMOORWV):
>         (MATCH_VAMOORDV):
>         (MASK_VAMOORDV):
>         (MATCH_VAMOMINWV):
>         (MASK_VAMOMINWV):
>         (MATCH_VAMOMINDV):
>         (MASK_VAMOMINDV):
>         (MATCH_VAMOMAXWV):
>         (MASK_VAMOMAXWV):
>         (MATCH_VAMOMAXDV):
>         (MASK_VAMOMAXDV):
>         (MATCH_VAMOMINUWV):
>         (MASK_VAMOMINUWV):
>         (MATCH_VAMOMINUDV):
>         (MASK_VAMOMINUDV):
>         (MATCH_VAMOMAXUWV):
>         (MASK_VAMOMAXUWV):
>         (MATCH_VAMOMAXUDV):
>         (MASK_VAMOMAXUDV):
>         * opcode/riscv.h (enum riscv_insn_class):Add xtheadv class
> 
> opcodes/ChangeLog:
> 
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> 
>         * riscv-opc.c:Merge RVV 1.0 and xtheadv instruction definations.
> 
> 
> ---
>  bfd/elfxx-riscv.c          |   19 +-
>  gas/config/tc-riscv.c      |   84 ++-
>  include/opcode/riscv-opc.h |  398 ++++++++++++++
>  include/opcode/riscv.h     |    6 +
>  opcodes/riscv-opc.c        | 1026 ++++++++++++++++++++++++++----------
>  5 files changed, 1227 insertions(+), 306 deletions(-)

Just to mention it: There surely want to be one or more new testcases.

Jan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] add opcode for xtheadv
  2023-11-08 13:28 [PATCH] add opcode for xtheadv chenyixuan
  2023-11-09  7:28 ` Jan Beulich
@ 2023-11-09 10:18 ` Christoph Müllner
  2023-11-09 10:40   ` Yixuan Chen
  1 sibling, 1 reply; 4+ messages in thread
From: Christoph Müllner @ 2023-11-09 10:18 UTC (permalink / raw)
  To: chenyixuan; +Cc: binutils, kito.cheng, shiyulong, oriachiuan, shihua, jiawei

On Wed, Nov 8, 2023 at 2:28 PM <chenyixuan@iscas.ac.cn> wrote:
>
> From: XYenChi <oriachiuan@gmail.com>
>
> Add xtheadv opcode and minimal support.

Hi Yi Xuan,

[copied text from a patch that went to the GCC mailing list:
https://gcc.gnu.org/pipermail/gcc-patches/2023-November/635766.html]

I was not aware that CAS is working on getting T-Head's Vector
extension supported.
My biggest concern with this patch is that "XTheadV" does not have a
specification.

T-Head and VRULL are currently working on support patches for T-Head's
Vector extension
implementation. We've named the extension XTheadVector.
Supporting XTheadVector means to address a range of issues (e.g.
defining a formal ISA
vendor extension specification, extension discovery, addressing
implementation details,
differences among available cores, intrinsics, ...).
We've already made good progress on that and expect to publish first
results soon.

BR
Christoph

>
> bfd/ChangeLog:
>
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
>
>         * elfxx-riscv.c (riscv_parse_check_conflicts):Add xtheadv.
>         (riscv_multi_subset_supports):Add xtheadv.
>         (riscv_multi_subset_supports_ext):Add xtheadv.
>
> gas/ChangeLog:
>
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
>
>         * config/tc-riscv.c (my_getVsetvliExpression):Add xtheadv special vetvl with vediv.
>
> include/ChangeLog:
>
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
>
>         * opcode/riscv-opc.h (MATCH_VLBV): xtheadv opcodes.
>         (MASK_VLBV):
>         (MATCH_VLHV):
>         (MASK_VLHV):
>         (MATCH_VLWV):
>         (MASK_VLWV):
>         (MATCH_VLSBV):
>         (MASK_VLSBV):
>         (MATCH_VLSHV):
>         (MASK_VLSHV):
>         (MATCH_VLSWV):
>         (MASK_VLSWV):
>         (MATCH_VLXBV):
>         (MASK_VLXBV):
>         (MATCH_VLXHV):
>         (MASK_VLXHV):
>         (MATCH_VLXWV):
>         (MASK_VLXWV):
>         (MATCH_VSUXBV):
>         (MASK_VSUXBV):
>         (MATCH_VSUXHV):
>         (MASK_VSUXHV):
>         (MATCH_VSUXWV):
>         (MASK_VSUXWV):
>         (MATCH_VSUXEV):
>         (MASK_VSUXEV):
>         (MATCH_VLBFFV):
>         (MASK_VLBFFV):
>         (MATCH_VLHFFV):
>         (MASK_VLHFFV):
>         (MATCH_VLWFFV):
>         (MASK_VLWFFV):
>         (MATCH_VLSEG2BV):
>         (MASK_VLSEG2BV):
>         (MATCH_VLSEG2HV):
>         (MASK_VLSEG2HV):
>         (MATCH_VLSEG2WV):
>         (MASK_VLSEG2WV):
>         (MATCH_VLSEG3BV):
>         (MASK_VLSEG3BV):
>         (MATCH_VLSEG3HV):
>         (MASK_VLSEG3HV):
>         (MATCH_VLSEG3WV):
>         (MASK_VLSEG3WV):
>         (MATCH_VLSEG4BV):
>         (MASK_VLSEG4BV):
>         (MATCH_VLSEG4HV):
>         (MASK_VLSEG4HV):
>         (MATCH_VLSEG4WV):
>         (MASK_VLSEG4WV):
>         (MATCH_VLSEG5BV):
>         (MASK_VLSEG5BV):
>         (MATCH_VLSEG5HV):
>         (MASK_VLSEG5HV):
>         (MATCH_VLSEG5WV):
>         (MASK_VLSEG5WV):
>         (MATCH_VLSEG6BV):
>         (MASK_VLSEG6BV):
>         (MATCH_VLSEG6HV):
>         (MASK_VLSEG6HV):
>         (MATCH_VLSEG6WV):
>         (MASK_VLSEG6WV):
>         (MATCH_VLSEG7BV):
>         (MASK_VLSEG7BV):
>         (MATCH_VLSEG7HV):
>         (MASK_VLSEG7HV):
>         (MATCH_VLSEG7WV):
>         (MASK_VLSEG7WV):
>         (MATCH_VLSEG8BV):
>         (MASK_VLSEG8BV):
>         (MATCH_VLSEG8HV):
>         (MASK_VLSEG8HV):
>         (MATCH_VLSEG8WV):
>         (MASK_VLSEG8WV):
>         (MATCH_VLSSEG2BV):
>         (MASK_VLSSEG2BV):
>         (MATCH_VLSSEG2HV):
>         (MASK_VLSSEG2HV):
>         (MATCH_VLSSEG2WV):
>         (MASK_VLSSEG2WV):
>         (MATCH_VLSSEG3BV):
>         (MASK_VLSSEG3BV):
>         (MATCH_VLSSEG3HV):
>         (MASK_VLSSEG3HV):
>         (MATCH_VLSSEG3WV):
>         (MASK_VLSSEG3WV):
>         (MATCH_VLSSEG4BV):
>         (MASK_VLSSEG4BV):
>         (MATCH_VLSSEG4HV):
>         (MASK_VLSSEG4HV):
>         (MATCH_VLSSEG4WV):
>         (MASK_VLSSEG4WV):
>         (MATCH_VLSSEG5BV):
>         (MASK_VLSSEG5BV):
>         (MATCH_VLSSEG5HV):
>         (MASK_VLSSEG5HV):
>         (MATCH_VLSSEG5WV):
>         (MASK_VLSSEG5WV):
>         (MATCH_VLSSEG6BV):
>         (MASK_VLSSEG6BV):
>         (MATCH_VLSSEG6HV):
>         (MASK_VLSSEG6HV):
>         (MATCH_VLSSEG6WV):
>         (MASK_VLSSEG6WV):
>         (MATCH_VLSSEG7BV):
>         (MASK_VLSSEG7BV):
>         (MATCH_VLSSEG7HV):
>         (MASK_VLSSEG7HV):
>         (MATCH_VLSSEG7WV):
>         (MASK_VLSSEG7WV):
>         (MATCH_VLSSEG8BV):
>         (MASK_VLSSEG8BV):
>         (MATCH_VLSSEG8HV):
>         (MASK_VLSSEG8HV):
>         (MATCH_VLSSEG8WV):
>         (MASK_VLSSEG8WV):
>         (MATCH_VLXSEG2BV):
>         (MASK_VLXSEG2BV):
>         (MATCH_VLXSEG2HV):
>         (MASK_VLXSEG2HV):
>         (MATCH_VLXSEG2WV):
>         (MASK_VLXSEG2WV):
>         (MATCH_VLXSEG3BV):
>         (MASK_VLXSEG3BV):
>         (MATCH_VLXSEG3HV):
>         (MASK_VLXSEG3HV):
>         (MATCH_VLXSEG3WV):
>         (MASK_VLXSEG3WV):
>         (MATCH_VLXSEG4BV):
>         (MASK_VLXSEG4BV):
>         (MATCH_VLXSEG4HV):
>         (MASK_VLXSEG4HV):
>         (MATCH_VLXSEG4WV):
>         (MASK_VLXSEG4WV):
>         (MATCH_VLXSEG5BV):
>         (MASK_VLXSEG5BV):
>         (MATCH_VLXSEG5HV):
>         (MASK_VLXSEG5HV):
>         (MATCH_VLXSEG5WV):
>         (MASK_VLXSEG5WV):
>         (MATCH_VLXSEG6BV):
>         (MASK_VLXSEG6BV):
>         (MATCH_VLXSEG6HV):
>         (MASK_VLXSEG6HV):
>         (MATCH_VLXSEG6WV):
>         (MASK_VLXSEG6WV):
>         (MATCH_VLXSEG7BV):
>         (MASK_VLXSEG7BV):
>         (MATCH_VLXSEG7HV):
>         (MASK_VLXSEG7HV):
>         (MATCH_VLXSEG7WV):
>         (MASK_VLXSEG7WV):
>         (MATCH_VLXSEG8BV):
>         (MASK_VLXSEG8BV):
>         (MATCH_VLXSEG8HV):
>         (MASK_VLXSEG8HV):
>         (MATCH_VLXSEG8WV):
>         (MASK_VLXSEG8WV):
>         (MATCH_VLSEG2BFFV):
>         (MASK_VLSEG2BFFV):
>         (MATCH_VLSEG2HFFV):
>         (MASK_VLSEG2HFFV):
>         (MATCH_VLSEG2WFFV):
>         (MASK_VLSEG2WFFV):
>         (MATCH_VLSEG3BFFV):
>         (MASK_VLSEG3BFFV):
>         (MATCH_VLSEG3HFFV):
>         (MASK_VLSEG3HFFV):
>         (MATCH_VLSEG3WFFV):
>         (MASK_VLSEG3WFFV):
>         (MATCH_VLSEG4BFFV):
>         (MASK_VLSEG4BFFV):
>         (MATCH_VLSEG4HFFV):
>         (MASK_VLSEG4HFFV):
>         (MATCH_VLSEG4WFFV):
>         (MASK_VLSEG4WFFV):
>         (MATCH_VLSEG5BFFV):
>         (MASK_VLSEG5BFFV):
>         (MATCH_VLSEG5HFFV):
>         (MASK_VLSEG5HFFV):
>         (MATCH_VLSEG5WFFV):
>         (MASK_VLSEG5WFFV):
>         (MATCH_VLSEG6BFFV):
>         (MASK_VLSEG6BFFV):
>         (MATCH_VLSEG6HFFV):
>         (MASK_VLSEG6HFFV):
>         (MATCH_VLSEG6WFFV):
>         (MASK_VLSEG6WFFV):
>         (MATCH_VLSEG7BFFV):
>         (MASK_VLSEG7BFFV):
>         (MATCH_VLSEG7HFFV):
>         (MASK_VLSEG7HFFV):
>         (MATCH_VLSEG7WFFV):
>         (MASK_VLSEG7WFFV):
>         (MATCH_VLSEG8BFFV):
>         (MASK_VLSEG8BFFV):
>         (MATCH_VLSEG8HFFV):
>         (MASK_VLSEG8HFFV):
>         (MATCH_VLSEG8WFFV):
>         (MASK_VLSEG8WFFV):
>         (MATCH_VNSRLVV):
>         (MASK_VNSRLVV):
>         (MATCH_VNSRLVX):
>         (MASK_VNSRLVX):
>         (MATCH_VNSRLVI):
>         (MASK_VNSRLVI):
>         (MATCH_VNSRAVV):
>         (MASK_VNSRAVV):
>         (MATCH_VNSRAVX):
>         (MASK_VNSRAVX):
>         (MATCH_VNSRAVI):
>         (MASK_VNSRAVI):
>         (MATCH_VWMACCSUVV_ZV):
>         (MASK_VWMACCSUVV_ZV):
>         (MATCH_VWMACCSUVX_ZV):
>         (MASK_VWMACCSUVX_ZV):
>         (MATCH_VWMACCUSVX_ZV):
>         (MASK_VWMACCUSVX_ZV):
>         (MATCH_VAADDVV_ZV):
>         (MASK_VAADDVV_ZV):
>         (MATCH_VAADDVX_ZV):
>         (MASK_VAADDVX_ZV):
>         (MATCH_VAADDVI):
>         (MASK_VAADDVI):
>         (MATCH_VASUBVV_ZV):
>         (MASK_VASUBVV_ZV):
>         (MATCH_VASUBVX_ZV):
>         (MASK_VASUBVX_ZV):
>         (MATCH_VWSMACCUVV):
>         (MASK_VWSMACCUVV):
>         (MATCH_VWSMACCUVX):
>         (MASK_VWSMACCUVX):
>         (MATCH_VWSMACCVV):
>         (MASK_VWSMACCVV):
>         (MATCH_VWSMACCVX):
>         (MASK_VWSMACCVX):
>         (MATCH_VWSMACCSUVV):
>         (MASK_VWSMACCSUVV):
>         (MATCH_VWSMACCSUVX):
>         (MASK_VWSMACCSUVX):
>         (MATCH_VWSMACCUSVX):
>         (MASK_VWSMACCUSVX):
>         (MATCH_VFSQRTV_ZV):
>         (MASK_VFSQRTV_ZV):
>         (MATCH_VFCLASSV_ZV):
>         (MASK_VFCLASSV_ZV):
>         (MATCH_VFCVTXUFV_ZV):
>         (MASK_VFCVTXUFV_ZV):
>         (MATCH_VFCVTXFV_ZV):
>         (MASK_VFCVTXFV_ZV):
>         (MATCH_VFCVTFXUV_ZV):
>         (MASK_VFCVTFXUV_ZV):
>         (MATCH_VFCVTFXV_ZV):
>         (MASK_VFCVTFXV_ZV):
>         (MATCH_VFWCVTXUFV_ZV):
>         (MASK_VFWCVTXUFV_ZV):
>         (MATCH_VFWCVTXFV_ZV):
>         (MASK_VFWCVTXFV_ZV):
>         (MATCH_VFWCVTFXUV_ZV):
>         (MASK_VFWCVTFXUV_ZV):
>         (MATCH_VFWCVTFXV_ZV):
>         (MASK_VFWCVTFXV_ZV):
>         (MATCH_VFWCVTFFV_ZV):
>         (MASK_VFWCVTFFV_ZV):
>         (MATCH_VNCLIPUVV):
>         (MASK_VNCLIPUVV):
>         (MATCH_VNCLIPUVX):
>         (MASK_VNCLIPUVX):
>         (MATCH_VNCLIPUVI):
>         (MASK_VNCLIPUVI):
>         (MATCH_VNCLIPVV):
>         (MASK_VNCLIPVV):
>         (MATCH_VNCLIPVX):
>         (MASK_VNCLIPVX):
>         (MATCH_VNCLIPVI):
>         (MASK_VNCLIPVI):
>         (MATCH_VMFORDVV):
>         (MASK_VMFORDVV):
>         (MATCH_VFNCVTXUFV):
>         (MASK_VFNCVTXUFV):
>         (MATCH_VFNCVTXFV):
>         (MASK_VFNCVTXFV):
>         (MATCH_VFNCVTFXUV):
>         (MASK_VFNCVTFXUV):
>         (MATCH_VFNCVTFXV):
>         (MASK_VFNCVTFXV):
>         (MATCH_VFNCVTFFV):
>         (MASK_VFNCVTFFV):
>         (MATCH_VMFORDVF):
>         (MASK_VMFORDVF):
>         (MATCH_VMPOPCM):
>         (MASK_VMPOPCM):
>         (MATCH_VMFIRSTM):
>         (MASK_VMFIRSTM):
>         (MATCH_VMSBFM_ZV):
>         (MASK_VMSBFM_ZV):
>         (MATCH_VMSIFM_ZV):
>         (MASK_VMSIFM_ZV):
>         (MATCH_VMSOFM_ZV):
>         (MASK_VMSOFM_ZV):
>         (MATCH_VIOTAM_ZV):
>         (MASK_VIOTAM_ZV):
>         (MATCH_VIDV_ZV):
>         (MASK_VIDV_ZV):
>         (MATCH_VEXTXV):
>         (MASK_VEXTXV):
>         (MATCH_VMVXS_ZV):
>         (MASK_VMVXS_ZV):
>         (MATCH_VMVSX_ZV):
>         (MASK_VMVSX_ZV):
>         (MATCH_VFMVFS_ZV):
>         (MASK_VFMVFS_ZV):
>         (MATCH_VFMVSF_ZV):
>         (MASK_VFMVSF_ZV):
>         (MATCH_VAMOADDWV):
>         (MASK_VAMOADDWV):
>         (MATCH_VAMOADDDV):
>         (MASK_VAMOADDDV):
>         (MATCH_VAMOSWAPWV):
>         (MASK_VAMOSWAPWV):
>         (MATCH_VAMOSWAPDV):
>         (MASK_VAMOSWAPDV):
>         (MATCH_VAMOXORWV):
>         (MASK_VAMOXORWV):
>         (MATCH_VAMOXORDV):
>         (MASK_VAMOXORDV):
>         (MATCH_VAMOANDWV):
>         (MASK_VAMOANDWV):
>         (MATCH_VAMOANDDV):
>         (MASK_VAMOANDDV):
>         (MATCH_VAMOORWV):
>         (MASK_VAMOORWV):
>         (MATCH_VAMOORDV):
>         (MASK_VAMOORDV):
>         (MATCH_VAMOMINWV):
>         (MASK_VAMOMINWV):
>         (MATCH_VAMOMINDV):
>         (MASK_VAMOMINDV):
>         (MATCH_VAMOMAXWV):
>         (MASK_VAMOMAXWV):
>         (MATCH_VAMOMAXDV):
>         (MASK_VAMOMAXDV):
>         (MATCH_VAMOMINUWV):
>         (MASK_VAMOMINUWV):
>         (MATCH_VAMOMINUDV):
>         (MASK_VAMOMINUDV):
>         (MATCH_VAMOMAXUWV):
>         (MASK_VAMOMAXUWV):
>         (MATCH_VAMOMAXUDV):
>         (MASK_VAMOMAXUDV):
>         * opcode/riscv.h (enum riscv_insn_class):Add xtheadv class
>
> opcodes/ChangeLog:
>
> 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
>
>         * riscv-opc.c:Merge RVV 1.0 and xtheadv instruction definations.
>
>
> ---
>  bfd/elfxx-riscv.c          |   19 +-
>  gas/config/tc-riscv.c      |   84 ++-
>  include/opcode/riscv-opc.h |  398 ++++++++++++++
>  include/opcode/riscv.h     |    6 +
>  opcodes/riscv-opc.c        | 1026 ++++++++++++++++++++++++++----------
>  5 files changed, 1227 insertions(+), 306 deletions(-)
>
> diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
> index c9acf124626..1f04ac6d9be 100644
> --- a/bfd/elfxx-riscv.c
> +++ b/bfd/elfxx-riscv.c
> @@ -1374,6 +1374,7 @@ static struct riscv_supported_ext riscv_supported_vendor_x_ext[] =
>    {"xtheadmempair",    ISA_SPEC_CLASS_DRAFT,   1, 0, 0 },
>    {"xtheadsync",       ISA_SPEC_CLASS_DRAFT,   1, 0, 0 },
>    {"xventanacondops",  ISA_SPEC_CLASS_DRAFT,   1, 0, 0 },
> +  {"xtheadv",    ISA_SPEC_CLASS_DRAFT, 0, 7, 1},
>    {NULL, 0, 0, 0, 0}
>  };
>
> @@ -1994,7 +1995,8 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
>           && strncmp (s->name, "zve", 3) == 0)
>         support_zve = true;
>        if (!support_zvl
> -         && strncmp (s->name, "zvl", 3) == 0)
> +         && strncmp (s->name, "zvl", 3) == 0
> +    && strncmp (s->name, "zvls", 4) != 0)
>         support_zvl = true;
>        if (support_zve && support_zvl)
>         break;
> @@ -2514,14 +2516,19 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
>      case INSN_CLASS_ZKSH:
>        return riscv_subset_supports (rps, "zksh");
>      case INSN_CLASS_V:
> -      return (riscv_subset_supports (rps, "v")
> +      return ((riscv_subset_supports (rps, "v")
>               || riscv_subset_supports (rps, "zve64x")
> -             || riscv_subset_supports (rps, "zve32x"));
> +             || riscv_subset_supports (rps, "zve32x"))
> +             && !riscv_subset_supports (rps, "zvamo"));
>      case INSN_CLASS_ZVEF:
>        return (riscv_subset_supports (rps, "v")
>               || riscv_subset_supports (rps, "zve64d")
>               || riscv_subset_supports (rps, "zve64f")
>               || riscv_subset_supports (rps, "zve32f"));
> +    case INSN_CLASS_V_OR_XTHEADV:
> +    case INSN_CLASS_ZVEF_OR_XTHEADV:
> +      return riscv_subset_supports (rps, "v")
> +        || riscv_subset_supports(rps, "xtheadv");
>      case INSN_CLASS_ZVBB:
>        return riscv_subset_supports (rps, "zvbb");
>      case INSN_CLASS_ZVBC:
> @@ -2556,6 +2563,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
>        return riscv_subset_supports (rps, "xcvmac");
>      case INSN_CLASS_XCVALU:
>        return riscv_subset_supports (rps, "xcvalu");
> +    case INSN_CLASS_XTHEADV:
> +      return riscv_subset_supports(rps, "xtheadv");
>      case INSN_CLASS_XTHEADBA:
>        return riscv_subset_supports (rps, "xtheadba");
>      case INSN_CLASS_XTHEADBB:
> @@ -2768,8 +2777,10 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
>        return "zksh";
>      case INSN_CLASS_V:
>        return _("v' or `zve64x' or `zve32x");
> +    case INSN_CLASS_XTHEADV:
> +      return _("v' or `zvlsseg' or `zvamo");
>      case INSN_CLASS_ZVEF:
> -      return _("v' or `zve64d' or `zve64f' or `zve32f");
> +      return _("v");
>      case INSN_CLASS_ZVBB:
>        return _("zvbb");
>      case INSN_CLASS_ZVBC:
> diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
> index 402c46ad753..d1752eacc08 100644
> --- a/gas/config/tc-riscv.c
> +++ b/gas/config/tc-riscv.c
> @@ -2298,56 +2298,104 @@ my_getVsetvliExpression (expressionS *ep, char *str)
>  {
>    unsigned int vsew_value = 0, vlmul_value = 0;
>    unsigned int vta_value = 0, vma_value = 0;
> +  unsigned int vlen_value = 0, vediv_value = 0; /* RVV 0.7. */
>    bfd_boolean vsew_found = FALSE, vlmul_found = FALSE;
>    bfd_boolean vta_found = FALSE, vma_found = FALSE;
> +  bfd_boolean vlen_found = FALSE, vediv_found = FALSE; /* RVV 0.7. */
>
> -  if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew), &vsew_value))
> +  if(riscv_subset_supports (&riscv_rps_as, "zve32x"))
> +  {
> +    if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew), &vsew_value))
>      {
>        if (*str == ',')
> -       ++str;
> +               ++str;
>        if (vsew_found)
> -       as_bad (_("multiple vsew constants"));
> +               as_bad (_("multiple vsew constants"));
>        vsew_found = TRUE;
>      }
> -  if (arg_lookup (&str, riscv_vlmul, ARRAY_SIZE (riscv_vlmul), &vlmul_value))
> +    if (arg_lookup (&str, riscv_vlmul, ARRAY_SIZE (riscv_vlmul), &vlmul_value))
>      {
>        if (*str == ',')
> -       ++str;
> +               ++str;
>        if (vlmul_found)
> -       as_bad (_("multiple vlmul constants"));
> -      vlmul_found = TRUE;
> +               as_bad (_("multiple vlmul constants"));
> +      vlmul_found = TRUE;
>      }
> -  if (arg_lookup (&str, riscv_vta, ARRAY_SIZE (riscv_vta), &vta_value))
> +    if (arg_lookup (&str, riscv_vta, ARRAY_SIZE (riscv_vta), &vta_value))
>      {
>        if (*str == ',')
> -       ++str;
> +               ++str;
>        if (vta_found)
> -       as_bad (_("multiple vta constants"));
> -      vta_found = TRUE;
> +               as_bad (_("multiple vta constants"));
> +       vta_found = TRUE;
>      }
> -  if (arg_lookup (&str, riscv_vma, ARRAY_SIZE (riscv_vma), &vma_value))
> +    if (arg_lookup (&str, riscv_vma, ARRAY_SIZE (riscv_vma), &vma_value))
>      {
>        if (*str == ',')
> -       ++str;
> +               ++str;
>        if (vma_found)
> -       as_bad (_("multiple vma constants"));
> +               as_bad (_("multiple vma constants"));
>        vma_found = TRUE;
>      }
>
> -  if (vsew_found || vlmul_found || vta_found || vma_found)
> +    if (vsew_found || vlmul_found || vta_found || vma_found)
>      {
>        ep->X_op = O_constant;
>        ep->X_add_number = (vlmul_value << OP_SH_VLMUL)
> -                        | (vsew_value << OP_SH_VSEW)
> -                        | (vta_value << OP_SH_VTA)
> -                        | (vma_value << OP_SH_VMA);
> +             | (vsew_value << OP_SH_VSEW)
> +             | (vta_value << OP_SH_VTA)
> +             | (vma_value << OP_SH_VMA);
>        expr_parse_end = str;
>      }
> +    else
> +    {
> +      my_getExpression (ep, str);
> +      str = expr_parse_end;
> +    }
> +  }
>    else
> +  {
> +    /* RVV 0.7. */
> +    if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew), &vsew_value))
> +    {
> +      if (*str == ',')
> +       ++str;
> +      if (vsew_found)
> +       as_bad (_("multiple vsew constants"));
> +      vsew_found = TRUE;
> +    }
> +
> +    if (arg_lookup (&str, riscv_vlen, ARRAY_SIZE (riscv_vlen), &vlen_value))
> +    {
> +      if (*str == ',')
> +       ++str;
> +      if (vlen_found)
> +       as_bad (_("multiple vlen constants"));
> +      vlen_found = TRUE;
> +    }
> +    if (arg_lookup (&str, riscv_vediv, ARRAY_SIZE (riscv_vediv), &vediv_value))
> +    {
> +      if (*str == ',')
> +       ++str;
> +      if (vediv_found)
> +       as_bad (_("multiple vediv constants"));
> +      vediv_found = TRUE;
> +    }
> +
> +    if (vsew_found || vlmul_found || vta_found || vma_found)
> +    {
> +      ep->X_op = O_constant;
> +      ep->X_add_number = (vediv_value << 5)
> +             | (vsew_value << 2)
> +             | (vlen_value);
> +      expr_parse_end = str;
> +    }
> +    else
>      {
>        my_getExpression (ep, str);
>        str = expr_parse_end;
>      }
> +  }
>  }
>
>  /* Detect and handle implicitly zero load-store offsets.  For example,
> diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
> index 24217062edc..496f4703f3d 100644
> --- a/include/opcode/riscv-opc.h
> +++ b/include/opcode/riscv-opc.h
> @@ -2121,6 +2121,404 @@
>  #define MASK_VDOTUVV  0xfc00707f
>  #define MATCH_VFDOTVV  0xe4001057
>  #define MASK_VFDOTVV  0xfc00707f
> +/* XTHEADV  */
> +#define MATCH_VLBV  0x10000007
> +#define MASK_VLBV   0xfdf0707f
> +#define MATCH_VLHV  0x10005007
> +#define MASK_VLHV   0xfdf0707f
> +#define MATCH_VLWV  0x10006007
> +#define MASK_VLWV   0xfdf0707f
> +
> +#define MATCH_VLSBV    0x18000007
> +#define MASK_VLSBV     0xfc00707f
> +#define MATCH_VLSHV    0x18005007
> +#define MASK_VLSHV     0xfc00707f
> +#define MATCH_VLSWV    0x18006007
> +#define MASK_VLSWV     0xfc00707f
> +
> +#define MATCH_VLXBV    0x1c000007
> +#define MASK_VLXBV     0xfc00707f
> +#define MATCH_VLXHV    0x1c005007
> +#define MASK_VLXHV     0xfc00707f
> +#define MATCH_VLXWV    0x1c006007
> +#define MASK_VLXWV     0xfc00707f
> +#define MATCH_VSUXBV   0x1c000027
> +#define MASK_VSUXBV    0xfc00707f
> +#define MATCH_VSUXHV   0x1c005027
> +#define MASK_VSUXHV    0xfc00707f
> +#define MATCH_VSUXWV   0x1c006027
> +#define MASK_VSUXWV    0xfc00707f
> +#define MATCH_VSUXEV   0x1c007027
> +#define MASK_VSUXEV    0xfc00707f
> +
> +#define MATCH_VLBFFV  0x11000007
> +#define MASK_VLBFFV   0xfdf0707f
> +#define MATCH_VLHFFV  0x11005007
> +#define MASK_VLHFFV   0xfdf0707f
> +#define MATCH_VLWFFV  0x11006007
> +#define MASK_VLWFFV   0xfdf0707f
> +
> +#define MATCH_VLSEG2BV  0x30000007
> +#define MASK_VLSEG2BV   0xfdf0707f
> +#define MATCH_VLSEG2HV  0x30005007
> +#define MASK_VLSEG2HV   0xfdf0707f
> +#define MATCH_VLSEG2WV  0x30006007
> +#define MASK_VLSEG2WV   0xfdf0707f
> +
> +#define MATCH_VLSEG3BV  0x50000007
> +#define MASK_VLSEG3BV   0xfdf0707f
> +#define MATCH_VLSEG3HV  0x50005007
> +#define MASK_VLSEG3HV   0xfdf0707f
> +#define MATCH_VLSEG3WV  0x50006007
> +#define MASK_VLSEG3WV   0xfdf0707f
> +
> +#define MATCH_VLSEG4BV  0x70000007
> +#define MASK_VLSEG4BV   0xfdf0707f
> +#define MATCH_VLSEG4HV  0x70005007
> +#define MASK_VLSEG4HV   0xfdf0707f
> +#define MATCH_VLSEG4WV  0x70006007
> +#define MASK_VLSEG4WV   0xfdf0707f
> +
> +#define MATCH_VLSEG5BV  0x90000007
> +#define MASK_VLSEG5BV   0xfdf0707f
> +#define MATCH_VLSEG5HV  0x90005007
> +#define MASK_VLSEG5HV   0xfdf0707f
> +#define MATCH_VLSEG5WV  0x90006007
> +#define MASK_VLSEG5WV   0xfdf0707f
> +
> +#define MATCH_VLSEG6BV  0xb0000007
> +#define MASK_VLSEG6BV   0xfdf0707f
> +#define MATCH_VLSEG6HV  0xb0005007
> +#define MASK_VLSEG6HV   0xfdf0707f
> +#define MATCH_VLSEG6WV  0xb0006007
> +#define MASK_VLSEG6WV   0xfdf0707f
> +
> +#define MATCH_VLSEG7BV  0xd0000007
> +#define MASK_VLSEG7BV   0xfdf0707f
> +#define MATCH_VLSEG7HV  0xd0005007
> +#define MASK_VLSEG7HV   0xfdf0707f
> +#define MATCH_VLSEG7WV  0xd0006007
> +#define MASK_VLSEG7WV   0xfdf0707f
> +
> +#define MATCH_VLSEG8BV  0xf0000007
> +#define MASK_VLSEG8BV   0xfdf0707f
> +#define MATCH_VLSEG8HV  0xf0005007
> +#define MASK_VLSEG8HV   0xfdf0707f
> +#define MATCH_VLSEG8WV  0xf0006007
> +#define MASK_VLSEG8WV   0xfdf0707f
> +
> +#define MATCH_VLSSEG2BV  0x38000007
> +#define MASK_VLSSEG2BV   0xfc00707f
> +#define MATCH_VLSSEG2HV  0x38005007
> +#define MASK_VLSSEG2HV   0xfc00707f
> +#define MATCH_VLSSEG2WV  0x38006007
> +#define MASK_VLSSEG2WV   0xfc00707f
> +
> +#define MATCH_VLSSEG3BV  0x58000007
> +#define MASK_VLSSEG3BV   0xfc00707f
> +#define MATCH_VLSSEG3HV  0x58005007
> +#define MASK_VLSSEG3HV   0xfc00707f
> +#define MATCH_VLSSEG3WV  0x58006007
> +#define MASK_VLSSEG3WV   0xfc00707f
> +
> +#define MATCH_VLSSEG4BV  0x78000007
> +#define MASK_VLSSEG4BV   0xfc00707f
> +#define MATCH_VLSSEG4HV  0x78005007
> +#define MASK_VLSSEG4HV   0xfc00707f
> +#define MATCH_VLSSEG4WV  0x78006007
> +#define MASK_VLSSEG4WV   0xfc00707f
> +
> +#define MATCH_VLSSEG5BV  0x98000007
> +#define MASK_VLSSEG5BV   0xfc00707f
> +#define MATCH_VLSSEG5HV  0x98005007
> +#define MASK_VLSSEG5HV   0xfc00707f
> +#define MATCH_VLSSEG5WV  0x98006007
> +#define MASK_VLSSEG5WV   0xfc00707f
> +
> +#define MATCH_VLSSEG6BV  0xb8000007
> +#define MASK_VLSSEG6BV   0xfc00707f
> +#define MATCH_VLSSEG6HV  0xb8005007
> +#define MASK_VLSSEG6HV   0xfc00707f
> +#define MATCH_VLSSEG6WV  0xb8006007
> +#define MASK_VLSSEG6WV   0xfc00707f
> +
> +#define MATCH_VLSSEG7BV  0xd8000007
> +#define MASK_VLSSEG7BV   0xfc00707f
> +#define MATCH_VLSSEG7HV  0xd8005007
> +#define MASK_VLSSEG7HV   0xfc00707f
> +#define MATCH_VLSSEG7WV  0xd8006007
> +#define MASK_VLSSEG7WV   0xfc00707f
> +
> +#define MATCH_VLSSEG8BV  0xf8000007
> +#define MASK_VLSSEG8BV   0xfc00707f
> +#define MATCH_VLSSEG8HV  0xf8005007
> +#define MASK_VLSSEG8HV   0xfc00707f
> +#define MATCH_VLSSEG8WV  0xf8006007
> +#define MASK_VLSSEG8WV   0xfc00707f
> +
> +#define MATCH_VLXSEG2BV  0x3c000007
> +#define MASK_VLXSEG2BV   0xfc00707f
> +#define MATCH_VLXSEG2HV  0x3c005007
> +#define MASK_VLXSEG2HV   0xfc00707f
> +#define MATCH_VLXSEG2WV  0x3c006007
> +#define MASK_VLXSEG2WV   0xfc00707f
> +
> +#define MATCH_VLXSEG3BV  0x5c000007
> +#define MASK_VLXSEG3BV   0xfc00707f
> +#define MATCH_VLXSEG3HV  0x5c005007
> +#define MASK_VLXSEG3HV   0xfc00707f
> +#define MATCH_VLXSEG3WV  0x5c006007
> +#define MASK_VLXSEG3WV   0xfc00707f
> +
> +#define MATCH_VLXSEG4BV  0x7c000007
> +#define MASK_VLXSEG4BV   0xfc00707f
> +#define MATCH_VLXSEG4HV  0x7c005007
> +#define MASK_VLXSEG4HV   0xfc00707f
> +#define MATCH_VLXSEG4WV  0x7c006007
> +#define MASK_VLXSEG4WV   0xfc00707f
> +
> +#define MATCH_VLXSEG5BV  0x9c000007
> +#define MASK_VLXSEG5BV   0xfc00707f
> +#define MATCH_VLXSEG5HV  0x9c005007
> +#define MASK_VLXSEG5HV   0xfc00707f
> +#define MATCH_VLXSEG5WV  0x9c006007
> +#define MASK_VLXSEG5WV   0xfc00707f
> +
> +#define MATCH_VLXSEG6BV  0xbc000007
> +#define MASK_VLXSEG6BV   0xfc00707f
> +#define MATCH_VLXSEG6HV  0xbc005007
> +#define MASK_VLXSEG6HV   0xfc00707f
> +#define MATCH_VLXSEG6WV  0xbc006007
> +#define MASK_VLXSEG6WV   0xfc00707f
> +
> +#define MATCH_VLXSEG7BV  0xdc000007
> +#define MASK_VLXSEG7BV   0xfc00707f
> +#define MATCH_VLXSEG7HV  0xdc005007
> +#define MASK_VLXSEG7HV   0xfc00707f
> +#define MATCH_VLXSEG7WV  0xdc006007
> +#define MASK_VLXSEG7WV   0xfc00707f
> +
> +#define MATCH_VLXSEG8BV  0xfc000007
> +#define MASK_VLXSEG8BV   0xfc00707f
> +#define MATCH_VLXSEG8HV  0xfc005007
> +#define MASK_VLXSEG8HV   0xfc00707f
> +#define MATCH_VLXSEG8WV  0xfc006007
> +#define MASK_VLXSEG8WV   0xfc00707f
> +
> +#define MATCH_VLSEG2BFFV  0x31000007
> +#define MASK_VLSEG2BFFV   0xfdf0707f
> +#define MATCH_VLSEG2HFFV  0x31005007
> +#define MASK_VLSEG2HFFV   0xfdf0707f
> +#define MATCH_VLSEG2WFFV  0x31006007
> +#define MASK_VLSEG2WFFV   0xfdf0707f
> +
> +#define MATCH_VLSEG3BFFV  0x51000007
> +#define MASK_VLSEG3BFFV   0xfdf0707f
> +#define MATCH_VLSEG3HFFV  0x51005007
> +#define MASK_VLSEG3HFFV   0xfdf0707f
> +#define MATCH_VLSEG3WFFV  0x51006007
> +#define MASK_VLSEG3WFFV   0xfdf0707f
> +
> +#define MATCH_VLSEG4BFFV  0x71000007
> +#define MASK_VLSEG4BFFV   0xfdf0707f
> +#define MATCH_VLSEG4HFFV  0x71005007
> +#define MASK_VLSEG4HFFV   0xfdf0707f
> +#define MATCH_VLSEG4WFFV  0x71006007
> +#define MASK_VLSEG4WFFV   0xfdf0707f
> +
> +#define MATCH_VLSEG5BFFV  0x91000007
> +#define MASK_VLSEG5BFFV   0xfdf0707f
> +#define MATCH_VLSEG5HFFV  0x91005007
> +#define MASK_VLSEG5HFFV   0xfdf0707f
> +#define MATCH_VLSEG5WFFV  0x91006007
> +#define MASK_VLSEG5WFFV   0xfdf0707f
> +
> +#define MATCH_VLSEG6BFFV  0xb1000007
> +#define MASK_VLSEG6BFFV   0xfdf0707f
> +#define MATCH_VLSEG6HFFV  0xb1005007
> +#define MASK_VLSEG6HFFV   0xfdf0707f
> +#define MATCH_VLSEG6WFFV  0xb1006007
> +#define MASK_VLSEG6WFFV   0xfdf0707f
> +
> +#define MATCH_VLSEG7BFFV  0xd1000007
> +#define MASK_VLSEG7BFFV   0xfdf0707f
> +#define MATCH_VLSEG7HFFV  0xd1005007
> +#define MASK_VLSEG7HFFV   0xfdf0707f
> +#define MATCH_VLSEG7WFFV  0xd1006007
> +#define MASK_VLSEG7WFFV   0xfdf0707f
> +
> +#define MATCH_VLSEG8BFFV  0xf1000007
> +#define MASK_VLSEG8BFFV   0xfdf0707f
> +#define MATCH_VLSEG8HFFV  0xf1005007
> +#define MASK_VLSEG8HFFV   0xfdf0707f
> +#define MATCH_VLSEG8WFFV  0xf1006007
> +#define MASK_VLSEG8WFFV   0xfdf0707f
> +
> +#define MATCH_VNSRLVV  0xb0000057
> +#define MASK_VNSRLVV   0xfc00707f
> +#define MATCH_VNSRLVX  0xb0004057
> +#define MASK_VNSRLVX   0xfc00707f
> +#define MATCH_VNSRLVI  0xb0003057
> +#define MASK_VNSRLVI   0xfc00707f
> +#define MATCH_VNSRAVV  0xb4000057
> +#define MASK_VNSRAVV   0xfc00707f
> +#define MATCH_VNSRAVX  0xb4004057
> +#define MASK_VNSRAVX   0xfc00707f
> +#define MATCH_VNSRAVI  0xb4003057
> +#define MASK_VNSRAVI   0xfc00707f
> +
> +#define MATCH_VWMACCSUVV_ZV 0xf8002057
> +#define MASK_VWMACCSUVV_ZV  0xfc00707f
> +#define MATCH_VWMACCSUVX_ZV 0xf8006057
> +#define MASK_VWMACCSUVX_ZV  0xfc00707f
> +#define MATCH_VWMACCUSVX_ZV 0xfc006057
> +#define MASK_VWMACCUSVX_ZV  0xfc00707f
> +
> +#define MATCH_VAADDVV_ZV  0x90000057
> +#define MASK_VAADDVV_ZV   0xfc00707f
> +#define MATCH_VAADDVX_ZV  0x90004057
> +#define MASK_VAADDVX_ZV   0xfc00707f
> +#define MATCH_VAADDVI     0x90003057
> +#define MASK_VAADDVI      0xfc00707f
> +#define MATCH_VASUBVV_ZV  0x98000057
> +#define MASK_VASUBVV_ZV   0xfc00707f
> +#define MATCH_VASUBVX_ZV  0x98004057
> +#define MASK_VASUBVX_ZV   0xfc00707f
> +
> +#define MATCH_VWSMACCUVV  0xf0000057
> +#define MASK_VWSMACCUVV   0xfc00707f
> +#define MATCH_VWSMACCUVX  0xf0004057
> +#define MASK_VWSMACCUVX   0xfc00707f
> +#define MATCH_VWSMACCVV   0xf4000057
> +#define MASK_VWSMACCVV    0xfc00707f
> +#define MATCH_VWSMACCVX   0xf4004057
> +#define MASK_VWSMACCVX    0xfc00707f
> +#define MATCH_VWSMACCSUVV 0xf8000057
> +#define MASK_VWSMACCSUVV  0xfc00707f
> +#define MATCH_VWSMACCSUVX 0xf8004057
> +#define MASK_VWSMACCSUVX  0xfc00707f
> +#define MATCH_VWSMACCUSVX 0xfc004057
> +#define MASK_VWSMACCUSVX  0xfc00707f
> +
> +#define MATCH_VFSQRTV_ZV  0x8c001057
> +#define MASK_VFSQRTV_ZV   0xfc0ff07f
> +#define MATCH_VFCLASSV_ZV 0x8c081057
> +#define MASK_VFCLASSV_ZV  0xfc0ff07f
> +
> +#define MATCH_VFCVTXUFV_ZV  0x88001057
> +#define MASK_VFCVTXUFV_ZV   0xfc0ff07f
> +#define MATCH_VFCVTXFV_ZV   0x88009057
> +#define MASK_VFCVTXFV_ZV    0xfc0ff07f
> +#define MATCH_VFCVTFXUV_ZV  0x88011057
> +#define MASK_VFCVTFXUV_ZV   0xfc0ff07f
> +#define MATCH_VFCVTFXV_ZV   0x88019057
> +#define MASK_VFCVTFXV_ZV    0xfc0ff07f
> +
> +#define MATCH_VFWCVTXUFV_ZV  0x88041057
> +#define MASK_VFWCVTXUFV_ZV   0xfc0ff07f
> +#define MATCH_VFWCVTXFV_ZV   0x88049057
> +#define MASK_VFWCVTXFV_ZV    0xfc0ff07f
> +#define MATCH_VFWCVTFXUV_ZV  0x88051057
> +#define MASK_VFWCVTFXUV_ZV   0xfc0ff07f
> +#define MATCH_VFWCVTFXV_ZV   0x88059057
> +#define MASK_VFWCVTFXV_ZV    0xfc0ff07f
> +#define MATCH_VFWCVTFFV_ZV   0x88061057
> +#define MASK_VFWCVTFFV_ZV    0xfc0ff07f
> +
> +#define MATCH_VNCLIPUVV 0xb8000057
> +#define MASK_VNCLIPUVV  0xfc00707f
> +#define MATCH_VNCLIPUVX 0xb8004057
> +#define MASK_VNCLIPUVX  0xfc00707f
> +#define MATCH_VNCLIPUVI 0xb8003057
> +#define MASK_VNCLIPUVI  0xfc00707f
> +#define MATCH_VNCLIPVV  0xbc000057
> +#define MASK_VNCLIPVV   0xfc00707f
> +#define MATCH_VNCLIPVX  0xbc004057
> +#define MASK_VNCLIPVX   0xfc00707f
> +#define MATCH_VNCLIPVI  0xbc003057
> +#define MASK_VNCLIPVI   0xfc00707f
> +
> +#define MATCH_VMFORDVV 0x68001057
> +#define MASK_VMFORDVV  0xfc00707f
> +
> +#define MATCH_VFNCVTXUFV  0x88081057
> +#define MASK_VFNCVTXUFV   0xfc0ff07f
> +#define MATCH_VFNCVTXFV   0x88089057
> +#define MASK_VFNCVTXFV    0xfc0ff07f
> +#define MATCH_VFNCVTFXUV  0x88091057
> +#define MASK_VFNCVTFXUV   0xfc0ff07f
> +#define MATCH_VFNCVTFXV   0x88099057
> +#define MASK_VFNCVTFXV    0xfc0ff07f
> +#define MATCH_VFNCVTFFV   0x880a1057
> +#define MASK_VFNCVTFFV    0xfc0ff07f
> +
> +#define MATCH_VMFORDVF 0x68005057
> +#define MASK_VMFORDVF  0xfc00707f
> +#define MATCH_VMPOPCM  0x50002057
> +#define MASK_VMPOPCM   0xfc0ff07f
> +#define MATCH_VMFIRSTM 0x54002057
> +#define MASK_VMFIRSTM  0xfc0ff07f
> +
> +#define MATCH_VMSBFM_ZV   0x5800a057
> +#define MASK_VMSBFM_ZV    0xfc0ff07f
> +#define MATCH_VMSIFM_ZV   0x5801a057
> +#define MASK_VMSIFM_ZV    0xfc0ff07f
> +#define MATCH_VMSOFM_ZV   0x58012057
> +#define MASK_VMSOFM_ZV    0xfc0ff07f
> +#define MATCH_VIOTAM_ZV   0x58082057
> +#define MASK_VIOTAM_ZV    0xfc0ff07f
> +#define MATCH_VIDV_ZV     0x5808a057
> +#define MASK_VIDV_ZV      0xfdfff07f
> +
> +#define MATCH_VEXTXV      0x32002057
> +#define MASK_VEXTXV       0xfe00707f
> +#define MATCH_VMVXS_ZV    0x32002057
> +#define MASK_VMVXS_ZV     0xfe0ff07f
> +#define MATCH_VMVSX_ZV    0x36006057
> +#define MASK_VMVSX_ZV     0xfff0707f
> +
> +#define MATCH_VFMVFS_ZV   0x32001057
> +#define MASK_VFMVFS_ZV    0xfe0ff07f
> +#define MATCH_VFMVSF_ZV   0x36005057
> +#define MASK_VFMVSF_ZV    0xfff0707f
> +
> +/* ZVAMO extension.  */
> +#define MATCH_VAMOADDWV   0x0000602f
> +#define MASK_VAMOADDWV    0xf800707f
> +#define MATCH_VAMOADDDV   0x0000702f
> +#define MASK_VAMOADDDV    0xf800707f
> +#define MATCH_VAMOSWAPWV  0x0800602f
> +#define MASK_VAMOSWAPWV   0xf800707f
> +#define MATCH_VAMOSWAPDV  0x0800702f
> +#define MASK_VAMOSWAPDV   0xf800707f
> +#define MATCH_VAMOXORWV   0x2000602f
> +#define MASK_VAMOXORWV    0xf800707f
> +#define MATCH_VAMOXORDV   0x2000702f
> +#define MASK_VAMOXORDV    0xf800707f
> +#define MATCH_VAMOANDWV   0x6000602f
> +#define MASK_VAMOANDWV    0xf800707f
> +#define MATCH_VAMOANDDV   0x6000702f
> +#define MASK_VAMOANDDV    0xf800707f
> +#define MATCH_VAMOORWV    0x4000602f
> +#define MASK_VAMOORWV     0xf800707f
> +#define MATCH_VAMOORDV    0x4000702f
> +#define MASK_VAMOORDV     0xf800707f
> +#define MATCH_VAMOMINWV   0x8000602f
> +#define MASK_VAMOMINWV    0xf800707f
> +#define MATCH_VAMOMINDV   0x8000702f
> +#define MASK_VAMOMINDV    0xf800707f
> +#define MATCH_VAMOMAXWV   0xa000602f
> +#define MASK_VAMOMAXWV    0xf800707f
> +#define MATCH_VAMOMAXDV   0xa000702f
> +#define MASK_VAMOMAXDV    0xf800707f
> +#define MATCH_VAMOMINUWV  0xc000602f
> +#define MASK_VAMOMINUWV   0xf800707f
> +#define MATCH_VAMOMINUDV  0xc000702f
> +#define MASK_VAMOMINUDV   0xf800707f
> +#define MATCH_VAMOMAXUWV  0xe000602f
> +#define MASK_VAMOMAXUWV   0xf800707f
> +#define MATCH_VAMOMAXUDV  0xe000702f
> +#define MASK_VAMOMAXUDV   0xf800707f
>  /* Zvbb instructions.  */
>  #define MATCH_VANDN_VV 0x4000057
>  #define MASK_VANDN_VV 0xfc00707f
> diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h
> index 710a9b73189..55898009f85 100644
> --- a/include/opcode/riscv.h
> +++ b/include/opcode/riscv.h
> @@ -436,7 +436,9 @@ enum riscv_insn_class
>    INSN_CLASS_ZBC_OR_ZBKC,
>    INSN_CLASS_ZKND_OR_ZKNE,
>    INSN_CLASS_V,
> +  INSN_CLASS_V_OR_XTHEADV,
>    INSN_CLASS_ZVEF,
> +  INSN_CLASS_ZVEF_OR_XTHEADV,
>    INSN_CLASS_ZVBB,
>    INSN_CLASS_ZVBC,
>    INSN_CLASS_ZVKG,
> @@ -467,6 +469,7 @@ enum riscv_insn_class
>    INSN_CLASS_XTHEADMEMIDX,
>    INSN_CLASS_XTHEADMEMPAIR,
>    INSN_CLASS_XTHEADSYNC,
> +  INSN_CLASS_XTHEADV,
>    INSN_CLASS_XVENTANACONDOPS,
>  };
>
> @@ -586,6 +589,9 @@ extern const char * const riscv_vsew[8];
>  extern const char * const riscv_vlmul[8];
>  extern const char * const riscv_vta[2];
>  extern const char * const riscv_vma[2];
> +/* xtheadv.  */
> +extern const char * const riscv_vlen[4];
> +extern const char * const riscv_vediv[4];
>  extern const char * const riscv_fli_symval[32];
>  extern const float riscv_fli_numval[32];
>
> diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
> index 72d727cd77e..30ccb083c4b 100644
> --- a/opcodes/riscv-opc.c
> +++ b/opcodes/riscv-opc.c
> @@ -110,6 +110,18 @@ const char * const riscv_vma[2] =
>    "mu", "ma"
>  };
>
> +/* xtheadv, The vsetvli vlmul constants.  */
> +const char * const riscv_vlen[4] =
> +{
> +    "m1", "m2", "m4", "m8"
> +};
> +
> +/* xtheadv, The vsetvli vediv constants.  */
> +const char * const riscv_vediv[4] =
> +{
> +    "d1", "d2", "d4", "d8"
> +};
> +
>  /* The FLI.[HSDQ] symbolic constants (NULL for numeric constant).  */
>  const char * const riscv_fli_symval[32] =
>  {
> @@ -1150,8 +1162,8 @@ const struct riscv_opcode riscv_opcodes[] =
>  {"sm3p1",    0, INSN_CLASS_ZKSH,    "d,s",    MATCH_SM3P1, MASK_SM3P1, match_opcode, 0 },
>
>  /* RVV instructions.  */
> -{"vsetvl",     0, INSN_CLASS_V,  "d,s,t",  MATCH_VSETVL, MASK_VSETVL, match_opcode, 0},
> -{"vsetvli",    0, INSN_CLASS_V,  "d,s,Vc", MATCH_VSETVLI, MASK_VSETVLI, match_opcode, 0},
> +{"vsetvl",     0, INSN_CLASS_V_OR_XTHEADV,  "d,s,t",  MATCH_VSETVL, MASK_VSETVL, match_opcode, 0},
> +{"vsetvli",    0, INSN_CLASS_V_OR_XTHEADV,  "d,s,Vc", MATCH_VSETVLI, MASK_VSETVLI, match_opcode, 0},
>  {"vsetivli",   0, INSN_CLASS_V,  "d,Z,Vb", MATCH_VSETIVLI, MASK_VSETIVLI, match_opcode, 0},
>
>  {"vlm.v",      0, INSN_CLASS_V,  "Vd,0(s)", MATCH_VLMV, MASK_VLMV, match_opcode, INSN_DREF },
> @@ -1507,33 +1519,33 @@ const struct riscv_opcode riscv_opcodes[] =
>
>  {"vneg.v",     0, INSN_CLASS_V,  "Vd,VtVm",  MATCH_VRSUBVX, MASK_VRSUBVX | MASK_RS1, match_opcode, INSN_ALIAS },
>
> -{"vadd.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VADDVV, MASK_VADDVV, match_opcode, 0 },
> -{"vadd.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VADDVX, MASK_VADDVX, match_opcode, 0 },
> -{"vadd.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VADDVI, MASK_VADDVI, match_opcode, 0 },
> -{"vsub.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSUBVV, MASK_VSUBVV, match_opcode, 0 },
> -{"vsub.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSUBVX, MASK_VSUBVX, match_opcode, 0 },
> -{"vrsub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VRSUBVX, MASK_VRSUBVX, match_opcode, 0 },
> -{"vrsub.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VRSUBVI, MASK_VRSUBVI, match_opcode, 0 },
> -
> -{"vwcvt.x.x.v",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VWCVTXXV, MASK_VWCVTXXV, match_opcode, INSN_ALIAS },
> -{"vwcvtu.x.x.v", 0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VWCVTUXXV, MASK_VWCVTUXXV, match_opcode, INSN_ALIAS },
> -
> -{"vwaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDUVV, MASK_VWADDUVV, match_opcode, 0 },
> -{"vwaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDUVX, MASK_VWADDUVX, match_opcode, 0 },
> -{"vwsubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBUVV, MASK_VWSUBUVV, match_opcode, 0 },
> -{"vwsubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBUVX, MASK_VWSUBUVX, match_opcode, 0 },
> -{"vwadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDVV, MASK_VWADDVV, match_opcode, 0 },
> -{"vwadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDVX, MASK_VWADDVX, match_opcode, 0 },
> -{"vwsub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBVV, MASK_VWSUBVV, match_opcode, 0 },
> -{"vwsub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBVX, MASK_VWSUBVX, match_opcode, 0 },
> -{"vwaddu.wv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDUWV, MASK_VWADDUWV, match_opcode, 0 },
> -{"vwaddu.wx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDUWX, MASK_VWADDUWX, match_opcode, 0 },
> -{"vwsubu.wv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBUWV, MASK_VWSUBUWV, match_opcode, 0 },
> -{"vwsubu.wx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBUWX, MASK_VWSUBUWX, match_opcode, 0 },
> -{"vwadd.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDWV, MASK_VWADDWV, match_opcode, 0 },
> -{"vwadd.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDWX, MASK_VWADDWX, match_opcode, 0 },
> -{"vwsub.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBWV, MASK_VWSUBWV, match_opcode, 0 },
> -{"vwsub.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBWX, MASK_VWSUBWX, match_opcode, 0 },
> +{"vadd.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VADDVV, MASK_VADDVV, match_opcode, 0 },
> +{"vadd.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VADDVX, MASK_VADDVX, match_opcode, 0 },
> +{"vadd.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VADDVI, MASK_VADDVI, match_opcode, 0 },
> +{"vsub.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSUBVV, MASK_VSUBVV, match_opcode, 0 },
> +{"vsub.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSUBVX, MASK_VSUBVX, match_opcode, 0 },
> +{"vrsub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VRSUBVX, MASK_VRSUBVX, match_opcode, 0 },
> +{"vrsub.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VRSUBVI, MASK_VRSUBVI, match_opcode, 0 },
> +
> +{"vwcvt.x.x.v",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm", MATCH_VWCVTXXV, MASK_VWCVTXXV, match_opcode, INSN_ALIAS },
> +{"vwcvtu.x.x.v", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm", MATCH_VWCVTUXXV, MASK_VWCVTUXXV, match_opcode, INSN_ALIAS },
> +
> +{"vwaddu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDUVV, MASK_VWADDUVV, match_opcode, 0 },
> +{"vwaddu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDUVX, MASK_VWADDUVX, match_opcode, 0 },
> +{"vwsubu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBUVV, MASK_VWSUBUVV, match_opcode, 0 },
> +{"vwsubu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBUVX, MASK_VWSUBUVX, match_opcode, 0 },
> +{"vwadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDVV, MASK_VWADDVV, match_opcode, 0 },
> +{"vwadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDVX, MASK_VWADDVX, match_opcode, 0 },
> +{"vwsub.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBVV, MASK_VWSUBVV, match_opcode, 0 },
> +{"vwsub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBVX, MASK_VWSUBVX, match_opcode, 0 },
> +{"vwaddu.wv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDUWV, MASK_VWADDUWV, match_opcode, 0 },
> +{"vwaddu.wx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDUWX, MASK_VWADDUWX, match_opcode, 0 },
> +{"vwsubu.wv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBUWV, MASK_VWSUBUWV, match_opcode, 0 },
> +{"vwsubu.wx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBUWX, MASK_VWSUBUWX, match_opcode, 0 },
> +{"vwadd.wv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWADDWV, MASK_VWADDWV, match_opcode, 0 },
> +{"vwadd.wx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDWX, MASK_VWADDWX, match_opcode, 0 },
> +{"vwsub.wv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWSUBWV, MASK_VWSUBWV, match_opcode, 0 },
> +{"vwsub.wx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBWX, MASK_VWSUBWX, match_opcode, 0 },
>
>  {"vzext.vf2",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VZEXT_VF2, MASK_VZEXT_VF2, match_opcode, 0 },
>  {"vsext.vf2",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VSEXT_VF2, MASK_VSEXT_VF2, match_opcode, 0 },
> @@ -1542,43 +1554,43 @@ const struct riscv_opcode riscv_opcodes[] =
>  {"vzext.vf8",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VZEXT_VF8, MASK_VZEXT_VF8, match_opcode, 0 },
>  {"vsext.vf8",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VSEXT_VF8, MASK_VSEXT_VF8, match_opcode, 0 },
>
> -{"vadc.vvm",   0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VADCVVM, MASK_VADCVVM, match_opcode, 0 },
> -{"vadc.vxm",   0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VADCVXM, MASK_VADCVXM, match_opcode, 0 },
> -{"vadc.vim",   0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VADCVIM, MASK_VADCVIM, match_opcode, 0 },
> -{"vmadc.vvm",  0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMADCVVM, MASK_VMADCVVM, match_opcode, 0 },
> -{"vmadc.vxm",  0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMADCVXM, MASK_VMADCVXM, match_opcode, 0 },
> -{"vmadc.vim",  0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VMADCVIM, MASK_VMADCVIM, match_opcode, 0 },
> +{"vadc.vvm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VADCVVM, MASK_VADCVVM, match_opcode, 0 },
> +{"vadc.vxm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VADCVXM, MASK_VADCVXM, match_opcode, 0 },
> +{"vadc.vim",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0", MATCH_VADCVIM, MASK_VADCVIM, match_opcode, 0 },
> +{"vmadc.vvm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VMADCVVM, MASK_VMADCVVM, match_opcode, 0 },
> +{"vmadc.vxm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VMADCVXM, MASK_VMADCVXM, match_opcode, 0 },
> +{"vmadc.vim",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0", MATCH_VMADCVIM, MASK_VMADCVIM, match_opcode, 0 },
>  {"vmadc.vv",   0, INSN_CLASS_V,  "Vd,Vt,Vs", MATCH_VMADCVV, MASK_VMADCVV, match_opcode, 0 },
>  {"vmadc.vx",   0, INSN_CLASS_V,  "Vd,Vt,s", MATCH_VMADCVX, MASK_VMADCVX, match_opcode, 0 },
>  {"vmadc.vi",   0, INSN_CLASS_V,  "Vd,Vt,Vi", MATCH_VMADCVI, MASK_VMADCVI, match_opcode, 0 },
> -{"vsbc.vvm",   0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VSBCVVM, MASK_VSBCVVM, match_opcode, 0 },
> -{"vsbc.vxm",   0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VSBCVXM, MASK_VSBCVXM, match_opcode, 0 },
> -{"vmsbc.vvm",  0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMSBCVVM, MASK_VMSBCVVM, match_opcode, 0 },
> -{"vmsbc.vxm",  0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMSBCVXM, MASK_VMSBCVXM, match_opcode, 0 },
> +{"vsbc.vvm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VSBCVVM, MASK_VSBCVVM, match_opcode, 0 },
> +{"vsbc.vxm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VSBCVXM, MASK_VSBCVXM, match_opcode, 0 },
> +{"vmsbc.vvm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VMSBCVVM, MASK_VMSBCVVM, match_opcode, 0 },
> +{"vmsbc.vxm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VMSBCVXM, MASK_VMSBCVXM, match_opcode, 0 },
>  {"vmsbc.vv",   0, INSN_CLASS_V,  "Vd,Vt,Vs", MATCH_VMSBCVV, MASK_VMSBCVV, match_opcode, 0 },
>  {"vmsbc.vx",   0, INSN_CLASS_V,  "Vd,Vt,s", MATCH_VMSBCVX, MASK_VMSBCVX, match_opcode, 0 },
>
> -{"vnot.v",     0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VNOTV, MASK_VNOTV, match_opcode, INSN_ALIAS },
> -
> -{"vand.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VANDVV, MASK_VANDVV, match_opcode, 0 },
> -{"vand.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VANDVX, MASK_VANDVX, match_opcode, 0 },
> -{"vand.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VANDVI, MASK_VANDVI, match_opcode, 0 },
> -{"vor.vv",     0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VORVV, MASK_VORVV, match_opcode, 0 },
> -{"vor.vx",     0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VORVX, MASK_VORVX, match_opcode, 0 },
> -{"vor.vi",     0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VORVI, MASK_VORVI, match_opcode, 0 },
> -{"vxor.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VXORVV, MASK_VXORVV, match_opcode, 0 },
> -{"vxor.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VXORVX, MASK_VXORVX, match_opcode, 0 },
> -{"vxor.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VXORVI, MASK_VXORVI, match_opcode, 0 },
> -
> -{"vsll.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSLLVV, MASK_VSLLVV, match_opcode, 0 },
> -{"vsll.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSLLVX, MASK_VSLLVX, match_opcode, 0 },
> -{"vsll.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSLLVI, MASK_VSLLVI, match_opcode, 0 },
> -{"vsrl.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSRLVV, MASK_VSRLVV, match_opcode, 0 },
> -{"vsrl.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSRLVX, MASK_VSRLVX, match_opcode, 0 },
> -{"vsrl.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSRLVI, MASK_VSRLVI, match_opcode, 0 },
> -{"vsra.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSRAVV, MASK_VSRAVV, match_opcode, 0 },
> -{"vsra.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSRAVX, MASK_VSRAVX, match_opcode, 0 },
> -{"vsra.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSRAVI, MASK_VSRAVI, match_opcode, 0 },
> +{"vnot.v",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm", MATCH_VNOTV, MASK_VNOTV, match_opcode, INSN_ALIAS },
> +
> +{"vand.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VANDVV, MASK_VANDVV, match_opcode, 0 },
> +{"vand.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VANDVX, MASK_VANDVX, match_opcode, 0 },
> +{"vand.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VANDVI, MASK_VANDVI, match_opcode, 0 },
> +{"vor.vv",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VORVV, MASK_VORVV, match_opcode, 0 },
> +{"vor.vx",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VORVX, MASK_VORVX, match_opcode, 0 },
> +{"vor.vi",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VORVI, MASK_VORVI, match_opcode, 0 },
> +{"vxor.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VXORVV, MASK_VXORVV, match_opcode, 0 },
> +{"vxor.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VXORVX, MASK_VXORVX, match_opcode, 0 },
> +{"vxor.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VXORVI, MASK_VXORVI, match_opcode, 0 },
> +
> +{"vsll.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSLLVV, MASK_VSLLVV, match_opcode, 0 },
> +{"vsll.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSLLVX, MASK_VSLLVX, match_opcode, 0 },
> +{"vsll.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSLLVI, MASK_VSLLVI, match_opcode, 0 },
> +{"vsrl.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSRLVV, MASK_VSRLVV, match_opcode, 0 },
> +{"vsrl.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSRLVX, MASK_VSRLVX, match_opcode, 0 },
> +{"vsrl.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSRLVI, MASK_VSRLVI, match_opcode, 0 },
> +{"vsra.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSRAVV, MASK_VSRAVV, match_opcode, 0 },
> +{"vsra.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSRAVX, MASK_VSRAVX, match_opcode, 0 },
> +{"vsra.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSRAVI, MASK_VSRAVI, match_opcode, 0 },
>
>  {"vncvt.x.x.w",0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VNCVTXXW, MASK_VNCVTXXW, match_opcode, INSN_ALIAS },
>
> @@ -1589,130 +1601,138 @@ const struct riscv_opcode riscv_opcodes[] =
>  {"vnsra.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNSRAWX, MASK_VNSRAWX, match_opcode, 0 },
>  {"vnsra.wi",   0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VNSRAWI, MASK_VNSRAWI, match_opcode, 0 },
>
> -{"vmseq.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSEQVV, MASK_VMSEQVV, match_opcode, 0 },
> -{"vmseq.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSEQVX, MASK_VMSEQVX, match_opcode, 0 },
> -{"vmseq.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSEQVI, MASK_VMSEQVI, match_opcode, 0 },
> -{"vmsne.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSNEVV, MASK_VMSNEVV, match_opcode, 0 },
> -{"vmsne.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSNEVX, MASK_VMSNEVX, match_opcode, 0 },
> -{"vmsne.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSNEVI, MASK_VMSNEVI, match_opcode, 0 },
> -{"vmsltu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, 0 },
> -{"vmsltu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLTUVX, MASK_VMSLTUVX, match_opcode, 0 },
> -{"vmslt.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, 0 },
> -{"vmslt.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLTVX, MASK_VMSLTVX, match_opcode, 0 },
> -{"vmsleu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, 0 },
> -{"vmsleu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLEUVX, MASK_VMSLEUVX, match_opcode, 0 },
> -{"vmsleu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, 0 },
> -{"vmsle.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, 0 },
> -{"vmsle.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLEVX, MASK_VMSLEVX, match_opcode, 0 },
> -{"vmsle.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, 0 },
> -{"vmsgtu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSGTUVX, MASK_VMSGTUVX, match_opcode, 0 },
> -{"vmsgtu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, 0 },
> -{"vmsgt.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSGTVX, MASK_VMSGTVX, match_opcode, 0 },
> -{"vmsgt.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, 0 },
> -{"vmsgt.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, INSN_ALIAS },
> -{"vmsgtu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, INSN_ALIAS },
> -{"vmsge.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, INSN_ALIAS },
> -{"vmsgeu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, INSN_ALIAS },
> -{"vmslt.vi",   0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, INSN_ALIAS },
> -{"vmsltu.vi",  0, INSN_CLASS_V,  "Vd,Vu,0Vm", MATCH_VMSNEVV, MASK_VMSNEVV, match_vs1_eq_vs2, INSN_ALIAS },
> -{"vmsltu.vi",  0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, INSN_ALIAS },
> -{"vmsge.vi",   0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, INSN_ALIAS },
> -{"vmsgeu.vi",  0, INSN_CLASS_V,  "Vd,Vu,0Vm", MATCH_VMSEQVV, MASK_VMSEQVV, match_vs1_eq_vs2, INSN_ALIAS },
> -{"vmsgeu.vi",  0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, INSN_ALIAS },
> -
> -{"vmsge.vx",   0, INSN_CLASS_V, "Vd,Vt,sVm", 0, (int) M_VMSGE, match_never, INSN_MACRO },
> -{"vmsge.vx",   0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGE, match_never, INSN_MACRO },
> -{"vmsgeu.vx",  0, INSN_CLASS_V, "Vd,Vt,sVm", 1, (int) M_VMSGE, match_never, INSN_MACRO },
> -{"vmsgeu.vx",  0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 1, (int) M_VMSGE, match_never, INSN_MACRO },
> -
> -{"vminu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMINUVV, MASK_VMINUVV, match_opcode, 0},
> -{"vminu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMINUVX, MASK_VMINUVX, match_opcode, 0},
> -{"vmin.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMINVV, MASK_VMINVV, match_opcode, 0},
> -{"vmin.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMINVX, MASK_VMINVX, match_opcode, 0},
> -{"vmaxu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMAXUVV, MASK_VMAXUVV, match_opcode, 0},
> -{"vmaxu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMAXUVX, MASK_VMAXUVX, match_opcode, 0},
> -{"vmax.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMAXVV, MASK_VMAXVV, match_opcode, 0},
> -{"vmax.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMAXVX, MASK_VMAXVX, match_opcode, 0},
> -
> -{"vmul.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULVV, MASK_VMULVV, match_opcode, 0 },
> -{"vmul.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULVX, MASK_VMULVX, match_opcode, 0 },
> -{"vmulh.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHVV, MASK_VMULHVV, match_opcode, 0 },
> -{"vmulh.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHVX, MASK_VMULHVX, match_opcode, 0 },
> -{"vmulhu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHUVV, MASK_VMULHUVV, match_opcode, 0 },
> -{"vmulhu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHUVX, MASK_VMULHUVX, match_opcode, 0 },
> -{"vmulhsu.vv", 0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHSUVV, MASK_VMULHSUVV, match_opcode, 0 },
> -{"vmulhsu.vx", 0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHSUVX, MASK_VMULHSUVX, match_opcode, 0 },
> -
> -{"vwmul.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULVV, MASK_VWMULVV, match_opcode, 0 },
> -{"vwmul.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULVX, MASK_VWMULVX, match_opcode, 0 },
> -{"vwmulu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULUVV, MASK_VWMULUVV, match_opcode, 0 },
> -{"vwmulu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULUVX, MASK_VWMULUVX, match_opcode, 0 },
> -{"vwmulsu.vv", 0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULSUVV, MASK_VWMULSUVV, match_opcode, 0 },
> -{"vwmulsu.vx", 0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULSUVX, MASK_VWMULSUVX, match_opcode, 0 },
> -
> -{"vmacc.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMACCVV, MASK_VMACCVV, match_opcode, 0},
> -{"vmacc.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VMACCVX, MASK_VMACCVX, match_opcode, 0},
> -{"vnmsac.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VNMSACVV, MASK_VNMSACVV, match_opcode, 0},
> -{"vnmsac.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VNMSACVX, MASK_VNMSACVX, match_opcode, 0},
> -{"vmadd.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMADDVV, MASK_VMADDVV, match_opcode, 0},
> -{"vmadd.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VMADDVX, MASK_VMADDVX, match_opcode, 0},
> -{"vnmsub.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VNMSUBVV, MASK_VNMSUBVV, match_opcode, 0},
> -{"vnmsub.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VNMSUBVX, MASK_VNMSUBVX, match_opcode, 0},
> -
> -{"vwmaccu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCUVV, MASK_VWMACCUVV, match_opcode, 0},
> -{"vwmaccu.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCUVX, MASK_VWMACCUVX, match_opcode, 0},
> -{"vwmacc.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCVV, MASK_VWMACCVV, match_opcode, 0},
> -{"vwmacc.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCVX, MASK_VWMACCVX, match_opcode, 0},
> +{"vmseq.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSEQVV, MASK_VMSEQVV, match_opcode, 0 },
> +{"vmseq.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSEQVX, MASK_VMSEQVX, match_opcode, 0 },
> +{"vmseq.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSEQVI, MASK_VMSEQVI, match_opcode, 0 },
> +{"vmsne.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSNEVV, MASK_VMSNEVV, match_opcode, 0 },
> +{"vmsne.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSNEVX, MASK_VMSNEVX, match_opcode, 0 },
> +{"vmsne.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSNEVI, MASK_VMSNEVI, match_opcode, 0 },
> +{"vmsltu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, 0 },
> +{"vmsltu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLTUVX, MASK_VMSLTUVX, match_opcode, 0 },
> +{"vmslt.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, 0 },
> +{"vmslt.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLTVX, MASK_VMSLTVX, match_opcode, 0 },
> +{"vmsleu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, 0 },
> +{"vmsleu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLEUVX, MASK_VMSLEUVX, match_opcode, 0 },
> +{"vmsleu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, 0 },
> +{"vmsle.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, 0 },
> +{"vmsle.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLEVX, MASK_VMSLEVX, match_opcode, 0 },
> +{"vmsle.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, 0 },
> +{"vmsgtu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSGTUVX, MASK_VMSGTUVX, match_opcode, 0 },
> +{"vmsgtu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, 0 },
> +{"vmsgt.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSGTVX, MASK_VMSGTVX, match_opcode, 0 },
> +{"vmsgt.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, 0 },
> +{"vmsgt.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, INSN_ALIAS },
> +{"vmsgtu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, INSN_ALIAS },
> +{"vmsge.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, INSN_ALIAS },
> +{"vmsgeu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, INSN_ALIAS },
> +{"vmslt.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, INSN_ALIAS },
> +{"vmsltu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vu,0Vm", MATCH_VMSNEVV, MASK_VMSNEVV, match_vs1_eq_vs2, INSN_ALIAS },
> +{"vmsltu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, INSN_ALIAS },
> +{"vmsge.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, INSN_ALIAS },
> +{"vmsgeu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vu,0Vm", MATCH_VMSEQVV, MASK_VMSEQVV, match_vs1_eq_vs2, INSN_ALIAS },
> +{"vmsgeu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm", MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, INSN_ALIAS },
> +
> +{"vmsge.vx",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", 0, (int) M_VMSGE, match_never, INSN_MACRO },
> +{"vmsge.vx",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGE, match_never, INSN_MACRO },
> +{"vmsgeu.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", 1, (int) M_VMSGE, match_never, INSN_MACRO },
> +{"vmsgeu.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,s,VM,VT", 1, (int) M_VMSGE, match_never, INSN_MACRO },
> +
> +{"vminu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMINUVV, MASK_VMINUVV, match_opcode, 0},
> +{"vminu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMINUVX, MASK_VMINUVX, match_opcode, 0},
> +{"vmin.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMINVV, MASK_VMINVV, match_opcode, 0},
> +{"vmin.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMINVX, MASK_VMINVX, match_opcode, 0},
> +{"vmaxu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMAXUVV, MASK_VMAXUVV, match_opcode, 0},
> +{"vmaxu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMAXUVX, MASK_VMAXUVX, match_opcode, 0},
> +{"vmax.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMAXVV, MASK_VMAXVV, match_opcode, 0},
> +{"vmax.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMAXVX, MASK_VMAXVX, match_opcode, 0},
> +
> +{"vmul.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULVV, MASK_VMULVV, match_opcode, 0 },
> +{"vmul.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULVX, MASK_VMULVX, match_opcode, 0 },
> +{"vmulh.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULHVV, MASK_VMULHVV, match_opcode, 0 },
> +{"vmulh.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULHVX, MASK_VMULHVX, match_opcode, 0 },
> +{"vmulhu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULHUVV, MASK_VMULHUVV, match_opcode, 0 },
> +{"vmulhu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULHUVX, MASK_VMULHUVX, match_opcode, 0 },
> +{"vmulhsu.vv", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULHSUVV, MASK_VMULHSUVV, match_opcode, 0 },
> +{"vmulhsu.vx", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULHSUVX, MASK_VMULHSUVX, match_opcode, 0 },
> +
> +{"vwmul.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWMULVV, MASK_VWMULVV, match_opcode, 0 },
> +{"vwmul.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWMULVX, MASK_VWMULVX, match_opcode, 0 },
> +{"vwmulu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWMULUVV, MASK_VWMULUVV, match_opcode, 0 },
> +{"vwmulu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWMULUVX, MASK_VWMULUVX, match_opcode, 0 },
> +{"vwmulsu.vv", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VWMULSUVV, MASK_VWMULSUVV, match_opcode, 0 },
> +{"vwmulsu.vx", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWMULSUVX, MASK_VWMULSUVX, match_opcode, 0 },
> +
> +{"vmacc.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMACCVV, MASK_VMACCVV, match_opcode, 0},
> +{"vmacc.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VMACCVX, MASK_VMACCVX, match_opcode, 0},
> +{"vnmsac.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VNMSACVV, MASK_VNMSACVV, match_opcode, 0},
> +{"vnmsac.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VNMSACVX, MASK_VNMSACVX, match_opcode, 0},
> +{"vmadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VMADDVV, MASK_VMADDVV, match_opcode, 0},
> +{"vmadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VMADDVX, MASK_VMADDVX, match_opcode, 0},
> +{"vnmsub.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VNMSUBVV, MASK_VNMSUBVV, match_opcode, 0},
> +{"vnmsub.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VNMSUBVX, MASK_VNMSUBVX, match_opcode, 0},
> +
> +{"vwmaccu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWMACCUVV, MASK_VWMACCUVV, match_opcode, 0},
> +{"vwmaccu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VWMACCUVX, MASK_VWMACCUVX, match_opcode, 0},
> +{"vwmacc.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWMACCVV, MASK_VWMACCVV, match_opcode, 0},
> +{"vwmacc.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VWMACCVX, MASK_VWMACCVX, match_opcode, 0},
>  {"vwmaccsu.vv", 0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCSUVV, MASK_VWMACCSUVV, match_opcode, 0},
> +{"vwmaccsu.vv", 0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWMACCSUVV_ZV, MASK_VWMACCSUVV_ZV, match_opcode, 0},
>  {"vwmaccsu.vx", 0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCSUVX, MASK_VWMACCSUVX, match_opcode, 0},
> +{"vwmaccsu.vx", 0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWMACCSUVX_ZV, MASK_VWMACCSUVX_ZV, match_opcode, 0},
>  {"vwmaccus.vx", 0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCUSVX, MASK_VWMACCUSVX, match_opcode, 0},
> -
> -{"vdivu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VDIVUVV, MASK_VDIVUVV, match_opcode, 0 },
> -{"vdivu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VDIVUVX, MASK_VDIVUVX, match_opcode, 0 },
> -{"vdiv.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VDIVVV, MASK_VDIVVV, match_opcode, 0 },
> -{"vdiv.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VDIVVX, MASK_VDIVVX, match_opcode, 0 },
> -{"vremu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VREMUVV, MASK_VREMUVV, match_opcode, 0 },
> -{"vremu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VREMUVX, MASK_VREMUVX, match_opcode, 0 },
> -{"vrem.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VREMVV, MASK_VREMVV, match_opcode, 0 },
> -{"vrem.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VREMVX, MASK_VREMVX, match_opcode, 0 },
> -
> -{"vmerge.vvm", 0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMERGEVVM, MASK_VMERGEVVM, match_opcode, 0 },
> -{"vmerge.vxm", 0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMERGEVXM, MASK_VMERGEVXM, match_opcode, 0 },
> -{"vmerge.vim", 0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VMERGEVIM, MASK_VMERGEVIM, match_opcode, 0 },
> -
> -{"vmv.v.v",    0, INSN_CLASS_V,  "Vd,Vs", MATCH_VMVVV, MASK_VMVVV, match_opcode, 0 },
> -{"vmv.v.x",    0, INSN_CLASS_V,  "Vd,s", MATCH_VMVVX, MASK_VMVVX, match_opcode, 0 },
> -{"vmv.v.i",    0, INSN_CLASS_V,  "Vd,Vi", MATCH_VMVVI, MASK_VMVVI, match_opcode, 0 },
> -
> -{"vsaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSADDUVV, MASK_VSADDUVV, match_opcode, 0 },
> -{"vsaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSADDUVX, MASK_VSADDUVX, match_opcode, 0 },
> -{"vsaddu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VSADDUVI, MASK_VSADDUVI, match_opcode, 0 },
> -{"vsadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSADDVV, MASK_VSADDVV, match_opcode, 0 },
> -{"vsadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSADDVX, MASK_VSADDVX, match_opcode, 0 },
> -{"vsadd.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VSADDVI, MASK_VSADDVI, match_opcode, 0 },
> -{"vssubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSUBUVV, MASK_VSSUBUVV, match_opcode, 0 },
> -{"vssubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSUBUVX, MASK_VSSUBUVX, match_opcode, 0 },
> -{"vssub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSUBVV, MASK_VSSUBVV, match_opcode, 0 },
> -{"vssub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSUBVX, MASK_VSSUBVX, match_opcode, 0 },
> +{"vwmaccus.vx", 0, INSN_CLASS_XTHEADV, "Vd,s,VtVm", MATCH_VWMACCUSVX_ZV, MASK_VWMACCUSVX_ZV, match_opcode, 0},
> +
> +{"vdivu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDIVUVV, MASK_VDIVUVV, match_opcode, 0 },
> +{"vdivu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VDIVUVX, MASK_VDIVUVX, match_opcode, 0 },
> +{"vdiv.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDIVVV, MASK_VDIVVV, match_opcode, 0 },
> +{"vdiv.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VDIVVX, MASK_VDIVVX, match_opcode, 0 },
> +{"vremu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VREMUVV, MASK_VREMUVV, match_opcode, 0 },
> +{"vremu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VREMUVX, MASK_VREMUVX, match_opcode, 0 },
> +{"vrem.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VREMVV, MASK_VREMVV, match_opcode, 0 },
> +{"vrem.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VREMVX, MASK_VREMVX, match_opcode, 0 },
> +
> +{"vmerge.vvm", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0", MATCH_VMERGEVVM, MASK_VMERGEVVM, match_opcode, 0 },
> +{"vmerge.vxm", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0", MATCH_VMERGEVXM, MASK_VMERGEVXM, match_opcode, 0 },
> +{"vmerge.vim", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0", MATCH_VMERGEVIM, MASK_VMERGEVIM, match_opcode, 0 },
> +
> +{"vmv.v.v",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs", MATCH_VMVVV, MASK_VMVVV, match_opcode, 0 },
> +{"vmv.v.x",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s", MATCH_VMVVX, MASK_VMVVX, match_opcode, 0 },
> +{"vmv.v.i",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vi", MATCH_VMVVI, MASK_VMVVI, match_opcode, 0 },
> +
> +{"vsaddu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSADDUVV, MASK_VSADDUVV, match_opcode, 0 },
> +{"vsaddu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSADDUVX, MASK_VSADDUVX, match_opcode, 0 },
> +{"vsaddu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VSADDUVI, MASK_VSADDUVI, match_opcode, 0 },
> +{"vsadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSADDVV, MASK_VSADDVV, match_opcode, 0 },
> +{"vsadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSADDVX, MASK_VSADDVX, match_opcode, 0 },
> +{"vsadd.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VSADDVI, MASK_VSADDVI, match_opcode, 0 },
> +{"vssubu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSUBUVV, MASK_VSSUBUVV, match_opcode, 0 },
> +{"vssubu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSUBUVX, MASK_VSSUBUVX, match_opcode, 0 },
> +{"vssub.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSUBVV, MASK_VSSUBVV, match_opcode, 0 },
> +{"vssub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSUBVX, MASK_VSSUBVX, match_opcode, 0 },
>
>  {"vaaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VAADDUVV, MASK_VAADDUVV, match_opcode, 0 },
>  {"vaaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VAADDUVX, MASK_VAADDUVX, match_opcode, 0 },
>  {"vaadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VAADDVV, MASK_VAADDVV, match_opcode, 0 },
> +{"vaadd.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VAADDVV_ZV, MASK_VAADDVV_ZV, match_opcode, 0 },
>  {"vaadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VAADDVX, MASK_VAADDVX, match_opcode, 0 },
> +{"vaadd.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VAADDVX_ZV, MASK_VAADDVX_ZV, match_opcode, 0 },
> +{"vaadd.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,ViVm", MATCH_VAADDVI, MASK_VAADDVI, match_opcode, 0 },
>  {"vasubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VASUBUVV, MASK_VASUBUVV, match_opcode, 0 },
>  {"vasubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VASUBUVX, MASK_VASUBUVX, match_opcode, 0 },
>  {"vasub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VASUBVV, MASK_VASUBVV, match_opcode, 0 },
> +{"vasub.vv", 0, INSN_CLASS_XTHEADV, "Vd,Vt,VsVm", MATCH_VASUBVV_ZV, MASK_VASUBVV_ZV, match_opcode, 0 },
>  {"vasub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VASUBVX, MASK_VASUBVX, match_opcode, 0 },
> +{"vasub.vx", 0, INSN_CLASS_XTHEADV, "Vd,Vt,sVm", MATCH_VASUBVX_ZV, MASK_VASUBVX_ZV, match_opcode, 0 },
>
> -{"vsmul.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSMULVV, MASK_VSMULVV, match_opcode, 0 },
> -{"vsmul.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSMULVX, MASK_VSMULVX, match_opcode, 0 },
> +{"vsmul.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSMULVV, MASK_VSMULVV, match_opcode, 0 },
> +{"vsmul.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSMULVX, MASK_VSMULVX, match_opcode, 0 },
>
> -{"vssrl.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSRLVV, MASK_VSSRLVV, match_opcode, 0 },
> -{"vssrl.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSRLVX, MASK_VSSRLVX, match_opcode, 0 },
> -{"vssrl.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSSRLVI, MASK_VSSRLVI, match_opcode, 0 },
> -{"vssra.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSRAVV, MASK_VSSRAVV, match_opcode, 0 },
> -{"vssra.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSRAVX, MASK_VSSRAVX, match_opcode, 0 },
> -{"vssra.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSSRAVI, MASK_VSSRAVI, match_opcode, 0 },
> +{"vssrl.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSRLVV, MASK_VSSRLVV, match_opcode, 0 },
> +{"vssrl.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSRLVX, MASK_VSSRLVX, match_opcode, 0 },
> +{"vssrl.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSSRLVI, MASK_VSSRLVI, match_opcode, 0 },
> +{"vssra.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSSRAVV, MASK_VSSRAVV, match_opcode, 0 },
> +{"vssra.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSRAVX, MASK_VSSRAVX, match_opcode, 0 },
> +{"vssra.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm", MATCH_VSSRAVI, MASK_VSSRAVI, match_opcode, 0 },
>
>  {"vnclipu.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VNCLIPUWV, MASK_VNCLIPUWV, match_opcode, 0 },
>  {"vnclipu.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNCLIPUWX, MASK_VNCLIPUWX, match_opcode, 0 },
> @@ -1721,190 +1741,210 @@ const struct riscv_opcode riscv_opcodes[] =
>  {"vnclip.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNCLIPWX, MASK_VNCLIPWX, match_opcode, 0 },
>  {"vnclip.wi",   0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VNCLIPWI, MASK_VNCLIPWI, match_opcode, 0 },
>
> -{"vfadd.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFADDVV, MASK_VFADDVV, match_opcode, 0},
> -{"vfadd.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFADDVF, MASK_VFADDVF, match_opcode, 0},
> -{"vfsub.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSUBVV, MASK_VFSUBVV, match_opcode, 0},
> -{"vfsub.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSUBVF, MASK_VFSUBVF, match_opcode, 0},
> -{"vfrsub.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFRSUBVF, MASK_VFRSUBVF, match_opcode, 0},
> -
> -{"vfwadd.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWADDVV, MASK_VFWADDVV, match_opcode, 0},
> -{"vfwadd.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWADDVF, MASK_VFWADDVF, match_opcode, 0},
> -{"vfwsub.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWSUBVV, MASK_VFWSUBVV, match_opcode, 0},
> -{"vfwsub.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWSUBVF, MASK_VFWSUBVF, match_opcode, 0},
> -{"vfwadd.wv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWADDWV, MASK_VFWADDWV, match_opcode, 0},
> -{"vfwadd.wf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWADDWF, MASK_VFWADDWF, match_opcode, 0},
> -{"vfwsub.wv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWSUBWV, MASK_VFWSUBWV, match_opcode, 0},
> -{"vfwsub.wf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWSUBWF, MASK_VFWSUBWF, match_opcode, 0},
> -
> -{"vfmul.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMULVV, MASK_VFMULVV, match_opcode, 0},
> -{"vfmul.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMULVF, MASK_VFMULVF, match_opcode, 0},
> -{"vfdiv.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFDIVVV, MASK_VFDIVVV, match_opcode, 0},
> -{"vfdiv.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFDIVVF, MASK_VFDIVVF, match_opcode, 0},
> -{"vfrdiv.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFRDIVVF, MASK_VFRDIVVF, match_opcode, 0},
> -
> -{"vfwmul.vv",  0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWMULVV, MASK_VFWMULVV, match_opcode, 0},
> -{"vfwmul.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWMULVF, MASK_VFWMULVF, match_opcode, 0},
> -
> -{"vfmadd.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMADDVV, MASK_VFMADDVV, match_opcode, 0},
> -{"vfmadd.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMADDVF, MASK_VFMADDVF, match_opcode, 0},
> -{"vfnmadd.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMADDVV, MASK_VFNMADDVV, match_opcode, 0},
> -{"vfnmadd.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMADDVF, MASK_VFNMADDVF, match_opcode, 0},
> -{"vfmsub.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMSUBVV, MASK_VFMSUBVV, match_opcode, 0},
> -{"vfmsub.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMSUBVF, MASK_VFMSUBVF, match_opcode, 0},
> -{"vfnmsub.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMSUBVV, MASK_VFNMSUBVV, match_opcode, 0},
> -{"vfnmsub.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMSUBVF, MASK_VFNMSUBVF, match_opcode, 0},
> -{"vfmacc.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMACCVV, MASK_VFMACCVV, match_opcode, 0},
> -{"vfmacc.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMACCVF, MASK_VFMACCVF, match_opcode, 0},
> -{"vfnmacc.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMACCVV, MASK_VFNMACCVV, match_opcode, 0},
> -{"vfnmacc.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMACCVF, MASK_VFNMACCVF, match_opcode, 0},
> -{"vfmsac.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMSACVV, MASK_VFMSACVV, match_opcode, 0},
> -{"vfmsac.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMSACVF, MASK_VFMSACVF, match_opcode, 0},
> -{"vfnmsac.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMSACVV, MASK_VFNMSACVV, match_opcode, 0},
> -{"vfnmsac.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMSACVF, MASK_VFNMSACVF, match_opcode, 0},
> -
> -{"vfwmacc.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWMACCVV, MASK_VFWMACCVV, match_opcode, 0},
> -{"vfwmacc.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWMACCVF, MASK_VFWMACCVF, match_opcode, 0},
> -{"vfwnmacc.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWNMACCVV, MASK_VFWNMACCVV, match_opcode, 0},
> -{"vfwnmacc.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWNMACCVF, MASK_VFWNMACCVF, match_opcode, 0},
> -{"vfwmsac.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWMSACVV, MASK_VFWMSACVV, match_opcode, 0},
> -{"vfwmsac.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWMSACVF, MASK_VFWMSACVF, match_opcode, 0},
> -{"vfwnmsac.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWNMSACVV, MASK_VFWNMSACVV, match_opcode, 0},
> -{"vfwnmsac.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWNMSACVF, MASK_VFWNMSACVF, match_opcode, 0},
> +{"vfadd.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFADDVV, MASK_VFADDVV, match_opcode, 0},
> +{"vfadd.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFADDVF, MASK_VFADDVF, match_opcode, 0},
> +{"vfsub.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSUBVV, MASK_VFSUBVV, match_opcode, 0},
> +{"vfsub.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSUBVF, MASK_VFSUBVF, match_opcode, 0},
> +{"vfrsub.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFRSUBVF, MASK_VFRSUBVF, match_opcode, 0},
> +
> +{"vfwadd.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWADDVV, MASK_VFWADDVV, match_opcode, 0},
> +{"vfwadd.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWADDVF, MASK_VFWADDVF, match_opcode, 0},
> +{"vfwsub.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWSUBVV, MASK_VFWSUBVV, match_opcode, 0},
> +{"vfwsub.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWSUBVF, MASK_VFWSUBVF, match_opcode, 0},
> +{"vfwadd.wv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWADDWV, MASK_VFWADDWV, match_opcode, 0},
> +{"vfwadd.wf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWADDWF, MASK_VFWADDWF, match_opcode, 0},
> +{"vfwsub.wv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWSUBWV, MASK_VFWSUBWV, match_opcode, 0},
> +{"vfwsub.wf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWSUBWF, MASK_VFWSUBWF, match_opcode, 0},
> +
> +{"vfmul.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFMULVV, MASK_VFMULVV, match_opcode, 0},
> +{"vfmul.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFMULVF, MASK_VFMULVF, match_opcode, 0},
> +{"vfdiv.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFDIVVV, MASK_VFDIVVV, match_opcode, 0},
> +{"vfdiv.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFDIVVF, MASK_VFDIVVF, match_opcode, 0},
> +{"vfrdiv.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFRDIVVF, MASK_VFRDIVVF, match_opcode, 0},
> +
> +{"vfwmul.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWMULVV, MASK_VFWMULVV, match_opcode, 0},
> +{"vfwmul.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFWMULVF, MASK_VFWMULVF, match_opcode, 0},
> +
> +{"vfmadd.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMADDVV, MASK_VFMADDVV, match_opcode, 0},
> +{"vfmadd.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMADDVF, MASK_VFMADDVF, match_opcode, 0},
> +{"vfnmadd.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMADDVV, MASK_VFNMADDVV, match_opcode, 0},
> +{"vfnmadd.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMADDVF, MASK_VFNMADDVF, match_opcode, 0},
> +{"vfmsub.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMSUBVV, MASK_VFMSUBVV, match_opcode, 0},
> +{"vfmsub.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMSUBVF, MASK_VFMSUBVF, match_opcode, 0},
> +{"vfnmsub.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMSUBVV, MASK_VFNMSUBVV, match_opcode, 0},
> +{"vfnmsub.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMSUBVF, MASK_VFNMSUBVF, match_opcode, 0},
> +{"vfmacc.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMACCVV, MASK_VFMACCVV, match_opcode, 0},
> +{"vfmacc.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMACCVF, MASK_VFMACCVF, match_opcode, 0},
> +{"vfnmacc.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMACCVV, MASK_VFNMACCVV, match_opcode, 0},
> +{"vfnmacc.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMACCVF, MASK_VFNMACCVF, match_opcode, 0},
> +{"vfmsac.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFMSACVV, MASK_VFMSACVV, match_opcode, 0},
> +{"vfmsac.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFMSACVF, MASK_VFMSACVF, match_opcode, 0},
> +{"vfnmsac.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFNMSACVV, MASK_VFNMSACVV, match_opcode, 0},
> +{"vfnmsac.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFNMSACVF, MASK_VFNMSACVF, match_opcode, 0},
> +
> +{"vfwmacc.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWMACCVV, MASK_VFWMACCVV, match_opcode, 0},
> +{"vfwmacc.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWMACCVF, MASK_VFWMACCVF, match_opcode, 0},
> +{"vfwnmacc.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWNMACCVV, MASK_VFWNMACCVV, match_opcode, 0},
> +{"vfwnmacc.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWNMACCVF, MASK_VFWNMACCVF, match_opcode, 0},
> +{"vfwmsac.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWMSACVV, MASK_VFWMSACVV, match_opcode, 0},
> +{"vfwmsac.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWMSACVF, MASK_VFWMSACVF, match_opcode, 0},
> +{"vfwnmsac.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VFWNMSACVV, MASK_VFWNMSACVV, match_opcode, 0},
> +{"vfwnmsac.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm", MATCH_VFWNMSACVF, MASK_VFWNMSACVF, match_opcode, 0},
>
>  {"vfsqrt.v",   0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFSQRTV, MASK_VFSQRTV, match_opcode, 0},
> +{"vfsqrt.v", 0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFSQRTV_ZV, MASK_VFSQRTV_ZV, match_opcode, 0},
>  {"vfrsqrt7.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFRSQRT7V, MASK_VFRSQRT7V, match_opcode, 0},
>  {"vfrsqrte7.v",0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFRSQRT7V, MASK_VFRSQRT7V, match_opcode, 0},
>  {"vfrec7.v",   0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFREC7V, MASK_VFREC7V, match_opcode, 0},
>  {"vfrece7.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFREC7V, MASK_VFREC7V, match_opcode, 0},
>  {"vfclass.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCLASSV, MASK_VFCLASSV, match_opcode, 0},
> +{"vfclass.v", 0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCLASSV_ZV, MASK_VFCLASSV_ZV, match_opcode, 0},
>
> -{"vfmin.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMINVV, MASK_VFMINVV, match_opcode, 0},
> -{"vfmin.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMINVF, MASK_VFMINVF, match_opcode, 0},
> -{"vfmax.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMAXVV, MASK_VFMAXVV, match_opcode, 0},
> -{"vfmax.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMAXVF, MASK_VFMAXVF, match_opcode, 0},
> +{"vfmin.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFMINVV, MASK_VFMINVV, match_opcode, 0},
> +{"vfmin.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFMINVF, MASK_VFMINVF, match_opcode, 0},
> +{"vfmax.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFMAXVV, MASK_VFMAXVV, match_opcode, 0},
> +{"vfmax.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFMAXVF, MASK_VFMAXVF, match_opcode, 0},
>
>  {"vfneg.v",    0, INSN_CLASS_ZVEF, "Vd,VuVm", MATCH_VFSGNJNVV, MASK_VFSGNJNVV, match_vs1_eq_vs2, INSN_ALIAS },
>  {"vfabs.v",    0, INSN_CLASS_ZVEF, "Vd,VuVm", MATCH_VFSGNJXVV, MASK_VFSGNJXVV, match_vs1_eq_vs2, INSN_ALIAS },
>
> -{"vfsgnj.vv",  0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJVV, MASK_VFSGNJVV, match_opcode, 0},
> -{"vfsgnj.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJVF, MASK_VFSGNJVF, match_opcode, 0},
> -{"vfsgnjn.vv", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJNVV, MASK_VFSGNJNVV, match_opcode, 0},
> -{"vfsgnjn.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJNVF, MASK_VFSGNJNVF, match_opcode, 0},
> -{"vfsgnjx.vv", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJXVV, MASK_VFSGNJXVV, match_opcode, 0},
> -{"vfsgnjx.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJXVF, MASK_VFSGNJXVF, match_opcode, 0},
> -
> -{"vmfeq.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFEQVV, MASK_VMFEQVV, match_opcode, 0},
> -{"vmfeq.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFEQVF, MASK_VMFEQVF, match_opcode, 0},
> -{"vmfne.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFNEVV, MASK_VMFNEVV, match_opcode, 0},
> -{"vmfne.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFNEVF, MASK_VMFNEVF, match_opcode, 0},
> -{"vmflt.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, 0},
> -{"vmflt.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFLTVF, MASK_VMFLTVF, match_opcode, 0},
> -{"vmfle.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, 0},
> -{"vmfle.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFLEVF, MASK_VMFLEVF, match_opcode, 0},
> -{"vmfgt.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFGTVF, MASK_VMFGTVF, match_opcode, 0},
> -{"vmfge.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFGEVF, MASK_VMFGEVF, match_opcode, 0},
> +{"vfsgnj.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSGNJVV, MASK_VFSGNJVV, match_opcode, 0},
> +{"vfsgnj.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSGNJVF, MASK_VFSGNJVF, match_opcode, 0},
> +{"vfsgnjn.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSGNJNVV, MASK_VFSGNJNVV, match_opcode, 0},
> +{"vfsgnjn.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSGNJNVF, MASK_VFSGNJNVF, match_opcode, 0},
> +{"vfsgnjx.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFSGNJXVV, MASK_VFSGNJXVV, match_opcode, 0},
> +{"vfsgnjx.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VFSGNJXVF, MASK_VFSGNJXVF, match_opcode, 0},
> +
> +{"vmfeq.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFEQVV, MASK_VMFEQVV, match_opcode, 0},
> +{"vmfeq.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFEQVF, MASK_VMFEQVF, match_opcode, 0},
> +{"vmfne.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFNEVV, MASK_VMFNEVV, match_opcode, 0},
> +{"vmfne.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFNEVF, MASK_VMFNEVF, match_opcode, 0},
> +{"vmflt.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, 0},
> +{"vmflt.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFLTVF, MASK_VMFLTVF, match_opcode, 0},
> +{"vmfle.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, 0},
> +{"vmfle.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFLEVF, MASK_VMFLEVF, match_opcode, 0},
> +{"vmfgt.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFGTVF, MASK_VMFGTVF, match_opcode, 0},
> +{"vmfge.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm", MATCH_VMFGEVF, MASK_VMFGEVF, match_opcode, 0},
>
>  /* These aliases are for assembly but not disassembly.  */
> -{"vmfgt.vv",    0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, INSN_ALIAS},
> -{"vmfge.vv",   0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, INSN_ALIAS},
> +{"vmfgt.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, INSN_ALIAS},
> +{"vmfge.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm", MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, INSN_ALIAS},
>
> -{"vfmerge.vfm",0, INSN_CLASS_ZVEF, "Vd,Vt,S,V0", MATCH_VFMERGEVFM, MASK_VFMERGEVFM, match_opcode, 0},
> -{"vfmv.v.f",   0, INSN_CLASS_ZVEF, "Vd,S", MATCH_VFMVVF, MASK_VFMVVF, match_opcode, 0 },
> +{"vfmerge.vfm",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,S,V0", MATCH_VFMERGEVFM, MASK_VFMERGEVFM, match_opcode, 0},
> +{"vfmv.v.f",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S", MATCH_VFMVVF, MASK_VFMVVF, match_opcode, 0 },
>
>  {"vfcvt.xu.f.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTXUFV, MASK_VFCVTXUFV, match_opcode, 0},
> +{"vfcvt.xu.f.v",     0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTXUFV_ZV, MASK_VFCVTXUFV_ZV, match_opcode, 0},
>  {"vfcvt.x.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTXFV, MASK_VFCVTXFV, match_opcode, 0},
> +{"vfcvt.x.f.v",      0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTXFV_ZV, MASK_VFCVTXFV_ZV, match_opcode, 0},
>  {"vfcvt.rtz.xu.f.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTRTZXUFV, MASK_VFCVTRTZXUFV, match_opcode, 0},
>  {"vfcvt.rtz.x.f.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTRTZXFV, MASK_VFCVTRTZXFV, match_opcode, 0},
>  {"vfcvt.f.xu.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTFXUV, MASK_VFCVTFXUV, match_opcode, 0},
> +{"vfcvt.f.xu.v",     0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTFXUV_ZV, MASK_VFCVTFXUV_ZV, match_opcode, 0},
>  {"vfcvt.f.x.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTFXV, MASK_VFCVTFXV, match_opcode, 0},
> +{"vfcvt.f.x.v",      0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCVTFXV_ZV, MASK_VFCVTFXV_ZV, match_opcode, 0},
>
>  {"vfwcvt.xu.f.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTXUFV, MASK_VFWCVTXUFV, match_opcode, 0},
> +{"vfwcvt.xu.f.v",     0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTXUFV_ZV, MASK_VFWCVTXUFV_ZV, match_opcode, 0},
>  {"vfwcvt.x.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTXFV, MASK_VFWCVTXFV, match_opcode, 0},
> +{"vfwcvt.x.f.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTXFV_ZV, MASK_VFWCVTXFV_ZV, match_opcode, 0},
>  {"vfwcvt.rtz.xu.f.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTRTZXUFV, MASK_VFWCVTRTZXUFV, match_opcode, 0},
>  {"vfwcvt.rtz.x.f.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTRTZXFV, MASK_VFWCVTRTZXFV, match_opcode, 0},
>  {"vfwcvt.f.xu.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFXUV, MASK_VFWCVTFXUV, match_opcode, 0},
> +{"vfwcvt.f.xu.v",     0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTFXUV_ZV, MASK_VFWCVTFXUV_ZV, match_opcode, 0},
>  {"vfwcvt.f.x.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFXV, MASK_VFWCVTFXV, match_opcode, 0},
> +{"vfwcvt.f.x.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTFXV_ZV, MASK_VFWCVTFXV_ZV, match_opcode, 0},
>  {"vfwcvt.f.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFFV, MASK_VFWCVTFFV, match_opcode, 0},
> +{"vfwcvt.f.f.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm", MATCH_VFWCVTFFV_ZV, MASK_VFWCVTFFV_ZV, match_opcode, 0},
>
>  {"vfncvt.xu.f.w",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTXUFW, MASK_VFNCVTXUFW, match_opcode, 0},
>  {"vfncvt.x.f.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTXFW, MASK_VFNCVTXFW, match_opcode, 0},
> -{"vfncvt.rtz.xu.f.w", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTRTZXUFW, MASK_VFNCVTRTZXUFW, match_opcode, 0},
> -{"vfncvt.rtz.x.f.w",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTRTZXFW, MASK_VFNCVTRTZXFW, match_opcode, 0},
> -{"vfncvt.f.xu.w",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFXUW, MASK_VFNCVTFXUW, match_opcode, 0},
> -{"vfncvt.f.x.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFXW, MASK_VFNCVTFXW, match_opcode, 0},
>  {"vfncvt.f.f.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFFW, MASK_VFNCVTFFW, match_opcode, 0},
>  {"vfncvt.rod.f.f.w",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTRODFFW, MASK_VFNCVTRODFFW, match_opcode, 0},
>
> -{"vredsum.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDSUMVS, MASK_VREDSUMVS, match_opcode, 0},
> -{"vredmaxu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMAXUVS, MASK_VREDMAXUVS, match_opcode, 0},
> -{"vredmax.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMAXVS, MASK_VREDMAXVS, match_opcode, 0},
> -{"vredminu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMINUVS, MASK_VREDMINUVS, match_opcode, 0},
> -{"vredmin.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMINVS, MASK_VREDMINVS, match_opcode, 0},
> -{"vredand.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDANDVS, MASK_VREDANDVS, match_opcode, 0},
> -{"vredor.vs",  0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDORVS, MASK_VREDORVS, match_opcode, 0},
> -{"vredxor.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDXORVS, MASK_VREDXORVS, match_opcode, 0},
> +{"vredsum.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDSUMVS, MASK_VREDSUMVS, match_opcode, 0},
> +{"vredmaxu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMAXUVS, MASK_VREDMAXUVS, match_opcode, 0},
> +{"vredmax.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMAXVS, MASK_VREDMAXVS, match_opcode, 0},
> +{"vredminu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMINUVS, MASK_VREDMINUVS, match_opcode, 0},
> +{"vredmin.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDMINVS, MASK_VREDMINVS, match_opcode, 0},
> +{"vredand.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDANDVS, MASK_VREDANDVS, match_opcode, 0},
> +{"vredor.vs",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDORVS, MASK_VREDORVS, match_opcode, 0},
> +{"vredxor.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VREDXORVS, MASK_VREDXORVS, match_opcode, 0},
>
> -{"vwredsumu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VWREDSUMUVS, MASK_VWREDSUMUVS, match_opcode, 0},
> -{"vwredsum.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VWREDSUMVS, MASK_VWREDSUMVS, match_opcode, 0},
> +{"vwredsumu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VWREDSUMUVS, MASK_VWREDSUMUVS, match_opcode, 0},
> +{"vwredsum.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VWREDSUMVS, MASK_VWREDSUMVS, match_opcode, 0},
>
> -{"vfredosum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDOSUMVS, MASK_VFREDOSUMVS, match_opcode, 0},
> +{"vfredosum.vs",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFREDOSUMVS, MASK_VFREDOSUMVS, match_opcode, 0},
>  {"vfredusum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDUSUMVS, MASK_VFREDUSUMVS, match_opcode, 0},
>  {"vfredsum.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDUSUMVS, MASK_VFREDUSUMVS, match_opcode, INSN_ALIAS},
> -{"vfredmax.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDMAXVS, MASK_VFREDMAXVS, match_opcode, 0},
> -{"vfredmin.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDMINVS, MASK_VFREDMINVS, match_opcode, 0},
> +{"vfredsum.vs", 0, INSN_CLASS_XTHEADV,   "Vd,Vt,VsVm", MATCH_VFREDUSUMVS, MASK_VFREDUSUMVS, match_opcode, 0},
> +{"vfredmax.vs", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFREDMAXVS, MASK_VFREDMAXVS, match_opcode, 0},
> +{"vfredmin.vs", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFREDMINVS, MASK_VFREDMINVS, match_opcode, 0},
>
> -{"vfwredosum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDOSUMVS, MASK_VFWREDOSUMVS, match_opcode, 0},
> +{"vfwredosum.vs",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VFWREDOSUMVS, MASK_VFWREDOSUMVS, match_opcode, 0},
>  {"vfwredusum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS, MASK_VFWREDUSUMVS, match_opcode, 0},
>  {"vfwredsum.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS, MASK_VFWREDUSUMVS, match_opcode, INSN_ALIAS},
> +{"vfwredsum.vs", 0, INSN_CLASS_XTHEADV,   "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS, MASK_VFWREDUSUMVS, match_opcode, 0},
>
>  {"vmmv.m",     0, INSN_CLASS_V, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM, match_vs1_eq_vs2, INSN_ALIAS},
> -{"vmcpy.m",    0, INSN_CLASS_V, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM, match_vs1_eq_vs2, INSN_ALIAS},
> -{"vmclr.m",    0, INSN_CLASS_V, "Vv", MATCH_VMXORMM, MASK_VMXORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> -{"vmset.m",    0, INSN_CLASS_V, "Vv", MATCH_VMXNORMM, MASK_VMXNORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> -{"vmnot.m",    0, INSN_CLASS_V, "Vd,Vu", MATCH_VMNANDMM, MASK_VMNANDMM, match_vs1_eq_vs2, INSN_ALIAS},
> +{"vmcpy.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM, match_vs1_eq_vs2, INSN_ALIAS},
> +{"vmclr.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vv", MATCH_VMXORMM, MASK_VMXORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> +{"vmset.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vv", MATCH_VMXNORMM, MASK_VMXNORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> +{"vmnot.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vu", MATCH_VMNANDMM, MASK_VMNANDMM, match_vs1_eq_vs2, INSN_ALIAS},
>
> -{"vmand.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDMM, MASK_VMANDMM, match_opcode, 0},
> -{"vmnand.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMNANDMM, MASK_VMNANDMM, match_opcode, 0},
> +{"vmand.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMANDMM, MASK_VMANDMM, match_opcode, 0},
> +{"vmnand.mm",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMNANDMM, MASK_VMNANDMM, match_opcode, 0},
>  {"vmandn.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDNMM, MASK_VMANDNMM, match_opcode, 0},
>  {"vmandnot.mm",0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDNMM, MASK_VMANDNMM, match_opcode, INSN_ALIAS},
> -{"vmxor.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMXORMM, MASK_VMXORMM, match_opcode, 0},
> -{"vmor.mm",    0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORMM, MASK_VMORMM, match_opcode, 0},
> -{"vmnor.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMNORMM, MASK_VMNORMM, match_opcode, 0},
> +{"vmandnot.mm",0, INSN_CLASS_XTHEADV, "Vd,Vt,Vs", MATCH_VMANDNMM, MASK_VMANDNMM, match_opcode, 0},
> +{"vmxor.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMXORMM, MASK_VMXORMM, match_opcode, 0},
> +{"vmor.mm",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMORMM, MASK_VMORMM, match_opcode, 0},
> +{"vmnor.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMNORMM, MASK_VMNORMM, match_opcode, 0},
>  {"vmorn.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORNMM, MASK_VMORNMM, match_opcode, 0},
>  {"vmornot.mm", 0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORNMM, MASK_VMORNMM, match_opcode, INSN_ALIAS},
> -{"vmxnor.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMXNORMM, MASK_VMXNORMM, match_opcode, 0},
> +{"vmornot.mm", 0, INSN_CLASS_XTHEADV, "Vd,Vt,Vs", MATCH_VMORNMM, MASK_VMORNMM, match_opcode, 0},
> +{"vmxnor.mm",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMXNORMM, MASK_VMXNORMM, match_opcode, 0},
>
>  {"vcpop.m",    0, INSN_CLASS_V, "d,VtVm", MATCH_VCPOPM, MASK_VCPOPM, match_opcode, 0},
>  {"vpopc.m",    0, INSN_CLASS_V, "d,VtVm", MATCH_VCPOPM, MASK_VCPOPM, match_opcode, INSN_ALIAS},
>  {"vfirst.m",   0, INSN_CLASS_V, "d,VtVm", MATCH_VFIRSTM, MASK_VFIRSTM, match_opcode, 0},
>  {"vmsbf.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSBFM, MASK_VMSBFM, match_opcode, 0},
> +{"vmsbf.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSBFM_ZV, MASK_VMSBFM_ZV, match_opcode, 0},
>  {"vmsif.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSIFM, MASK_VMSIFM, match_opcode, 0},
> +{"vmsif.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSIFM_ZV, MASK_VMSIFM_ZV, match_opcode, 0},
>  {"vmsof.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSOFM, MASK_VMSOFM, match_opcode, 0},
> +{"vmsof.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSOFM_ZV, MASK_VMSOFM_ZV, match_opcode, 0},
>  {"viota.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VIOTAM, MASK_VIOTAM, match_opcode, 0},
> +{"viota.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VIOTAM_ZV, MASK_VIOTAM_ZV, match_opcode, 0},
>  {"vid.v",      0, INSN_CLASS_V, "VdVm", MATCH_VIDV, MASK_VIDV, match_opcode, 0},
> +{"vid.v",      0, INSN_CLASS_XTHEADV, "VdVm", MATCH_VIDV_ZV, MASK_VIDV_ZV, match_opcode, 0},
>
>  {"vmv.x.s",    0, INSN_CLASS_V, "d,Vt", MATCH_VMVXS, MASK_VMVXS, match_opcode, 0},
> +{"vmv.x.s",    0, INSN_CLASS_XTHEADV, "d,Vt", MATCH_VMVXS_ZV, MASK_VMVXS_ZV, match_opcode, INSN_ALIAS},
>  {"vmv.s.x",    0, INSN_CLASS_V, "Vd,s", MATCH_VMVSX, MASK_VMVSX, match_opcode, 0},
> +{"vmv.s.x",    0, INSN_CLASS_XTHEADV, "Vd,s", MATCH_VMVSX_ZV, MASK_VMVSX_ZV, match_opcode, 0},
>
> -{"vfmv.f.s",   0, INSN_CLASS_ZVEF, "D,Vt", MATCH_VFMVFS, MASK_VFMVFS, match_opcode, 0},
> -{"vfmv.s.f",   0, INSN_CLASS_ZVEF, "Vd,S", MATCH_VFMVSF, MASK_VFMVSF, match_opcode, 0},
> +{"vfmv.f.s",   0, INSN_CLASS_V, "D,Vt", MATCH_VFMVFS, MASK_VFMVFS, match_opcode, 0},
> +{"vfmv.f.s",   0, INSN_CLASS_XTHEADV, "D,Vt", MATCH_VFMVFS_ZV, MASK_VFMVFS_ZV, match_opcode, 0},
> +{"vfmv.s.f",   0, INSN_CLASS_V, "Vd,S", MATCH_VFMVSF, MASK_VFMVSF, match_opcode, 0},
> +{"vfmv.s.f",   0, INSN_CLASS_XTHEADV, "Vd,S", MATCH_VFMVSF_ZV, MASK_VFMVSF_ZV, match_opcode, 0},
>
> -{"vslideup.vx",0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDEUPVX, MASK_VSLIDEUPVX, match_opcode, 0},
> -{"vslideup.vi",0, INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VSLIDEUPVI, MASK_VSLIDEUPVI, match_opcode, 0},
> -{"vslidedown.vx",0,INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDEDOWNVX, MASK_VSLIDEDOWNVX, match_opcode, 0},
> -{"vslidedown.vi",0,INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VSLIDEDOWNVI, MASK_VSLIDEDOWNVI, match_opcode, 0},
> +{"vslideup.vx",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDEUPVX, MASK_VSLIDEUPVX, match_opcode, 0},
> +{"vslideup.vi",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm", MATCH_VSLIDEUPVI, MASK_VSLIDEUPVI, match_opcode, 0},
> +{"vslidedown.vx",0,INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDEDOWNVX, MASK_VSLIDEDOWNVX, match_opcode, 0},
> +{"vslidedown.vi",0,INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm", MATCH_VSLIDEDOWNVI, MASK_VSLIDEDOWNVI, match_opcode, 0},
>
> -{"vslide1up.vx",    0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDE1UPVX, MASK_VSLIDE1UPVX, match_opcode, 0},
> -{"vslide1down.vx",  0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDE1DOWNVX, MASK_VSLIDE1DOWNVX, match_opcode, 0},
> +{"vslide1up.vx",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDE1UPVX, MASK_VSLIDE1UPVX, match_opcode, 0},
> +{"vslide1down.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VSLIDE1DOWNVX, MASK_VSLIDE1DOWNVX, match_opcode, 0},
>  {"vfslide1up.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSLIDE1UPVF, MASK_VFSLIDE1UPVF, match_opcode, 0},
>  {"vfslide1down.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSLIDE1DOWNVF, MASK_VFSLIDE1DOWNVF, match_opcode, 0},
>
> -{"vrgather.vv",    0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VRGATHERVV, MASK_VRGATHERVV, match_opcode, 0},
> -{"vrgather.vx",    0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VRGATHERVX, MASK_VRGATHERVX, match_opcode, 0},
> -{"vrgather.vi",    0, INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VRGATHERVI, MASK_VRGATHERVI, match_opcode, 0},
> +{"vrgather.vv",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm", MATCH_VRGATHERVV, MASK_VRGATHERVV, match_opcode, 0},
> +{"vrgather.vx",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", MATCH_VRGATHERVX, MASK_VRGATHERVX, match_opcode, 0},
> +{"vrgather.vi",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm", MATCH_VRGATHERVI, MASK_VRGATHERVI, match_opcode, 0},
>  {"vrgatherei16.vv",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VRGATHEREI16VV, MASK_VRGATHEREI16VV, match_opcode, 0},
>
> -{"vcompress.vm",0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VCOMPRESSVM, MASK_VCOMPRESSVM, match_opcode, 0},
> +{"vcompress.vm",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VCOMPRESSVM, MASK_VCOMPRESSVM, match_opcode, 0},
>
>  {"vmv1r.v",    0, INSN_CLASS_V, "Vd,Vt", MATCH_VMV1RV, MASK_VMV1RV, match_opcode, 0},
>  {"vmv2r.v",    0, INSN_CLASS_V, "Vd,Vt", MATCH_VMV2RV, MASK_VMV2RV, match_opcode, 0},
> @@ -1980,6 +2020,424 @@ const struct riscv_opcode riscv_opcodes[] =
>  {"c.zext.w",  64, INSN_CLASS_ZCB_AND_ZBA, "Cs",  MATCH_C_ZEXT_W, MASK_C_ZEXT_W, match_opcode, 0 },
>  {"c.zext.b",   0, INSN_CLASS_ZCB, "Cs",  MATCH_C_ZEXT_B, MASK_C_ZEXT_B, match_opcode, 0 },
>  {"c.sext.w",  64, INSN_CLASS_ZCB, "d",  MATCH_C_ADDIW, MASK_C_ADDIW|MASK_RVC_IMM, match_rd_nonzero, INSN_ALIAS },
> +/* RVV 0.7 instructions.*/
> +{"vlb.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLBV, MASK_VLBV, match_opcode, INSN_DREF },
> +{"vlh.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLHV, MASK_VLHV, match_opcode, INSN_DREF },
> +{"vlw.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLWV, MASK_VLWV, match_opcode, INSN_DREF },
> +{"vlbu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE8V, MASK_VLE8V, match_opcode, INSN_DREF },
> +{"vlhu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE16V, MASK_VLE16V, match_opcode, INSN_DREF },
> +{"vlwu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE32V, MASK_VLE32V, match_opcode, INSN_DREF },
> +{"vle.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE64V, MASK_VLE64V, match_opcode, INSN_DREF },
> +{"vsb.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE8V, MASK_VSE8V, match_opcode, INSN_DREF },
> +{"vsh.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE16V, MASK_VSE16V, match_opcode, INSN_DREF },
> +{"vsw.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE32V, MASK_VSE32V, match_opcode, INSN_DREF },
> +{"vse.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE64V, MASK_VSE64V, match_opcode, INSN_DREF },
> +
> +{"vlsb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSBV, MASK_VLSBV, match_opcode, INSN_DREF },
> +{"vlsh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSHV, MASK_VLSHV, match_opcode, INSN_DREF },
> +{"vlsw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSWV, MASK_VLSWV, match_opcode, INSN_DREF },
> +{"vlsbu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE8V, MASK_VLSE8V, match_opcode, INSN_DREF },
> +{"vlshu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE16V, MASK_VLSE16V, match_opcode, INSN_DREF },
> +{"vlswu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE32V, MASK_VLSE32V, match_opcode, INSN_DREF },
> +{"vlse.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE64V, MASK_VLSE64V, match_opcode, INSN_DREF },
> +{"vssb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE8V, MASK_VSSE8V, match_opcode, INSN_DREF },
> +{"vssh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE16V, MASK_VSSE16V, match_opcode, INSN_DREF },
> +{"vssw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE32V, MASK_VSSE32V, match_opcode, INSN_DREF },
> +{"vsse.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE64V, MASK_VSSE64V, match_opcode, INSN_DREF },
> +
> +{"vlxb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXBV, MASK_VLXBV, match_opcode, INSN_DREF },
> +{"vlxh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXHV, MASK_VLXHV, match_opcode, INSN_DREF },
> +{"vlxw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXWV, MASK_VLXWV, match_opcode, INSN_DREF },
> +{"vlxbu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI8V, MASK_VLOXEI8V, match_opcode, INSN_DREF },
> +{"vlxhu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI16V, MASK_VLOXEI16V, match_opcode, INSN_DREF },
> +{"vlxwu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI32V, MASK_VLOXEI16V, match_opcode, INSN_DREF },
> +{"vlxe.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI64V, MASK_VLOXEI16V, match_opcode, INSN_DREF },
> +{"vsxb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI8V, MASK_VSOXEI8V, match_opcode, INSN_DREF },
> +{"vsxh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI16V, MASK_VSOXEI16V, match_opcode, INSN_DREF },
> +{"vsxw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI32V, MASK_VSOXEI32V, match_opcode, INSN_DREF },
> +{"vsxe.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI64V, MASK_VSOXEI64V, match_opcode, INSN_DREF },
> +{"vsuxb.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXBV, MASK_VSUXBV, match_opcode, INSN_DREF },
> +{"vsuxh.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXHV, MASK_VSUXHV, match_opcode, INSN_DREF },
> +{"vsuxw.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXWV, MASK_VSUXWV, match_opcode, INSN_DREF },
> +{"vsuxe.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXEV, MASK_VSUXEV, match_opcode, INSN_DREF },
> +
> +{"vlbff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLBFFV, MASK_VLBFFV, match_opcode, INSN_DREF },
> +{"vlhff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLHFFV, MASK_VLHFFV, match_opcode, INSN_DREF },
> +{"vlwff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLWFFV, MASK_VLWFFV, match_opcode, INSN_DREF },
> +{"vlbuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE8FFV, MASK_VLE8FFV, match_opcode, INSN_DREF },
> +{"vlhuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE16FFV, MASK_VLE16FFV, match_opcode, INSN_DREF },
> +{"vlwuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE32FFV, MASK_VLE32FFV, match_opcode, INSN_DREF },
> +{"vleff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE64FFV, MASK_VLE64FFV, match_opcode, INSN_DREF },
> +
> +{"vlseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2BV, MASK_VLSEG2BV, match_opcode, INSN_DREF },
> +{"vlseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2HV, MASK_VLSEG2HV, match_opcode, INSN_DREF },
> +{"vlseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2WV, MASK_VLSEG2WV, match_opcode, INSN_DREF },
> +{"vlseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E8V, MASK_VLSEG2E8V, match_opcode, INSN_DREF },
> +{"vlseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E16V, MASK_VLSEG2E16V, match_opcode, INSN_DREF },
> +{"vlseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E32V, MASK_VLSEG2E32V, match_opcode, INSN_DREF },
> +{"vlseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E64V, MASK_VLSEG2E64V, match_opcode, INSN_DREF },
> +{"vsseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E8V, MASK_VSSEG2E8V, match_opcode, INSN_DREF },
> +{"vsseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E16V, MASK_VSSEG2E16V, match_opcode, INSN_DREF },
> +{"vsseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E32V, MASK_VSSEG2E32V, match_opcode, INSN_DREF },
> +{"vsseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E64V, MASK_VSSEG2E64V, match_opcode, INSN_DREF },
> +
> +{"vlseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3BV, MASK_VLSEG3BV, match_opcode, INSN_DREF },
> +{"vlseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3HV, MASK_VLSEG3HV, match_opcode, INSN_DREF },
> +{"vlseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3WV, MASK_VLSEG3WV, match_opcode, INSN_DREF },
> +{"vlseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E8V, MASK_VLSEG3E8V, match_opcode, INSN_DREF },
> +{"vlseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E16V, MASK_VLSEG3E16V, match_opcode, INSN_DREF },
> +{"vlseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32V, MASK_VLSEG3E32V, match_opcode, INSN_DREF },
> +{"vlseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32V, MASK_VLSEG3E32V, match_opcode, INSN_DREF },
> +{"vsseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E8V, MASK_VSSEG3E8V, match_opcode, INSN_DREF },
> +{"vsseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E16V, MASK_VSSEG3E16V, match_opcode, INSN_DREF },
> +{"vsseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E32V, MASK_VSSEG3E32V, match_opcode, INSN_DREF },
> +{"vsseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E64V, MASK_VSSEG3E64V, match_opcode, INSN_DREF },
> +
> +{"vlseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4BV, MASK_VLSEG4BV, match_opcode, INSN_DREF },
> +{"vlseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4HV, MASK_VLSEG4HV, match_opcode, INSN_DREF },
> +{"vlseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4WV, MASK_VLSEG4WV, match_opcode, INSN_DREF },
> +{"vlseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E8V, MASK_VLSEG4E8V, match_opcode, INSN_DREF },
> +{"vlseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E16V, MASK_VLSEG4E16V, match_opcode, INSN_DREF },
> +{"vlseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E32V, MASK_VLSEG4E32V, match_opcode, INSN_DREF },
> +{"vlseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E64V, MASK_VLSEG4E64V, match_opcode, INSN_DREF },
> +{"vsseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E8V, MASK_VSSEG4E8V, match_opcode, INSN_DREF },
> +{"vsseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E16V, MASK_VSSEG4E16V, match_opcode, INSN_DREF },
> +{"vsseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E32V, MASK_VSSEG4E32V, match_opcode, INSN_DREF },
> +{"vsseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E64V, MASK_VSSEG4E64V, match_opcode, INSN_DREF },
> +
> +{"vlseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5BV, MASK_VLSEG5BV, match_opcode, INSN_DREF },
> +{"vlseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5HV, MASK_VLSEG5HV, match_opcode, INSN_DREF },
> +{"vlseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5WV, MASK_VLSEG5WV, match_opcode, INSN_DREF },
> +{"vlseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E8V, MASK_VLSEG5E8V, match_opcode, INSN_DREF },
> +{"vlseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E16V, MASK_VLSEG5E16V, match_opcode, INSN_DREF },
> +{"vlseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E32V, MASK_VLSEG5E32V, match_opcode, INSN_DREF },
> +{"vlseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E64V, MASK_VLSEG5E64V, match_opcode, INSN_DREF },
> +{"vsseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E8V, MASK_VSSEG5E8V, match_opcode, INSN_DREF },
> +{"vsseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E16V, MASK_VSSEG5E16V, match_opcode, INSN_DREF },
> +{"vsseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E32V, MASK_VSSEG5E32V, match_opcode, INSN_DREF },
> +{"vsseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E64V, MASK_VSSEG5E64V, match_opcode, INSN_DREF },
> +
> +{"vlseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6BV, MASK_VLSEG6BV, match_opcode, INSN_DREF },
> +{"vlseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6HV, MASK_VLSEG6HV, match_opcode, INSN_DREF },
> +{"vlseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6WV, MASK_VLSEG6WV, match_opcode, INSN_DREF },
> +{"vlseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E8V, MASK_VLSEG6E8V, match_opcode, INSN_DREF },
> +{"vlseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E16V, MASK_VLSEG6E16V, match_opcode, INSN_DREF },
> +{"vlseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E32V, MASK_VLSEG6E32V, match_opcode, INSN_DREF },
> +{"vlseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E64V, MASK_VLSEG6E64V, match_opcode, INSN_DREF },
> +{"vsseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E8V, MASK_VSSEG6E8V, match_opcode, INSN_DREF },
> +{"vsseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E16V, MASK_VSSEG6E16V, match_opcode, INSN_DREF },
> +{"vsseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E32V, MASK_VSSEG6E32V, match_opcode, INSN_DREF },
> +{"vsseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E64V, MASK_VSSEG6E64V, match_opcode, INSN_DREF },
> +
> +{"vlseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7BV, MASK_VLSEG7BV, match_opcode, INSN_DREF },
> +{"vlseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7HV, MASK_VLSEG7HV, match_opcode, INSN_DREF },
> +{"vlseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7WV, MASK_VLSEG7WV, match_opcode, INSN_DREF },
> +{"vlseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E8V, MASK_VLSEG7E8V, match_opcode, INSN_DREF },
> +{"vlseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E16V, MASK_VLSEG7E16V, match_opcode, INSN_DREF },
> +{"vlseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E32V, MASK_VLSEG7E32V, match_opcode, INSN_DREF },
> +{"vlseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E64V, MASK_VLSEG7E64V, match_opcode, INSN_DREF },
> +{"vsseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E8V, MASK_VSSEG7E8V, match_opcode, INSN_DREF },
> +{"vsseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E16V, MASK_VSSEG7E16V, match_opcode, INSN_DREF },
> +{"vsseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E32V, MASK_VSSEG7E32V, match_opcode, INSN_DREF },
> +{"vsseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E64V, MASK_VSSEG7E64V, match_opcode, INSN_DREF },
> +
> +{"vlseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8BV, MASK_VLSEG8BV, match_opcode, INSN_DREF },
> +{"vlseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8HV, MASK_VLSEG8HV, match_opcode, INSN_DREF },
> +{"vlseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8WV, MASK_VLSEG8WV, match_opcode, INSN_DREF },
> +{"vlseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E8V, MASK_VLSEG8E8V, match_opcode, INSN_DREF },
> +{"vlseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E16V, MASK_VLSEG8E16V, match_opcode, INSN_DREF },
> +{"vlseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E32V, MASK_VLSEG8E32V, match_opcode, INSN_DREF },
> +{"vlseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E64V, MASK_VLSEG8E64V, match_opcode, INSN_DREF },
> +{"vsseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E8V, MASK_VSSEG8E8V, match_opcode, INSN_DREF },
> +{"vsseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E16V, MASK_VSSEG8E16V, match_opcode, INSN_DREF },
> +{"vsseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E32V, MASK_VSSEG8E32V, match_opcode, INSN_DREF },
> +{"vsseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E64V, MASK_VSSEG8E64V, match_opcode, INSN_DREF },
> +
> +{"vlsseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2BV, MASK_VLSSEG2BV, match_opcode, INSN_DREF },
> +{"vlsseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2HV, MASK_VLSSEG2HV, match_opcode, INSN_DREF },
> +{"vlsseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2WV, MASK_VLSSEG2WV, match_opcode, INSN_DREF },
> +{"vlsseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E8V, MASK_VLSSEG2E8V, match_opcode, INSN_DREF },
> +{"vlsseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E16V, MASK_VLSSEG2E16V, match_opcode, INSN_DREF },
> +{"vlsseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E32V, MASK_VLSSEG2E32V, match_opcode, INSN_DREF },
> +{"vlsseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2E64V, MASK_VLSSEG2E64V, match_opcode, INSN_DREF },
> +{"vssseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E8V, MASK_VSSSEG2E8V, match_opcode, INSN_DREF },
> +{"vssseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E16V, MASK_VSSSEG2E16V, match_opcode, INSN_DREF },
> +{"vssseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E32V, MASK_VSSSEG2E32V, match_opcode, INSN_DREF },
> +{"vssseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG2E64V, MASK_VSSSEG2E64V, match_opcode, INSN_DREF },
> +
> +{"vlsseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3BV, MASK_VLSSEG3BV, match_opcode, INSN_DREF },
> +{"vlsseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3HV, MASK_VLSSEG3HV, match_opcode, INSN_DREF },
> +{"vlsseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3WV, MASK_VLSSEG3WV, match_opcode, INSN_DREF },
> +{"vlsseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E8V, MASK_VLSSEG3E8V, match_opcode, INSN_DREF },
> +{"vlsseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E16V, MASK_VLSSEG3E16V, match_opcode, INSN_DREF },
> +{"vlsseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E32V, MASK_VLSSEG3E32V, match_opcode, INSN_DREF },
> +{"vlsseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3E64V, MASK_VLSSEG3E64V, match_opcode, INSN_DREF },
> +{"vssseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E8V, MASK_VSSSEG3E8V, match_opcode, INSN_DREF },
> +{"vssseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E16V, MASK_VSSSEG3E16V, match_opcode, INSN_DREF },
> +{"vssseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E32V, MASK_VSSSEG3E32V, match_opcode, INSN_DREF },
> +{"vssseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG3E64V, MASK_VSSSEG3E64V, match_opcode, INSN_DREF },
> +
> +{"vlsseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4BV, MASK_VLSSEG4BV, match_opcode, INSN_DREF },
> +{"vlsseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4HV, MASK_VLSSEG4HV, match_opcode, INSN_DREF },
> +{"vlsseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4WV, MASK_VLSSEG4WV, match_opcode, INSN_DREF },
> +{"vlsseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E8V, MASK_VLSSEG4E8V, match_opcode, INSN_DREF },
> +{"vlsseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E16V, MASK_VLSSEG4E16V, match_opcode, INSN_DREF },
> +{"vlsseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E32V, MASK_VLSSEG4E32V, match_opcode, INSN_DREF },
> +{"vlsseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4E64V, MASK_VLSSEG4E64V, match_opcode, INSN_DREF },
> +{"vssseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E8V, MASK_VSSSEG4E8V, match_opcode, INSN_DREF },
> +{"vssseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E16V, MASK_VSSSEG4E16V, match_opcode, INSN_DREF },
> +{"vssseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E32V, MASK_VSSSEG4E32V, match_opcode, INSN_DREF },
> +{"vssseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG4E64V, MASK_VSSSEG4E64V, match_opcode, INSN_DREF },
> +
> +{"vlsseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5BV, MASK_VLSSEG5BV, match_opcode, INSN_DREF },
> +{"vlsseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5HV, MASK_VLSSEG5HV, match_opcode, INSN_DREF },
> +{"vlsseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5WV, MASK_VLSSEG5WV, match_opcode, INSN_DREF },
> +{"vlsseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E8V, MASK_VLSSEG5E8V, match_opcode, INSN_DREF },
> +{"vlsseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E16V, MASK_VLSSEG5E16V, match_opcode, INSN_DREF },
> +{"vlsseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E32V, MASK_VLSSEG5E32V, match_opcode, INSN_DREF },
> +{"vlsseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5E64V, MASK_VLSSEG5E64V, match_opcode, INSN_DREF },
> +{"vssseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E8V, MASK_VSSSEG5E8V, match_opcode, INSN_DREF },
> +{"vssseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E16V, MASK_VSSSEG5E16V, match_opcode, INSN_DREF },
> +{"vssseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E32V, MASK_VSSSEG5E32V, match_opcode, INSN_DREF },
> +{"vssseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG5E64V, MASK_VSSSEG5E64V, match_opcode, INSN_DREF },
> +
> +{"vlsseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6BV, MASK_VLSSEG6BV, match_opcode, INSN_DREF },
> +{"vlsseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6HV, MASK_VLSSEG6HV, match_opcode, INSN_DREF },
> +{"vlsseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6WV, MASK_VLSSEG6WV, match_opcode, INSN_DREF },
> +{"vlsseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E8V, MASK_VLSSEG6E8V, match_opcode, INSN_DREF },
> +{"vlsseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E16V, MASK_VLSSEG6E16V, match_opcode, INSN_DREF },
> +{"vlsseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E32V, MASK_VLSSEG6E32V, match_opcode, INSN_DREF },
> +{"vlsseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6E64V, MASK_VLSSEG6E64V, match_opcode, INSN_DREF },
> +{"vssseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E8V, MASK_VSSSEG6E8V, match_opcode, INSN_DREF },
> +{"vssseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E16V, MASK_VSSSEG6E16V, match_opcode, INSN_DREF },
> +{"vssseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E32V, MASK_VSSSEG6E32V, match_opcode, INSN_DREF },
> +{"vssseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG6E64V, MASK_VSSSEG6E64V, match_opcode, INSN_DREF },
> +
> +{"vlsseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7BV, MASK_VLSSEG7BV, match_opcode, INSN_DREF },
> +{"vlsseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7HV, MASK_VLSSEG7HV, match_opcode, INSN_DREF },
> +{"vlsseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7WV, MASK_VLSSEG7WV, match_opcode, INSN_DREF },
> +{"vlsseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E8V, MASK_VLSSEG7E8V, match_opcode, INSN_DREF },
> +{"vlsseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E16V, MASK_VLSSEG7E16V, match_opcode, INSN_DREF },
> +{"vlsseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E32V, MASK_VLSSEG7E32V, match_opcode, INSN_DREF },
> +{"vlsseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7E64V, MASK_VLSSEG7E64V, match_opcode, INSN_DREF },
> +{"vssseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E8V, MASK_VSSSEG7E8V, match_opcode, INSN_DREF },
> +{"vssseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E16V, MASK_VSSSEG7E16V, match_opcode, INSN_DREF },
> +{"vssseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E32V, MASK_VSSSEG7E32V, match_opcode, INSN_DREF },
> +{"vssseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG7E64V, MASK_VSSSEG7E64V, match_opcode, INSN_DREF },
> +
> +{"vlsseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8BV, MASK_VLSSEG8BV, match_opcode, INSN_DREF },
> +{"vlsseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8HV, MASK_VLSSEG8HV, match_opcode, INSN_DREF },
> +{"vlsseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8WV, MASK_VLSSEG8WV, match_opcode, INSN_DREF },
> +{"vlsseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E8V, MASK_VLSSEG8E8V, match_opcode, INSN_DREF },
> +{"vlsseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E16V, MASK_VLSSEG8E16V, match_opcode, INSN_DREF },
> +{"vlsseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E32V, MASK_VLSSEG8E32V, match_opcode, INSN_DREF },
> +{"vlsseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8E64V, MASK_VLSSEG8E64V, match_opcode, INSN_DREF },
> +{"vssseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E8V, MASK_VSSSEG8E8V, match_opcode, INSN_DREF },
> +{"vssseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E16V, MASK_VSSSEG8E16V, match_opcode, INSN_DREF },
> +{"vssseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E32V, MASK_VSSSEG8E32V, match_opcode, INSN_DREF },
> +{"vssseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSSEG8E64V, MASK_VSSSEG8E64V, match_opcode, INSN_DREF },
> +
> +{"vlxseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG2BV, MASK_VLXSEG2BV, match_opcode, INSN_DREF },
> +{"vlxseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG2HV, MASK_VLXSEG2HV, match_opcode, INSN_DREF },
> +{"vlxseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG2WV, MASK_VLXSEG2WV, match_opcode, INSN_DREF },
> +{"vlxseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI8V, MASK_VLOXSEG2EI8V, match_opcode, INSN_DREF },
> +{"vlxseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI16V, MASK_VLOXSEG2EI16V, match_opcode, INSN_DREF },
> +{"vlxseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI32V, MASK_VLOXSEG2EI32V, match_opcode, INSN_DREF },
> +{"vlxseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG2EI64V, MASK_VLOXSEG2EI64V, match_opcode, INSN_DREF },
> +{"vsxseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI8V, MASK_VSOXSEG2EI8V, match_opcode, INSN_DREF },
> +{"vsxseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI16V, MASK_VSOXSEG2EI16V, match_opcode, INSN_DREF },
> +{"vsxseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI32V, MASK_VSOXSEG2EI32V, match_opcode, INSN_DREF },
> +{"vsxseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG2EI64V, MASK_VSOXSEG2EI64V, match_opcode, INSN_DREF },
> +
> +{"vlxseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG3BV, MASK_VLXSEG3BV, match_opcode, INSN_DREF },
> +{"vlxseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG3HV, MASK_VLXSEG3HV, match_opcode, INSN_DREF },
> +{"vlxseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG3WV, MASK_VLXSEG3WV, match_opcode, INSN_DREF },
> +{"vlxseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI8V, MASK_VLOXSEG3EI8V, match_opcode, INSN_DREF },
> +{"vlxseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI16V, MASK_VLOXSEG3EI16V, match_opcode, INSN_DREF },
> +{"vlxseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI32V, MASK_VLOXSEG3EI32V, match_opcode, INSN_DREF },
> +{"vlxseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG3EI64V, MASK_VLOXSEG3EI64V, match_opcode, INSN_DREF },
> +{"vsxseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI8V, MASK_VSOXSEG3EI8V, match_opcode, INSN_DREF },
> +{"vsxseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI16V, MASK_VSOXSEG3EI16V, match_opcode, INSN_DREF },
> +{"vsxseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI32V, MASK_VSOXSEG3EI32V, match_opcode, INSN_DREF },
> +{"vsxseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG3EI64V, MASK_VSOXSEG3EI64V, match_opcode, INSN_DREF },
> +
> +{"vlxseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG4BV, MASK_VLXSEG4BV, match_opcode, INSN_DREF },
> +{"vlxseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG4HV, MASK_VLXSEG4HV, match_opcode, INSN_DREF },
> +{"vlxseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG4WV, MASK_VLXSEG4WV, match_opcode, INSN_DREF },
> +{"vlxseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI8V, MASK_VLOXSEG4EI8V, match_opcode, INSN_DREF },
> +{"vlxseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI16V, MASK_VLOXSEG4EI16V, match_opcode, INSN_DREF },
> +{"vlxseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI32V, MASK_VLOXSEG4EI32V, match_opcode, INSN_DREF },
> +{"vlxseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG4EI64V, MASK_VLOXSEG4EI64V, match_opcode, INSN_DREF },
> +{"vsxseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI8V, MASK_VSOXSEG4EI8V, match_opcode, INSN_DREF },
> +{"vsxseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI16V, MASK_VSOXSEG4EI16V, match_opcode, INSN_DREF },
> +{"vsxseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI32V, MASK_VSOXSEG4EI32V, match_opcode, INSN_DREF },
> +{"vsxseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG4EI64V, MASK_VSOXSEG4EI64V, match_opcode, INSN_DREF },
> +
> +{"vlxseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG5BV, MASK_VLXSEG5BV, match_opcode, INSN_DREF },
> +{"vlxseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG5HV, MASK_VLXSEG5HV, match_opcode, INSN_DREF },
> +{"vlxseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG5WV, MASK_VLXSEG5WV, match_opcode, INSN_DREF },
> +{"vlxseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI8V, MASK_VLOXSEG5EI8V, match_opcode, INSN_DREF },
> +{"vlxseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI16V, MASK_VLOXSEG5EI16V, match_opcode, INSN_DREF },
> +{"vlxseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI32V, MASK_VLOXSEG5EI32V, match_opcode, INSN_DREF },
> +{"vlxseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG5EI64V, MASK_VLOXSEG5EI64V, match_opcode, INSN_DREF },
> +{"vsxseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI8V, MASK_VSOXSEG5EI8V, match_opcode, INSN_DREF },
> +{"vsxseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI16V, MASK_VSOXSEG5EI16V, match_opcode, INSN_DREF },
> +{"vsxseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI32V, MASK_VSOXSEG5EI32V, match_opcode, INSN_DREF },
> +{"vsxseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG5EI64V, MASK_VSOXSEG5EI64V, match_opcode, INSN_DREF },
> +
> +{"vlxseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG6BV, MASK_VLXSEG6BV, match_opcode, INSN_DREF },
> +{"vlxseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG6HV, MASK_VLXSEG6HV, match_opcode, INSN_DREF },
> +{"vlxseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG6WV, MASK_VLXSEG6WV, match_opcode, INSN_DREF },
> +{"vlxseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI8V, MASK_VLOXSEG6EI8V, match_opcode, INSN_DREF },
> +{"vlxseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI16V, MASK_VLOXSEG6EI16V, match_opcode, INSN_DREF },
> +{"vlxseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI32V, MASK_VLOXSEG6EI32V, match_opcode, INSN_DREF },
> +{"vlxseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG6EI64V, MASK_VLOXSEG6EI64V, match_opcode, INSN_DREF },
> +{"vsxseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI8V, MASK_VSOXSEG6EI8V, match_opcode, INSN_DREF },
> +{"vsxseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI16V, MASK_VSOXSEG6EI16V, match_opcode, INSN_DREF },
> +{"vsxseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI32V, MASK_VSOXSEG6EI32V, match_opcode, INSN_DREF },
> +{"vsxseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG6EI64V, MASK_VSOXSEG6EI64V, match_opcode, INSN_DREF },
> +
> +{"vlxseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG7BV, MASK_VLXSEG7BV, match_opcode, INSN_DREF },
> +{"vlxseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG7HV, MASK_VLXSEG7HV, match_opcode, INSN_DREF },
> +{"vlxseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG7WV, MASK_VLXSEG7WV, match_opcode, INSN_DREF },
> +{"vlxseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI8V, MASK_VLOXSEG7EI8V, match_opcode, INSN_DREF },
> +{"vlxseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI16V, MASK_VLOXSEG7EI16V, match_opcode, INSN_DREF },
> +{"vlxseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI32V, MASK_VLOXSEG7EI32V, match_opcode, INSN_DREF },
> +{"vlxseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG7EI64V, MASK_VLOXSEG7EI64V, match_opcode, INSN_DREF },
> +{"vsxseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI8V, MASK_VSOXSEG7EI8V, match_opcode, INSN_DREF },
> +{"vsxseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI16V, MASK_VSOXSEG7EI16V, match_opcode, INSN_DREF },
> +{"vsxseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI32V, MASK_VSOXSEG7EI32V, match_opcode, INSN_DREF },
> +{"vsxseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG7EI64V, MASK_VSOXSEG7EI64V, match_opcode, INSN_DREF },
> +
> +{"vlxseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG8BV, MASK_VLXSEG8BV, match_opcode, INSN_DREF },
> +{"vlxseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG8HV, MASK_VLXSEG8HV, match_opcode, INSN_DREF },
> +{"vlxseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXSEG8WV, MASK_VLXSEG8WV, match_opcode, INSN_DREF },
> +{"vlxseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI8V, MASK_VLOXSEG8EI8V, match_opcode, INSN_DREF },
> +{"vlxseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI16V, MASK_VLOXSEG8EI16V, match_opcode, INSN_DREF },
> +{"vlxseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI32V, MASK_VLOXSEG8EI32V, match_opcode, INSN_DREF },
> +{"vlxseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXSEG8EI64V, MASK_VLOXSEG8EI64V, match_opcode, INSN_DREF },
> +{"vsxseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI8V, MASK_VSOXSEG8EI8V, match_opcode, INSN_DREF },
> +{"vsxseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI16V, MASK_VSOXSEG8EI16V, match_opcode, INSN_DREF },
> +{"vsxseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI32V, MASK_VSOXSEG8EI32V, match_opcode, INSN_DREF },
> +{"vsxseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXSEG8EI64V, MASK_VSOXSEG8EI64V, match_opcode, INSN_DREF },
> +
> +{"vlseg2bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2BFFV, MASK_VLSEG2BFFV, match_opcode, INSN_DREF },
> +{"vlseg2hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2HFFV, MASK_VLSEG2HFFV, match_opcode, INSN_DREF },
> +{"vlseg2wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2WFFV, MASK_VLSEG2WFFV, match_opcode, INSN_DREF },
> +{"vlseg2buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E8FFV, MASK_VLSEG2E8FFV, match_opcode, INSN_DREF },
> +{"vlseg2huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E16FFV, MASK_VLSEG2E16FFV, match_opcode, INSN_DREF },
> +{"vlseg2wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E32FFV, MASK_VLSEG2E32FFV, match_opcode, INSN_DREF },
> +{"vlseg2eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E64FFV, MASK_VLSEG2E64FFV, match_opcode, INSN_DREF },
> +
> +{"vlseg3bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3BFFV, MASK_VLSEG3BFFV, match_opcode, INSN_DREF },
> +{"vlseg3hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3HFFV, MASK_VLSEG3HFFV, match_opcode, INSN_DREF },
> +{"vlseg3wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3WFFV, MASK_VLSEG3WFFV, match_opcode, INSN_DREF },
> +{"vlseg3buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E8FFV, MASK_VLSEG3E8FFV, match_opcode, INSN_DREF },
> +{"vlseg3huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E16FFV, MASK_VLSEG3E16FFV, match_opcode, INSN_DREF },
> +{"vlseg3wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32FFV, MASK_VLSEG3E32FFV, match_opcode, INSN_DREF },
> +{"vlseg3eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E64FFV, MASK_VLSEG3E64FFV, match_opcode, INSN_DREF },
> +
> +{"vlseg4bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4BFFV, MASK_VLSEG4BFFV, match_opcode, INSN_DREF },
> +{"vlseg4hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4HFFV, MASK_VLSEG4HFFV, match_opcode, INSN_DREF },
> +{"vlseg4wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4WFFV, MASK_VLSEG4WFFV, match_opcode, INSN_DREF },
> +{"vlseg4buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E8FFV, MASK_VLSEG4E8FFV, match_opcode, INSN_DREF },
> +{"vlseg4huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E16FFV, MASK_VLSEG4E16FFV, match_opcode, INSN_DREF },
> +{"vlseg4wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E32FFV, MASK_VLSEG4E32FFV, match_opcode, INSN_DREF },
> +{"vlseg4eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E64FFV, MASK_VLSEG4E64FFV, match_opcode, INSN_DREF },
> +
> +{"vlseg5bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5BFFV, MASK_VLSEG5BFFV, match_opcode, INSN_DREF },
> +{"vlseg5hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5HFFV, MASK_VLSEG5HFFV, match_opcode, INSN_DREF },
> +{"vlseg5wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5WFFV, MASK_VLSEG5WFFV, match_opcode, INSN_DREF },
> +{"vlseg5buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E8FFV, MASK_VLSEG5E8FFV, match_opcode, INSN_DREF },
> +{"vlseg5huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E16FFV, MASK_VLSEG5E16FFV, match_opcode, INSN_DREF },
> +{"vlseg5wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E32FFV, MASK_VLSEG5E32FFV, match_opcode, INSN_DREF },
> +{"vlseg5eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E64FFV, MASK_VLSEG5E64FFV, match_opcode, INSN_DREF },
> +
> +{"vlseg6bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6BFFV, MASK_VLSEG6BFFV, match_opcode, INSN_DREF },
> +{"vlseg6hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6HFFV, MASK_VLSEG6HFFV, match_opcode, INSN_DREF },
> +{"vlseg6wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6WFFV, MASK_VLSEG6WFFV, match_opcode, INSN_DREF },
> +{"vlseg6buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E8FFV, MASK_VLSEG6E8FFV, match_opcode, INSN_DREF },
> +{"vlseg6huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E16FFV, MASK_VLSEG6E16FFV, match_opcode, INSN_DREF },
> +{"vlseg6wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E32FFV, MASK_VLSEG6E32FFV, match_opcode, INSN_DREF },
> +{"vlseg6eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E64FFV, MASK_VLSEG6E64FFV, match_opcode, INSN_DREF },
> +
> +{"vlseg7bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7BFFV, MASK_VLSEG7BFFV, match_opcode, INSN_DREF },
> +{"vlseg7hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7HFFV, MASK_VLSEG7HFFV, match_opcode, INSN_DREF },
> +{"vlseg7wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7WFFV, MASK_VLSEG7WFFV, match_opcode, INSN_DREF },
> +{"vlseg7buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E8FFV, MASK_VLSEG7E8FFV, match_opcode, INSN_DREF },
> +{"vlseg7huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E16FFV, MASK_VLSEG7E16FFV, match_opcode, INSN_DREF },
> +{"vlseg7wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E32FFV, MASK_VLSEG7E32FFV, match_opcode, INSN_DREF },
> +{"vlseg7eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E64FFV, MASK_VLSEG7E64FFV, match_opcode, INSN_DREF },
> +
> +{"vlseg8bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8BFFV, MASK_VLSEG8BFFV, match_opcode, INSN_DREF },
> +{"vlseg8hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8HFFV, MASK_VLSEG8HFFV, match_opcode, INSN_DREF },
> +{"vlseg8wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8WFFV, MASK_VLSEG8WFFV, match_opcode, INSN_DREF },
> +{"vlseg8buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E8FFV, MASK_VLSEG8E8FFV, match_opcode, INSN_DREF },
> +{"vlseg8huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E16FFV, MASK_VLSEG8E16FFV, match_opcode, INSN_DREF },
> +{"vlseg8wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E32FFV, MASK_VLSEG8E32FFV, match_opcode, INSN_DREF },
> +{"vlseg8eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E64FFV, MASK_VLSEG8E64FFV, match_opcode, INSN_DREF },
> +
> +{"vnsrl.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNSRLVV, MASK_VNSRLVV, match_opcode, 0 },
> +{"vnsrl.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNSRLVX, MASK_VNSRLVX, match_opcode, 0 },
> +{"vnsrl.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNSRLVI, MASK_VNSRLVI, match_opcode, 0 },
> +{"vnsra.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNSRAVV, MASK_VNSRAVV, match_opcode, 0 },
> +{"vnsra.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNSRAVX, MASK_VNSRAVX, match_opcode, 0 },
> +{"vnsra.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNSRAVI, MASK_VNSRAVI, match_opcode, 0 },
> +
> +{"vwsmaccu.vv", 0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCUVV, MASK_VWSMACCUVV, match_opcode, 0 },
> +{"vwsmaccu.vx", 0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCUVX, MASK_VWSMACCUVX, match_opcode, 0 },
> +{"vwsmacc.vv",  0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCVV, MASK_VWSMACCVV, match_opcode, 0 },
> +{"vwsmacc.vx",  0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCVX, MASK_VWSMACCVX, match_opcode, 0 },
> +{"vwsmaccsu.vv",0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCSUVV, MASK_VWSMACCSUVV, match_opcode, 0 },
> +{"vwsmaccsu.vx",0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCSUVX, MASK_VWSMACCSUVX, match_opcode, 0 },
> +{"vwsmaccus.vx",0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCUSVX, MASK_VWSMACCUSVX, match_opcode, 0 },
> +
> +{"vnclipu.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNCLIPUVV, MASK_VNCLIPUVV, match_opcode, 0 },
> +{"vnclipu.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNCLIPUVX, MASK_VNCLIPUVX, match_opcode, 0 },
> +{"vnclipu.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNCLIPUVI, MASK_VNCLIPUVI, match_opcode, 0 },
> +{"vnclip.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNCLIPVV, MASK_VNCLIPVV, match_opcode, 0 },
> +{"vnclip.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNCLIPVX, MASK_VNCLIPVX, match_opcode, 0 },
> +{"vnclip.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNCLIPVI, MASK_VNCLIPVI, match_opcode, 0 },
> +
> +{"vmford.vv",  0, INSN_CLASS_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFORDVV, MASK_VMFORDVV, match_opcode, 0},
> +{"vmford.vf",  0, INSN_CLASS_XTHEADV, "Vd,Vt,SVm", MATCH_VMFORDVF, MASK_VMFORDVF, match_opcode, 0},
> +
> +{"vfncvt.xu.f.v",0,INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTXUFV, MASK_VFNCVTXUFV, match_opcode, 0},
> +{"vfncvt.x.f.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTXFV, MASK_VFNCVTXFV, match_opcode, 0},
> +{"vfncvt.f.xu.v",0,INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFXUV, MASK_VFNCVTFXUV, match_opcode, 0},
> +{"vfncvt.f.x.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFXV, MASK_VFNCVTFXV, match_opcode, 0},
> +{"vfncvt.f.f.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFFV, MASK_VFNCVTFFV, match_opcode, 0},
> +
> +{"vmpopc.m",   0, INSN_CLASS_XTHEADV, "d,VtVm", MATCH_VMPOPCM, MASK_VMPOPCM, match_opcode, 0 },
> +{"vmfirst.m",  0, INSN_CLASS_XTHEADV, "d,VtVm", MATCH_VMFIRSTM, MASK_VMFIRSTM, match_opcode, 0},
> +
> +{"vext.x.v",   0, INSN_CLASS_XTHEADV, "d,Vt,s", MATCH_VEXTXV, MASK_VEXTXV, match_opcode, 0},
> +
> +{"vdot.vv",    0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDOTVV, MASK_VDOTVV, match_opcode, 0},
> +{"vdotu.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDOTUVV, MASK_VDOTUVV, match_opcode, 0},
> +{"vfdot.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VFDOTVV, MASK_VFDOTVV, match_opcode, 0},
> +
> +/* Zvamo instructions.  */
> +{"vamoaddw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOADDWV, MASK_VAMOADDWV, match_opcode, INSN_DREF},
> +{"vamoaddd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOADDDV, MASK_VAMOADDDV, match_opcode, INSN_DREF},
> +{"vamoswapw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOSWAPWV, MASK_VAMOSWAPWV, match_opcode, INSN_DREF},
> +{"vamoswapd.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOSWAPDV, MASK_VAMOSWAPDV, match_opcode, INSN_DREF},
> +
> +{"vamoxorw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOXORWV, MASK_VAMOXORWV, match_opcode, INSN_DREF},
> +{"vamoxord.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOXORDV, MASK_VAMOXORDV, match_opcode, INSN_DREF},
> +{"vamoandw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOANDWV, MASK_VAMOANDWV, match_opcode, INSN_DREF},
> +{"vamoandd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOANDDV, MASK_VAMOANDDV, match_opcode, INSN_DREF},
> +{"vamoorw.v",    0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOORWV, MASK_VAMOORWV, match_opcode, INSN_DREF},
> +{"vamoord.v",    0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOORDV, MASK_VAMOORDV, match_opcode, INSN_DREF},
> +
> +{"vamominw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINWV, MASK_VAMOMINWV, match_opcode, INSN_DREF},
> +{"vamomind.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINDV, MASK_VAMOMINDV, match_opcode, INSN_DREF},
> +{"vamomaxw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXWV, MASK_VAMOMAXWV, match_opcode, INSN_DREF},
> +{"vamomaxd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXDV, MASK_VAMOMAXDV, match_opcode, INSN_DREF},
> +{"vamominuw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINUWV, MASK_VAMOMINUWV, match_opcode, INSN_DREF},
> +{"vamominud.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMINUDV, MASK_VAMOMINUDV, match_opcode, INSN_DREF},
> +{"vamomaxuw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXUWV, MASK_VAMOMAXUWV, match_opcode, INSN_DREF},
> +{"vamomaxud.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm", MATCH_VAMOMAXUDV, MASK_VAMOMAXUDV, match_opcode, INSN_DREF},
>
>  /* Supervisor instructions.  */
>  {"csrr",       0, INSN_CLASS_ZICSR, "d,E",   MATCH_CSRRS, MASK_CSRRS|MASK_RS1, match_opcode, INSN_ALIAS },
> --
> 2.42.0
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] add opcode for xtheadv
  2023-11-09 10:18 ` Christoph Müllner
@ 2023-11-09 10:40   ` Yixuan Chen
  0 siblings, 0 replies; 4+ messages in thread
From: Yixuan Chen @ 2023-11-09 10:40 UTC (permalink / raw)
  To: Christoph Müllner
  Cc: chenyixuan, binutils, kito.cheng, shiyulong, shihua, jiawei

[-- Attachment #1: Type: text/plain, Size: 157381 bytes --]

Hi Christoph,

Thanks very much for information!

Hi Jan,

Thanks for reminding me of the testcases, but now I should withdraw the
patch because I add the opcode with rvv 0.7.1 specification. I will add
patch with testcase the next time.

Best Regards
Yixuan Chen

Christoph Müllner <christoph.muellner@vrull.eu> 于2023年11月9日周四 18:18写道:

> On Wed, Nov 8, 2023 at 2:28 PM <chenyixuan@iscas.ac.cn> wrote:
> >
> > From: XYenChi <oriachiuan@gmail.com>
> >
> > Add xtheadv opcode and minimal support.
>
> Hi Yi Xuan,
>
> [copied text from a patch that went to the GCC mailing list:
> https://gcc.gnu.org/pipermail/gcc-patches/2023-November/635766.html]
>
> I was not aware that CAS is working on getting T-Head's Vector
> extension supported.
> My biggest concern with this patch is that "XTheadV" does not have a
> specification.
>
> T-Head and VRULL are currently working on support patches for T-Head's
> Vector extension
> implementation. We've named the extension XTheadVector.
> Supporting XTheadVector means to address a range of issues (e.g.
> defining a formal ISA
> vendor extension specification, extension discovery, addressing
> implementation details,
> differences among available cores, intrinsics, ...).
> We've already made good progress on that and expect to publish first
> results soon.
>
> BR
> Christoph
>
> >
> > bfd/ChangeLog:
> >
> > 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> >
> >         * elfxx-riscv.c (riscv_parse_check_conflicts):Add xtheadv.
> >         (riscv_multi_subset_supports):Add xtheadv.
> >         (riscv_multi_subset_supports_ext):Add xtheadv.
> >
> > gas/ChangeLog:
> >
> > 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> >
> >         * config/tc-riscv.c (my_getVsetvliExpression):Add xtheadv
> special vetvl with vediv.
> >
> > include/ChangeLog:
> >
> > 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> >
> >         * opcode/riscv-opc.h (MATCH_VLBV): xtheadv opcodes.
> >         (MASK_VLBV):
> >         (MATCH_VLHV):
> >         (MASK_VLHV):
> >         (MATCH_VLWV):
> >         (MASK_VLWV):
> >         (MATCH_VLSBV):
> >         (MASK_VLSBV):
> >         (MATCH_VLSHV):
> >         (MASK_VLSHV):
> >         (MATCH_VLSWV):
> >         (MASK_VLSWV):
> >         (MATCH_VLXBV):
> >         (MASK_VLXBV):
> >         (MATCH_VLXHV):
> >         (MASK_VLXHV):
> >         (MATCH_VLXWV):
> >         (MASK_VLXWV):
> >         (MATCH_VSUXBV):
> >         (MASK_VSUXBV):
> >         (MATCH_VSUXHV):
> >         (MASK_VSUXHV):
> >         (MATCH_VSUXWV):
> >         (MASK_VSUXWV):
> >         (MATCH_VSUXEV):
> >         (MASK_VSUXEV):
> >         (MATCH_VLBFFV):
> >         (MASK_VLBFFV):
> >         (MATCH_VLHFFV):
> >         (MASK_VLHFFV):
> >         (MATCH_VLWFFV):
> >         (MASK_VLWFFV):
> >         (MATCH_VLSEG2BV):
> >         (MASK_VLSEG2BV):
> >         (MATCH_VLSEG2HV):
> >         (MASK_VLSEG2HV):
> >         (MATCH_VLSEG2WV):
> >         (MASK_VLSEG2WV):
> >         (MATCH_VLSEG3BV):
> >         (MASK_VLSEG3BV):
> >         (MATCH_VLSEG3HV):
> >         (MASK_VLSEG3HV):
> >         (MATCH_VLSEG3WV):
> >         (MASK_VLSEG3WV):
> >         (MATCH_VLSEG4BV):
> >         (MASK_VLSEG4BV):
> >         (MATCH_VLSEG4HV):
> >         (MASK_VLSEG4HV):
> >         (MATCH_VLSEG4WV):
> >         (MASK_VLSEG4WV):
> >         (MATCH_VLSEG5BV):
> >         (MASK_VLSEG5BV):
> >         (MATCH_VLSEG5HV):
> >         (MASK_VLSEG5HV):
> >         (MATCH_VLSEG5WV):
> >         (MASK_VLSEG5WV):
> >         (MATCH_VLSEG6BV):
> >         (MASK_VLSEG6BV):
> >         (MATCH_VLSEG6HV):
> >         (MASK_VLSEG6HV):
> >         (MATCH_VLSEG6WV):
> >         (MASK_VLSEG6WV):
> >         (MATCH_VLSEG7BV):
> >         (MASK_VLSEG7BV):
> >         (MATCH_VLSEG7HV):
> >         (MASK_VLSEG7HV):
> >         (MATCH_VLSEG7WV):
> >         (MASK_VLSEG7WV):
> >         (MATCH_VLSEG8BV):
> >         (MASK_VLSEG8BV):
> >         (MATCH_VLSEG8HV):
> >         (MASK_VLSEG8HV):
> >         (MATCH_VLSEG8WV):
> >         (MASK_VLSEG8WV):
> >         (MATCH_VLSSEG2BV):
> >         (MASK_VLSSEG2BV):
> >         (MATCH_VLSSEG2HV):
> >         (MASK_VLSSEG2HV):
> >         (MATCH_VLSSEG2WV):
> >         (MASK_VLSSEG2WV):
> >         (MATCH_VLSSEG3BV):
> >         (MASK_VLSSEG3BV):
> >         (MATCH_VLSSEG3HV):
> >         (MASK_VLSSEG3HV):
> >         (MATCH_VLSSEG3WV):
> >         (MASK_VLSSEG3WV):
> >         (MATCH_VLSSEG4BV):
> >         (MASK_VLSSEG4BV):
> >         (MATCH_VLSSEG4HV):
> >         (MASK_VLSSEG4HV):
> >         (MATCH_VLSSEG4WV):
> >         (MASK_VLSSEG4WV):
> >         (MATCH_VLSSEG5BV):
> >         (MASK_VLSSEG5BV):
> >         (MATCH_VLSSEG5HV):
> >         (MASK_VLSSEG5HV):
> >         (MATCH_VLSSEG5WV):
> >         (MASK_VLSSEG5WV):
> >         (MATCH_VLSSEG6BV):
> >         (MASK_VLSSEG6BV):
> >         (MATCH_VLSSEG6HV):
> >         (MASK_VLSSEG6HV):
> >         (MATCH_VLSSEG6WV):
> >         (MASK_VLSSEG6WV):
> >         (MATCH_VLSSEG7BV):
> >         (MASK_VLSSEG7BV):
> >         (MATCH_VLSSEG7HV):
> >         (MASK_VLSSEG7HV):
> >         (MATCH_VLSSEG7WV):
> >         (MASK_VLSSEG7WV):
> >         (MATCH_VLSSEG8BV):
> >         (MASK_VLSSEG8BV):
> >         (MATCH_VLSSEG8HV):
> >         (MASK_VLSSEG8HV):
> >         (MATCH_VLSSEG8WV):
> >         (MASK_VLSSEG8WV):
> >         (MATCH_VLXSEG2BV):
> >         (MASK_VLXSEG2BV):
> >         (MATCH_VLXSEG2HV):
> >         (MASK_VLXSEG2HV):
> >         (MATCH_VLXSEG2WV):
> >         (MASK_VLXSEG2WV):
> >         (MATCH_VLXSEG3BV):
> >         (MASK_VLXSEG3BV):
> >         (MATCH_VLXSEG3HV):
> >         (MASK_VLXSEG3HV):
> >         (MATCH_VLXSEG3WV):
> >         (MASK_VLXSEG3WV):
> >         (MATCH_VLXSEG4BV):
> >         (MASK_VLXSEG4BV):
> >         (MATCH_VLXSEG4HV):
> >         (MASK_VLXSEG4HV):
> >         (MATCH_VLXSEG4WV):
> >         (MASK_VLXSEG4WV):
> >         (MATCH_VLXSEG5BV):
> >         (MASK_VLXSEG5BV):
> >         (MATCH_VLXSEG5HV):
> >         (MASK_VLXSEG5HV):
> >         (MATCH_VLXSEG5WV):
> >         (MASK_VLXSEG5WV):
> >         (MATCH_VLXSEG6BV):
> >         (MASK_VLXSEG6BV):
> >         (MATCH_VLXSEG6HV):
> >         (MASK_VLXSEG6HV):
> >         (MATCH_VLXSEG6WV):
> >         (MASK_VLXSEG6WV):
> >         (MATCH_VLXSEG7BV):
> >         (MASK_VLXSEG7BV):
> >         (MATCH_VLXSEG7HV):
> >         (MASK_VLXSEG7HV):
> >         (MATCH_VLXSEG7WV):
> >         (MASK_VLXSEG7WV):
> >         (MATCH_VLXSEG8BV):
> >         (MASK_VLXSEG8BV):
> >         (MATCH_VLXSEG8HV):
> >         (MASK_VLXSEG8HV):
> >         (MATCH_VLXSEG8WV):
> >         (MASK_VLXSEG8WV):
> >         (MATCH_VLSEG2BFFV):
> >         (MASK_VLSEG2BFFV):
> >         (MATCH_VLSEG2HFFV):
> >         (MASK_VLSEG2HFFV):
> >         (MATCH_VLSEG2WFFV):
> >         (MASK_VLSEG2WFFV):
> >         (MATCH_VLSEG3BFFV):
> >         (MASK_VLSEG3BFFV):
> >         (MATCH_VLSEG3HFFV):
> >         (MASK_VLSEG3HFFV):
> >         (MATCH_VLSEG3WFFV):
> >         (MASK_VLSEG3WFFV):
> >         (MATCH_VLSEG4BFFV):
> >         (MASK_VLSEG4BFFV):
> >         (MATCH_VLSEG4HFFV):
> >         (MASK_VLSEG4HFFV):
> >         (MATCH_VLSEG4WFFV):
> >         (MASK_VLSEG4WFFV):
> >         (MATCH_VLSEG5BFFV):
> >         (MASK_VLSEG5BFFV):
> >         (MATCH_VLSEG5HFFV):
> >         (MASK_VLSEG5HFFV):
> >         (MATCH_VLSEG5WFFV):
> >         (MASK_VLSEG5WFFV):
> >         (MATCH_VLSEG6BFFV):
> >         (MASK_VLSEG6BFFV):
> >         (MATCH_VLSEG6HFFV):
> >         (MASK_VLSEG6HFFV):
> >         (MATCH_VLSEG6WFFV):
> >         (MASK_VLSEG6WFFV):
> >         (MATCH_VLSEG7BFFV):
> >         (MASK_VLSEG7BFFV):
> >         (MATCH_VLSEG7HFFV):
> >         (MASK_VLSEG7HFFV):
> >         (MATCH_VLSEG7WFFV):
> >         (MASK_VLSEG7WFFV):
> >         (MATCH_VLSEG8BFFV):
> >         (MASK_VLSEG8BFFV):
> >         (MATCH_VLSEG8HFFV):
> >         (MASK_VLSEG8HFFV):
> >         (MATCH_VLSEG8WFFV):
> >         (MASK_VLSEG8WFFV):
> >         (MATCH_VNSRLVV):
> >         (MASK_VNSRLVV):
> >         (MATCH_VNSRLVX):
> >         (MASK_VNSRLVX):
> >         (MATCH_VNSRLVI):
> >         (MASK_VNSRLVI):
> >         (MATCH_VNSRAVV):
> >         (MASK_VNSRAVV):
> >         (MATCH_VNSRAVX):
> >         (MASK_VNSRAVX):
> >         (MATCH_VNSRAVI):
> >         (MASK_VNSRAVI):
> >         (MATCH_VWMACCSUVV_ZV):
> >         (MASK_VWMACCSUVV_ZV):
> >         (MATCH_VWMACCSUVX_ZV):
> >         (MASK_VWMACCSUVX_ZV):
> >         (MATCH_VWMACCUSVX_ZV):
> >         (MASK_VWMACCUSVX_ZV):
> >         (MATCH_VAADDVV_ZV):
> >         (MASK_VAADDVV_ZV):
> >         (MATCH_VAADDVX_ZV):
> >         (MASK_VAADDVX_ZV):
> >         (MATCH_VAADDVI):
> >         (MASK_VAADDVI):
> >         (MATCH_VASUBVV_ZV):
> >         (MASK_VASUBVV_ZV):
> >         (MATCH_VASUBVX_ZV):
> >         (MASK_VASUBVX_ZV):
> >         (MATCH_VWSMACCUVV):
> >         (MASK_VWSMACCUVV):
> >         (MATCH_VWSMACCUVX):
> >         (MASK_VWSMACCUVX):
> >         (MATCH_VWSMACCVV):
> >         (MASK_VWSMACCVV):
> >         (MATCH_VWSMACCVX):
> >         (MASK_VWSMACCVX):
> >         (MATCH_VWSMACCSUVV):
> >         (MASK_VWSMACCSUVV):
> >         (MATCH_VWSMACCSUVX):
> >         (MASK_VWSMACCSUVX):
> >         (MATCH_VWSMACCUSVX):
> >         (MASK_VWSMACCUSVX):
> >         (MATCH_VFSQRTV_ZV):
> >         (MASK_VFSQRTV_ZV):
> >         (MATCH_VFCLASSV_ZV):
> >         (MASK_VFCLASSV_ZV):
> >         (MATCH_VFCVTXUFV_ZV):
> >         (MASK_VFCVTXUFV_ZV):
> >         (MATCH_VFCVTXFV_ZV):
> >         (MASK_VFCVTXFV_ZV):
> >         (MATCH_VFCVTFXUV_ZV):
> >         (MASK_VFCVTFXUV_ZV):
> >         (MATCH_VFCVTFXV_ZV):
> >         (MASK_VFCVTFXV_ZV):
> >         (MATCH_VFWCVTXUFV_ZV):
> >         (MASK_VFWCVTXUFV_ZV):
> >         (MATCH_VFWCVTXFV_ZV):
> >         (MASK_VFWCVTXFV_ZV):
> >         (MATCH_VFWCVTFXUV_ZV):
> >         (MASK_VFWCVTFXUV_ZV):
> >         (MATCH_VFWCVTFXV_ZV):
> >         (MASK_VFWCVTFXV_ZV):
> >         (MATCH_VFWCVTFFV_ZV):
> >         (MASK_VFWCVTFFV_ZV):
> >         (MATCH_VNCLIPUVV):
> >         (MASK_VNCLIPUVV):
> >         (MATCH_VNCLIPUVX):
> >         (MASK_VNCLIPUVX):
> >         (MATCH_VNCLIPUVI):
> >         (MASK_VNCLIPUVI):
> >         (MATCH_VNCLIPVV):
> >         (MASK_VNCLIPVV):
> >         (MATCH_VNCLIPVX):
> >         (MASK_VNCLIPVX):
> >         (MATCH_VNCLIPVI):
> >         (MASK_VNCLIPVI):
> >         (MATCH_VMFORDVV):
> >         (MASK_VMFORDVV):
> >         (MATCH_VFNCVTXUFV):
> >         (MASK_VFNCVTXUFV):
> >         (MATCH_VFNCVTXFV):
> >         (MASK_VFNCVTXFV):
> >         (MATCH_VFNCVTFXUV):
> >         (MASK_VFNCVTFXUV):
> >         (MATCH_VFNCVTFXV):
> >         (MASK_VFNCVTFXV):
> >         (MATCH_VFNCVTFFV):
> >         (MASK_VFNCVTFFV):
> >         (MATCH_VMFORDVF):
> >         (MASK_VMFORDVF):
> >         (MATCH_VMPOPCM):
> >         (MASK_VMPOPCM):
> >         (MATCH_VMFIRSTM):
> >         (MASK_VMFIRSTM):
> >         (MATCH_VMSBFM_ZV):
> >         (MASK_VMSBFM_ZV):
> >         (MATCH_VMSIFM_ZV):
> >         (MASK_VMSIFM_ZV):
> >         (MATCH_VMSOFM_ZV):
> >         (MASK_VMSOFM_ZV):
> >         (MATCH_VIOTAM_ZV):
> >         (MASK_VIOTAM_ZV):
> >         (MATCH_VIDV_ZV):
> >         (MASK_VIDV_ZV):
> >         (MATCH_VEXTXV):
> >         (MASK_VEXTXV):
> >         (MATCH_VMVXS_ZV):
> >         (MASK_VMVXS_ZV):
> >         (MATCH_VMVSX_ZV):
> >         (MASK_VMVSX_ZV):
> >         (MATCH_VFMVFS_ZV):
> >         (MASK_VFMVFS_ZV):
> >         (MATCH_VFMVSF_ZV):
> >         (MASK_VFMVSF_ZV):
> >         (MATCH_VAMOADDWV):
> >         (MASK_VAMOADDWV):
> >         (MATCH_VAMOADDDV):
> >         (MASK_VAMOADDDV):
> >         (MATCH_VAMOSWAPWV):
> >         (MASK_VAMOSWAPWV):
> >         (MATCH_VAMOSWAPDV):
> >         (MASK_VAMOSWAPDV):
> >         (MATCH_VAMOXORWV):
> >         (MASK_VAMOXORWV):
> >         (MATCH_VAMOXORDV):
> >         (MASK_VAMOXORDV):
> >         (MATCH_VAMOANDWV):
> >         (MASK_VAMOANDWV):
> >         (MATCH_VAMOANDDV):
> >         (MASK_VAMOANDDV):
> >         (MATCH_VAMOORWV):
> >         (MASK_VAMOORWV):
> >         (MATCH_VAMOORDV):
> >         (MASK_VAMOORDV):
> >         (MATCH_VAMOMINWV):
> >         (MASK_VAMOMINWV):
> >         (MATCH_VAMOMINDV):
> >         (MASK_VAMOMINDV):
> >         (MATCH_VAMOMAXWV):
> >         (MASK_VAMOMAXWV):
> >         (MATCH_VAMOMAXDV):
> >         (MASK_VAMOMAXDV):
> >         (MATCH_VAMOMINUWV):
> >         (MASK_VAMOMINUWV):
> >         (MATCH_VAMOMINUDV):
> >         (MASK_VAMOMINUDV):
> >         (MATCH_VAMOMAXUWV):
> >         (MASK_VAMOMAXUWV):
> >         (MATCH_VAMOMAXUDV):
> >         (MASK_VAMOMAXUDV):
> >         * opcode/riscv.h (enum riscv_insn_class):Add xtheadv class
> >
> > opcodes/ChangeLog:
> >
> > 2023-11-08  Chen Yixuan  <chenyixuan@iscas.an.cn>
> >
> >         * riscv-opc.c:Merge RVV 1.0 and xtheadv instruction definations.
> >
> >
> > ---
> >  bfd/elfxx-riscv.c          |   19 +-
> >  gas/config/tc-riscv.c      |   84 ++-
> >  include/opcode/riscv-opc.h |  398 ++++++++++++++
> >  include/opcode/riscv.h     |    6 +
> >  opcodes/riscv-opc.c        | 1026 ++++++++++++++++++++++++++----------
> >  5 files changed, 1227 insertions(+), 306 deletions(-)
> >
> > diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
> > index c9acf124626..1f04ac6d9be 100644
> > --- a/bfd/elfxx-riscv.c
> > +++ b/bfd/elfxx-riscv.c
> > @@ -1374,6 +1374,7 @@ static struct riscv_supported_ext
> riscv_supported_vendor_x_ext[] =
> >    {"xtheadmempair",    ISA_SPEC_CLASS_DRAFT,   1, 0, 0 },
> >    {"xtheadsync",       ISA_SPEC_CLASS_DRAFT,   1, 0, 0 },
> >    {"xventanacondops",  ISA_SPEC_CLASS_DRAFT,   1, 0, 0 },
> > +  {"xtheadv",    ISA_SPEC_CLASS_DRAFT, 0, 7, 1},
> >    {NULL, 0, 0, 0, 0}
> >  };
> >
> > @@ -1994,7 +1995,8 @@ riscv_parse_check_conflicts (riscv_parse_subset_t
> *rps)
> >           && strncmp (s->name, "zve", 3) == 0)
> >         support_zve = true;
> >        if (!support_zvl
> > -         && strncmp (s->name, "zvl", 3) == 0)
> > +         && strncmp (s->name, "zvl", 3) == 0
> > +    && strncmp (s->name, "zvls", 4) != 0)
> >         support_zvl = true;
> >        if (support_zve && support_zvl)
> >         break;
> > @@ -2514,14 +2516,19 @@ riscv_multi_subset_supports
> (riscv_parse_subset_t *rps,
> >      case INSN_CLASS_ZKSH:
> >        return riscv_subset_supports (rps, "zksh");
> >      case INSN_CLASS_V:
> > -      return (riscv_subset_supports (rps, "v")
> > +      return ((riscv_subset_supports (rps, "v")
> >               || riscv_subset_supports (rps, "zve64x")
> > -             || riscv_subset_supports (rps, "zve32x"));
> > +             || riscv_subset_supports (rps, "zve32x"))
> > +             && !riscv_subset_supports (rps, "zvamo"));
> >      case INSN_CLASS_ZVEF:
> >        return (riscv_subset_supports (rps, "v")
> >               || riscv_subset_supports (rps, "zve64d")
> >               || riscv_subset_supports (rps, "zve64f")
> >               || riscv_subset_supports (rps, "zve32f"));
> > +    case INSN_CLASS_V_OR_XTHEADV:
> > +    case INSN_CLASS_ZVEF_OR_XTHEADV:
> > +      return riscv_subset_supports (rps, "v")
> > +        || riscv_subset_supports(rps, "xtheadv");
> >      case INSN_CLASS_ZVBB:
> >        return riscv_subset_supports (rps, "zvbb");
> >      case INSN_CLASS_ZVBC:
> > @@ -2556,6 +2563,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t
> *rps,
> >        return riscv_subset_supports (rps, "xcvmac");
> >      case INSN_CLASS_XCVALU:
> >        return riscv_subset_supports (rps, "xcvalu");
> > +    case INSN_CLASS_XTHEADV:
> > +      return riscv_subset_supports(rps, "xtheadv");
> >      case INSN_CLASS_XTHEADBA:
> >        return riscv_subset_supports (rps, "xtheadba");
> >      case INSN_CLASS_XTHEADBB:
> > @@ -2768,8 +2777,10 @@ riscv_multi_subset_supports_ext
> (riscv_parse_subset_t *rps,
> >        return "zksh";
> >      case INSN_CLASS_V:
> >        return _("v' or `zve64x' or `zve32x");
> > +    case INSN_CLASS_XTHEADV:
> > +      return _("v' or `zvlsseg' or `zvamo");
> >      case INSN_CLASS_ZVEF:
> > -      return _("v' or `zve64d' or `zve64f' or `zve32f");
> > +      return _("v");
> >      case INSN_CLASS_ZVBB:
> >        return _("zvbb");
> >      case INSN_CLASS_ZVBC:
> > diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
> > index 402c46ad753..d1752eacc08 100644
> > --- a/gas/config/tc-riscv.c
> > +++ b/gas/config/tc-riscv.c
> > @@ -2298,56 +2298,104 @@ my_getVsetvliExpression (expressionS *ep, char
> *str)
> >  {
> >    unsigned int vsew_value = 0, vlmul_value = 0;
> >    unsigned int vta_value = 0, vma_value = 0;
> > +  unsigned int vlen_value = 0, vediv_value = 0; /* RVV 0.7. */
> >    bfd_boolean vsew_found = FALSE, vlmul_found = FALSE;
> >    bfd_boolean vta_found = FALSE, vma_found = FALSE;
> > +  bfd_boolean vlen_found = FALSE, vediv_found = FALSE; /* RVV 0.7. */
> >
> > -  if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew),
> &vsew_value))
> > +  if(riscv_subset_supports (&riscv_rps_as, "zve32x"))
> > +  {
> > +    if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew),
> &vsew_value))
> >      {
> >        if (*str == ',')
> > -       ++str;
> > +               ++str;
> >        if (vsew_found)
> > -       as_bad (_("multiple vsew constants"));
> > +               as_bad (_("multiple vsew constants"));
> >        vsew_found = TRUE;
> >      }
> > -  if (arg_lookup (&str, riscv_vlmul, ARRAY_SIZE (riscv_vlmul),
> &vlmul_value))
> > +    if (arg_lookup (&str, riscv_vlmul, ARRAY_SIZE (riscv_vlmul),
> &vlmul_value))
> >      {
> >        if (*str == ',')
> > -       ++str;
> > +               ++str;
> >        if (vlmul_found)
> > -       as_bad (_("multiple vlmul constants"));
> > -      vlmul_found = TRUE;
> > +               as_bad (_("multiple vlmul constants"));
> > +      vlmul_found = TRUE;
> >      }
> > -  if (arg_lookup (&str, riscv_vta, ARRAY_SIZE (riscv_vta), &vta_value))
> > +    if (arg_lookup (&str, riscv_vta, ARRAY_SIZE (riscv_vta),
> &vta_value))
> >      {
> >        if (*str == ',')
> > -       ++str;
> > +               ++str;
> >        if (vta_found)
> > -       as_bad (_("multiple vta constants"));
> > -      vta_found = TRUE;
> > +               as_bad (_("multiple vta constants"));
> > +       vta_found = TRUE;
> >      }
> > -  if (arg_lookup (&str, riscv_vma, ARRAY_SIZE (riscv_vma), &vma_value))
> > +    if (arg_lookup (&str, riscv_vma, ARRAY_SIZE (riscv_vma),
> &vma_value))
> >      {
> >        if (*str == ',')
> > -       ++str;
> > +               ++str;
> >        if (vma_found)
> > -       as_bad (_("multiple vma constants"));
> > +               as_bad (_("multiple vma constants"));
> >        vma_found = TRUE;
> >      }
> >
> > -  if (vsew_found || vlmul_found || vta_found || vma_found)
> > +    if (vsew_found || vlmul_found || vta_found || vma_found)
> >      {
> >        ep->X_op = O_constant;
> >        ep->X_add_number = (vlmul_value << OP_SH_VLMUL)
> > -                        | (vsew_value << OP_SH_VSEW)
> > -                        | (vta_value << OP_SH_VTA)
> > -                        | (vma_value << OP_SH_VMA);
> > +             | (vsew_value << OP_SH_VSEW)
> > +             | (vta_value << OP_SH_VTA)
> > +             | (vma_value << OP_SH_VMA);
> >        expr_parse_end = str;
> >      }
> > +    else
> > +    {
> > +      my_getExpression (ep, str);
> > +      str = expr_parse_end;
> > +    }
> > +  }
> >    else
> > +  {
> > +    /* RVV 0.7. */
> > +    if (arg_lookup (&str, riscv_vsew, ARRAY_SIZE (riscv_vsew),
> &vsew_value))
> > +    {
> > +      if (*str == ',')
> > +       ++str;
> > +      if (vsew_found)
> > +       as_bad (_("multiple vsew constants"));
> > +      vsew_found = TRUE;
> > +    }
> > +
> > +    if (arg_lookup (&str, riscv_vlen, ARRAY_SIZE (riscv_vlen),
> &vlen_value))
> > +    {
> > +      if (*str == ',')
> > +       ++str;
> > +      if (vlen_found)
> > +       as_bad (_("multiple vlen constants"));
> > +      vlen_found = TRUE;
> > +    }
> > +    if (arg_lookup (&str, riscv_vediv, ARRAY_SIZE (riscv_vediv),
> &vediv_value))
> > +    {
> > +      if (*str == ',')
> > +       ++str;
> > +      if (vediv_found)
> > +       as_bad (_("multiple vediv constants"));
> > +      vediv_found = TRUE;
> > +    }
> > +
> > +    if (vsew_found || vlmul_found || vta_found || vma_found)
> > +    {
> > +      ep->X_op = O_constant;
> > +      ep->X_add_number = (vediv_value << 5)
> > +             | (vsew_value << 2)
> > +             | (vlen_value);
> > +      expr_parse_end = str;
> > +    }
> > +    else
> >      {
> >        my_getExpression (ep, str);
> >        str = expr_parse_end;
> >      }
> > +  }
> >  }
> >
> >  /* Detect and handle implicitly zero load-store offsets.  For example,
> > diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
> > index 24217062edc..496f4703f3d 100644
> > --- a/include/opcode/riscv-opc.h
> > +++ b/include/opcode/riscv-opc.h
> > @@ -2121,6 +2121,404 @@
> >  #define MASK_VDOTUVV  0xfc00707f
> >  #define MATCH_VFDOTVV  0xe4001057
> >  #define MASK_VFDOTVV  0xfc00707f
> > +/* XTHEADV  */
> > +#define MATCH_VLBV  0x10000007
> > +#define MASK_VLBV   0xfdf0707f
> > +#define MATCH_VLHV  0x10005007
> > +#define MASK_VLHV   0xfdf0707f
> > +#define MATCH_VLWV  0x10006007
> > +#define MASK_VLWV   0xfdf0707f
> > +
> > +#define MATCH_VLSBV    0x18000007
> > +#define MASK_VLSBV     0xfc00707f
> > +#define MATCH_VLSHV    0x18005007
> > +#define MASK_VLSHV     0xfc00707f
> > +#define MATCH_VLSWV    0x18006007
> > +#define MASK_VLSWV     0xfc00707f
> > +
> > +#define MATCH_VLXBV    0x1c000007
> > +#define MASK_VLXBV     0xfc00707f
> > +#define MATCH_VLXHV    0x1c005007
> > +#define MASK_VLXHV     0xfc00707f
> > +#define MATCH_VLXWV    0x1c006007
> > +#define MASK_VLXWV     0xfc00707f
> > +#define MATCH_VSUXBV   0x1c000027
> > +#define MASK_VSUXBV    0xfc00707f
> > +#define MATCH_VSUXHV   0x1c005027
> > +#define MASK_VSUXHV    0xfc00707f
> > +#define MATCH_VSUXWV   0x1c006027
> > +#define MASK_VSUXWV    0xfc00707f
> > +#define MATCH_VSUXEV   0x1c007027
> > +#define MASK_VSUXEV    0xfc00707f
> > +
> > +#define MATCH_VLBFFV  0x11000007
> > +#define MASK_VLBFFV   0xfdf0707f
> > +#define MATCH_VLHFFV  0x11005007
> > +#define MASK_VLHFFV   0xfdf0707f
> > +#define MATCH_VLWFFV  0x11006007
> > +#define MASK_VLWFFV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG2BV  0x30000007
> > +#define MASK_VLSEG2BV   0xfdf0707f
> > +#define MATCH_VLSEG2HV  0x30005007
> > +#define MASK_VLSEG2HV   0xfdf0707f
> > +#define MATCH_VLSEG2WV  0x30006007
> > +#define MASK_VLSEG2WV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG3BV  0x50000007
> > +#define MASK_VLSEG3BV   0xfdf0707f
> > +#define MATCH_VLSEG3HV  0x50005007
> > +#define MASK_VLSEG3HV   0xfdf0707f
> > +#define MATCH_VLSEG3WV  0x50006007
> > +#define MASK_VLSEG3WV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG4BV  0x70000007
> > +#define MASK_VLSEG4BV   0xfdf0707f
> > +#define MATCH_VLSEG4HV  0x70005007
> > +#define MASK_VLSEG4HV   0xfdf0707f
> > +#define MATCH_VLSEG4WV  0x70006007
> > +#define MASK_VLSEG4WV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG5BV  0x90000007
> > +#define MASK_VLSEG5BV   0xfdf0707f
> > +#define MATCH_VLSEG5HV  0x90005007
> > +#define MASK_VLSEG5HV   0xfdf0707f
> > +#define MATCH_VLSEG5WV  0x90006007
> > +#define MASK_VLSEG5WV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG6BV  0xb0000007
> > +#define MASK_VLSEG6BV   0xfdf0707f
> > +#define MATCH_VLSEG6HV  0xb0005007
> > +#define MASK_VLSEG6HV   0xfdf0707f
> > +#define MATCH_VLSEG6WV  0xb0006007
> > +#define MASK_VLSEG6WV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG7BV  0xd0000007
> > +#define MASK_VLSEG7BV   0xfdf0707f
> > +#define MATCH_VLSEG7HV  0xd0005007
> > +#define MASK_VLSEG7HV   0xfdf0707f
> > +#define MATCH_VLSEG7WV  0xd0006007
> > +#define MASK_VLSEG7WV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG8BV  0xf0000007
> > +#define MASK_VLSEG8BV   0xfdf0707f
> > +#define MATCH_VLSEG8HV  0xf0005007
> > +#define MASK_VLSEG8HV   0xfdf0707f
> > +#define MATCH_VLSEG8WV  0xf0006007
> > +#define MASK_VLSEG8WV   0xfdf0707f
> > +
> > +#define MATCH_VLSSEG2BV  0x38000007
> > +#define MASK_VLSSEG2BV   0xfc00707f
> > +#define MATCH_VLSSEG2HV  0x38005007
> > +#define MASK_VLSSEG2HV   0xfc00707f
> > +#define MATCH_VLSSEG2WV  0x38006007
> > +#define MASK_VLSSEG2WV   0xfc00707f
> > +
> > +#define MATCH_VLSSEG3BV  0x58000007
> > +#define MASK_VLSSEG3BV   0xfc00707f
> > +#define MATCH_VLSSEG3HV  0x58005007
> > +#define MASK_VLSSEG3HV   0xfc00707f
> > +#define MATCH_VLSSEG3WV  0x58006007
> > +#define MASK_VLSSEG3WV   0xfc00707f
> > +
> > +#define MATCH_VLSSEG4BV  0x78000007
> > +#define MASK_VLSSEG4BV   0xfc00707f
> > +#define MATCH_VLSSEG4HV  0x78005007
> > +#define MASK_VLSSEG4HV   0xfc00707f
> > +#define MATCH_VLSSEG4WV  0x78006007
> > +#define MASK_VLSSEG4WV   0xfc00707f
> > +
> > +#define MATCH_VLSSEG5BV  0x98000007
> > +#define MASK_VLSSEG5BV   0xfc00707f
> > +#define MATCH_VLSSEG5HV  0x98005007
> > +#define MASK_VLSSEG5HV   0xfc00707f
> > +#define MATCH_VLSSEG5WV  0x98006007
> > +#define MASK_VLSSEG5WV   0xfc00707f
> > +
> > +#define MATCH_VLSSEG6BV  0xb8000007
> > +#define MASK_VLSSEG6BV   0xfc00707f
> > +#define MATCH_VLSSEG6HV  0xb8005007
> > +#define MASK_VLSSEG6HV   0xfc00707f
> > +#define MATCH_VLSSEG6WV  0xb8006007
> > +#define MASK_VLSSEG6WV   0xfc00707f
> > +
> > +#define MATCH_VLSSEG7BV  0xd8000007
> > +#define MASK_VLSSEG7BV   0xfc00707f
> > +#define MATCH_VLSSEG7HV  0xd8005007
> > +#define MASK_VLSSEG7HV   0xfc00707f
> > +#define MATCH_VLSSEG7WV  0xd8006007
> > +#define MASK_VLSSEG7WV   0xfc00707f
> > +
> > +#define MATCH_VLSSEG8BV  0xf8000007
> > +#define MASK_VLSSEG8BV   0xfc00707f
> > +#define MATCH_VLSSEG8HV  0xf8005007
> > +#define MASK_VLSSEG8HV   0xfc00707f
> > +#define MATCH_VLSSEG8WV  0xf8006007
> > +#define MASK_VLSSEG8WV   0xfc00707f
> > +
> > +#define MATCH_VLXSEG2BV  0x3c000007
> > +#define MASK_VLXSEG2BV   0xfc00707f
> > +#define MATCH_VLXSEG2HV  0x3c005007
> > +#define MASK_VLXSEG2HV   0xfc00707f
> > +#define MATCH_VLXSEG2WV  0x3c006007
> > +#define MASK_VLXSEG2WV   0xfc00707f
> > +
> > +#define MATCH_VLXSEG3BV  0x5c000007
> > +#define MASK_VLXSEG3BV   0xfc00707f
> > +#define MATCH_VLXSEG3HV  0x5c005007
> > +#define MASK_VLXSEG3HV   0xfc00707f
> > +#define MATCH_VLXSEG3WV  0x5c006007
> > +#define MASK_VLXSEG3WV   0xfc00707f
> > +
> > +#define MATCH_VLXSEG4BV  0x7c000007
> > +#define MASK_VLXSEG4BV   0xfc00707f
> > +#define MATCH_VLXSEG4HV  0x7c005007
> > +#define MASK_VLXSEG4HV   0xfc00707f
> > +#define MATCH_VLXSEG4WV  0x7c006007
> > +#define MASK_VLXSEG4WV   0xfc00707f
> > +
> > +#define MATCH_VLXSEG5BV  0x9c000007
> > +#define MASK_VLXSEG5BV   0xfc00707f
> > +#define MATCH_VLXSEG5HV  0x9c005007
> > +#define MASK_VLXSEG5HV   0xfc00707f
> > +#define MATCH_VLXSEG5WV  0x9c006007
> > +#define MASK_VLXSEG5WV   0xfc00707f
> > +
> > +#define MATCH_VLXSEG6BV  0xbc000007
> > +#define MASK_VLXSEG6BV   0xfc00707f
> > +#define MATCH_VLXSEG6HV  0xbc005007
> > +#define MASK_VLXSEG6HV   0xfc00707f
> > +#define MATCH_VLXSEG6WV  0xbc006007
> > +#define MASK_VLXSEG6WV   0xfc00707f
> > +
> > +#define MATCH_VLXSEG7BV  0xdc000007
> > +#define MASK_VLXSEG7BV   0xfc00707f
> > +#define MATCH_VLXSEG7HV  0xdc005007
> > +#define MASK_VLXSEG7HV   0xfc00707f
> > +#define MATCH_VLXSEG7WV  0xdc006007
> > +#define MASK_VLXSEG7WV   0xfc00707f
> > +
> > +#define MATCH_VLXSEG8BV  0xfc000007
> > +#define MASK_VLXSEG8BV   0xfc00707f
> > +#define MATCH_VLXSEG8HV  0xfc005007
> > +#define MASK_VLXSEG8HV   0xfc00707f
> > +#define MATCH_VLXSEG8WV  0xfc006007
> > +#define MASK_VLXSEG8WV   0xfc00707f
> > +
> > +#define MATCH_VLSEG2BFFV  0x31000007
> > +#define MASK_VLSEG2BFFV   0xfdf0707f
> > +#define MATCH_VLSEG2HFFV  0x31005007
> > +#define MASK_VLSEG2HFFV   0xfdf0707f
> > +#define MATCH_VLSEG2WFFV  0x31006007
> > +#define MASK_VLSEG2WFFV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG3BFFV  0x51000007
> > +#define MASK_VLSEG3BFFV   0xfdf0707f
> > +#define MATCH_VLSEG3HFFV  0x51005007
> > +#define MASK_VLSEG3HFFV   0xfdf0707f
> > +#define MATCH_VLSEG3WFFV  0x51006007
> > +#define MASK_VLSEG3WFFV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG4BFFV  0x71000007
> > +#define MASK_VLSEG4BFFV   0xfdf0707f
> > +#define MATCH_VLSEG4HFFV  0x71005007
> > +#define MASK_VLSEG4HFFV   0xfdf0707f
> > +#define MATCH_VLSEG4WFFV  0x71006007
> > +#define MASK_VLSEG4WFFV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG5BFFV  0x91000007
> > +#define MASK_VLSEG5BFFV   0xfdf0707f
> > +#define MATCH_VLSEG5HFFV  0x91005007
> > +#define MASK_VLSEG5HFFV   0xfdf0707f
> > +#define MATCH_VLSEG5WFFV  0x91006007
> > +#define MASK_VLSEG5WFFV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG6BFFV  0xb1000007
> > +#define MASK_VLSEG6BFFV   0xfdf0707f
> > +#define MATCH_VLSEG6HFFV  0xb1005007
> > +#define MASK_VLSEG6HFFV   0xfdf0707f
> > +#define MATCH_VLSEG6WFFV  0xb1006007
> > +#define MASK_VLSEG6WFFV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG7BFFV  0xd1000007
> > +#define MASK_VLSEG7BFFV   0xfdf0707f
> > +#define MATCH_VLSEG7HFFV  0xd1005007
> > +#define MASK_VLSEG7HFFV   0xfdf0707f
> > +#define MATCH_VLSEG7WFFV  0xd1006007
> > +#define MASK_VLSEG7WFFV   0xfdf0707f
> > +
> > +#define MATCH_VLSEG8BFFV  0xf1000007
> > +#define MASK_VLSEG8BFFV   0xfdf0707f
> > +#define MATCH_VLSEG8HFFV  0xf1005007
> > +#define MASK_VLSEG8HFFV   0xfdf0707f
> > +#define MATCH_VLSEG8WFFV  0xf1006007
> > +#define MASK_VLSEG8WFFV   0xfdf0707f
> > +
> > +#define MATCH_VNSRLVV  0xb0000057
> > +#define MASK_VNSRLVV   0xfc00707f
> > +#define MATCH_VNSRLVX  0xb0004057
> > +#define MASK_VNSRLVX   0xfc00707f
> > +#define MATCH_VNSRLVI  0xb0003057
> > +#define MASK_VNSRLVI   0xfc00707f
> > +#define MATCH_VNSRAVV  0xb4000057
> > +#define MASK_VNSRAVV   0xfc00707f
> > +#define MATCH_VNSRAVX  0xb4004057
> > +#define MASK_VNSRAVX   0xfc00707f
> > +#define MATCH_VNSRAVI  0xb4003057
> > +#define MASK_VNSRAVI   0xfc00707f
> > +
> > +#define MATCH_VWMACCSUVV_ZV 0xf8002057
> > +#define MASK_VWMACCSUVV_ZV  0xfc00707f
> > +#define MATCH_VWMACCSUVX_ZV 0xf8006057
> > +#define MASK_VWMACCSUVX_ZV  0xfc00707f
> > +#define MATCH_VWMACCUSVX_ZV 0xfc006057
> > +#define MASK_VWMACCUSVX_ZV  0xfc00707f
> > +
> > +#define MATCH_VAADDVV_ZV  0x90000057
> > +#define MASK_VAADDVV_ZV   0xfc00707f
> > +#define MATCH_VAADDVX_ZV  0x90004057
> > +#define MASK_VAADDVX_ZV   0xfc00707f
> > +#define MATCH_VAADDVI     0x90003057
> > +#define MASK_VAADDVI      0xfc00707f
> > +#define MATCH_VASUBVV_ZV  0x98000057
> > +#define MASK_VASUBVV_ZV   0xfc00707f
> > +#define MATCH_VASUBVX_ZV  0x98004057
> > +#define MASK_VASUBVX_ZV   0xfc00707f
> > +
> > +#define MATCH_VWSMACCUVV  0xf0000057
> > +#define MASK_VWSMACCUVV   0xfc00707f
> > +#define MATCH_VWSMACCUVX  0xf0004057
> > +#define MASK_VWSMACCUVX   0xfc00707f
> > +#define MATCH_VWSMACCVV   0xf4000057
> > +#define MASK_VWSMACCVV    0xfc00707f
> > +#define MATCH_VWSMACCVX   0xf4004057
> > +#define MASK_VWSMACCVX    0xfc00707f
> > +#define MATCH_VWSMACCSUVV 0xf8000057
> > +#define MASK_VWSMACCSUVV  0xfc00707f
> > +#define MATCH_VWSMACCSUVX 0xf8004057
> > +#define MASK_VWSMACCSUVX  0xfc00707f
> > +#define MATCH_VWSMACCUSVX 0xfc004057
> > +#define MASK_VWSMACCUSVX  0xfc00707f
> > +
> > +#define MATCH_VFSQRTV_ZV  0x8c001057
> > +#define MASK_VFSQRTV_ZV   0xfc0ff07f
> > +#define MATCH_VFCLASSV_ZV 0x8c081057
> > +#define MASK_VFCLASSV_ZV  0xfc0ff07f
> > +
> > +#define MATCH_VFCVTXUFV_ZV  0x88001057
> > +#define MASK_VFCVTXUFV_ZV   0xfc0ff07f
> > +#define MATCH_VFCVTXFV_ZV   0x88009057
> > +#define MASK_VFCVTXFV_ZV    0xfc0ff07f
> > +#define MATCH_VFCVTFXUV_ZV  0x88011057
> > +#define MASK_VFCVTFXUV_ZV   0xfc0ff07f
> > +#define MATCH_VFCVTFXV_ZV   0x88019057
> > +#define MASK_VFCVTFXV_ZV    0xfc0ff07f
> > +
> > +#define MATCH_VFWCVTXUFV_ZV  0x88041057
> > +#define MASK_VFWCVTXUFV_ZV   0xfc0ff07f
> > +#define MATCH_VFWCVTXFV_ZV   0x88049057
> > +#define MASK_VFWCVTXFV_ZV    0xfc0ff07f
> > +#define MATCH_VFWCVTFXUV_ZV  0x88051057
> > +#define MASK_VFWCVTFXUV_ZV   0xfc0ff07f
> > +#define MATCH_VFWCVTFXV_ZV   0x88059057
> > +#define MASK_VFWCVTFXV_ZV    0xfc0ff07f
> > +#define MATCH_VFWCVTFFV_ZV   0x88061057
> > +#define MASK_VFWCVTFFV_ZV    0xfc0ff07f
> > +
> > +#define MATCH_VNCLIPUVV 0xb8000057
> > +#define MASK_VNCLIPUVV  0xfc00707f
> > +#define MATCH_VNCLIPUVX 0xb8004057
> > +#define MASK_VNCLIPUVX  0xfc00707f
> > +#define MATCH_VNCLIPUVI 0xb8003057
> > +#define MASK_VNCLIPUVI  0xfc00707f
> > +#define MATCH_VNCLIPVV  0xbc000057
> > +#define MASK_VNCLIPVV   0xfc00707f
> > +#define MATCH_VNCLIPVX  0xbc004057
> > +#define MASK_VNCLIPVX   0xfc00707f
> > +#define MATCH_VNCLIPVI  0xbc003057
> > +#define MASK_VNCLIPVI   0xfc00707f
> > +
> > +#define MATCH_VMFORDVV 0x68001057
> > +#define MASK_VMFORDVV  0xfc00707f
> > +
> > +#define MATCH_VFNCVTXUFV  0x88081057
> > +#define MASK_VFNCVTXUFV   0xfc0ff07f
> > +#define MATCH_VFNCVTXFV   0x88089057
> > +#define MASK_VFNCVTXFV    0xfc0ff07f
> > +#define MATCH_VFNCVTFXUV  0x88091057
> > +#define MASK_VFNCVTFXUV   0xfc0ff07f
> > +#define MATCH_VFNCVTFXV   0x88099057
> > +#define MASK_VFNCVTFXV    0xfc0ff07f
> > +#define MATCH_VFNCVTFFV   0x880a1057
> > +#define MASK_VFNCVTFFV    0xfc0ff07f
> > +
> > +#define MATCH_VMFORDVF 0x68005057
> > +#define MASK_VMFORDVF  0xfc00707f
> > +#define MATCH_VMPOPCM  0x50002057
> > +#define MASK_VMPOPCM   0xfc0ff07f
> > +#define MATCH_VMFIRSTM 0x54002057
> > +#define MASK_VMFIRSTM  0xfc0ff07f
> > +
> > +#define MATCH_VMSBFM_ZV   0x5800a057
> > +#define MASK_VMSBFM_ZV    0xfc0ff07f
> > +#define MATCH_VMSIFM_ZV   0x5801a057
> > +#define MASK_VMSIFM_ZV    0xfc0ff07f
> > +#define MATCH_VMSOFM_ZV   0x58012057
> > +#define MASK_VMSOFM_ZV    0xfc0ff07f
> > +#define MATCH_VIOTAM_ZV   0x58082057
> > +#define MASK_VIOTAM_ZV    0xfc0ff07f
> > +#define MATCH_VIDV_ZV     0x5808a057
> > +#define MASK_VIDV_ZV      0xfdfff07f
> > +
> > +#define MATCH_VEXTXV      0x32002057
> > +#define MASK_VEXTXV       0xfe00707f
> > +#define MATCH_VMVXS_ZV    0x32002057
> > +#define MASK_VMVXS_ZV     0xfe0ff07f
> > +#define MATCH_VMVSX_ZV    0x36006057
> > +#define MASK_VMVSX_ZV     0xfff0707f
> > +
> > +#define MATCH_VFMVFS_ZV   0x32001057
> > +#define MASK_VFMVFS_ZV    0xfe0ff07f
> > +#define MATCH_VFMVSF_ZV   0x36005057
> > +#define MASK_VFMVSF_ZV    0xfff0707f
> > +
> > +/* ZVAMO extension.  */
> > +#define MATCH_VAMOADDWV   0x0000602f
> > +#define MASK_VAMOADDWV    0xf800707f
> > +#define MATCH_VAMOADDDV   0x0000702f
> > +#define MASK_VAMOADDDV    0xf800707f
> > +#define MATCH_VAMOSWAPWV  0x0800602f
> > +#define MASK_VAMOSWAPWV   0xf800707f
> > +#define MATCH_VAMOSWAPDV  0x0800702f
> > +#define MASK_VAMOSWAPDV   0xf800707f
> > +#define MATCH_VAMOXORWV   0x2000602f
> > +#define MASK_VAMOXORWV    0xf800707f
> > +#define MATCH_VAMOXORDV   0x2000702f
> > +#define MASK_VAMOXORDV    0xf800707f
> > +#define MATCH_VAMOANDWV   0x6000602f
> > +#define MASK_VAMOANDWV    0xf800707f
> > +#define MATCH_VAMOANDDV   0x6000702f
> > +#define MASK_VAMOANDDV    0xf800707f
> > +#define MATCH_VAMOORWV    0x4000602f
> > +#define MASK_VAMOORWV     0xf800707f
> > +#define MATCH_VAMOORDV    0x4000702f
> > +#define MASK_VAMOORDV     0xf800707f
> > +#define MATCH_VAMOMINWV   0x8000602f
> > +#define MASK_VAMOMINWV    0xf800707f
> > +#define MATCH_VAMOMINDV   0x8000702f
> > +#define MASK_VAMOMINDV    0xf800707f
> > +#define MATCH_VAMOMAXWV   0xa000602f
> > +#define MASK_VAMOMAXWV    0xf800707f
> > +#define MATCH_VAMOMAXDV   0xa000702f
> > +#define MASK_VAMOMAXDV    0xf800707f
> > +#define MATCH_VAMOMINUWV  0xc000602f
> > +#define MASK_VAMOMINUWV   0xf800707f
> > +#define MATCH_VAMOMINUDV  0xc000702f
> > +#define MASK_VAMOMINUDV   0xf800707f
> > +#define MATCH_VAMOMAXUWV  0xe000602f
> > +#define MASK_VAMOMAXUWV   0xf800707f
> > +#define MATCH_VAMOMAXUDV  0xe000702f
> > +#define MASK_VAMOMAXUDV   0xf800707f
> >  /* Zvbb instructions.  */
> >  #define MATCH_VANDN_VV 0x4000057
> >  #define MASK_VANDN_VV 0xfc00707f
> > diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h
> > index 710a9b73189..55898009f85 100644
> > --- a/include/opcode/riscv.h
> > +++ b/include/opcode/riscv.h
> > @@ -436,7 +436,9 @@ enum riscv_insn_class
> >    INSN_CLASS_ZBC_OR_ZBKC,
> >    INSN_CLASS_ZKND_OR_ZKNE,
> >    INSN_CLASS_V,
> > +  INSN_CLASS_V_OR_XTHEADV,
> >    INSN_CLASS_ZVEF,
> > +  INSN_CLASS_ZVEF_OR_XTHEADV,
> >    INSN_CLASS_ZVBB,
> >    INSN_CLASS_ZVBC,
> >    INSN_CLASS_ZVKG,
> > @@ -467,6 +469,7 @@ enum riscv_insn_class
> >    INSN_CLASS_XTHEADMEMIDX,
> >    INSN_CLASS_XTHEADMEMPAIR,
> >    INSN_CLASS_XTHEADSYNC,
> > +  INSN_CLASS_XTHEADV,
> >    INSN_CLASS_XVENTANACONDOPS,
> >  };
> >
> > @@ -586,6 +589,9 @@ extern const char * const riscv_vsew[8];
> >  extern const char * const riscv_vlmul[8];
> >  extern const char * const riscv_vta[2];
> >  extern const char * const riscv_vma[2];
> > +/* xtheadv.  */
> > +extern const char * const riscv_vlen[4];
> > +extern const char * const riscv_vediv[4];
> >  extern const char * const riscv_fli_symval[32];
> >  extern const float riscv_fli_numval[32];
> >
> > diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
> > index 72d727cd77e..30ccb083c4b 100644
> > --- a/opcodes/riscv-opc.c
> > +++ b/opcodes/riscv-opc.c
> > @@ -110,6 +110,18 @@ const char * const riscv_vma[2] =
> >    "mu", "ma"
> >  };
> >
> > +/* xtheadv, The vsetvli vlmul constants.  */
> > +const char * const riscv_vlen[4] =
> > +{
> > +    "m1", "m2", "m4", "m8"
> > +};
> > +
> > +/* xtheadv, The vsetvli vediv constants.  */
> > +const char * const riscv_vediv[4] =
> > +{
> > +    "d1", "d2", "d4", "d8"
> > +};
> > +
> >  /* The FLI.[HSDQ] symbolic constants (NULL for numeric constant).  */
> >  const char * const riscv_fli_symval[32] =
> >  {
> > @@ -1150,8 +1162,8 @@ const struct riscv_opcode riscv_opcodes[] =
> >  {"sm3p1",    0, INSN_CLASS_ZKSH,    "d,s",    MATCH_SM3P1, MASK_SM3P1,
> match_opcode, 0 },
> >
> >  /* RVV instructions.  */
> > -{"vsetvl",     0, INSN_CLASS_V,  "d,s,t",  MATCH_VSETVL, MASK_VSETVL,
> match_opcode, 0},
> > -{"vsetvli",    0, INSN_CLASS_V,  "d,s,Vc", MATCH_VSETVLI, MASK_VSETVLI,
> match_opcode, 0},
> > +{"vsetvl",     0, INSN_CLASS_V_OR_XTHEADV,  "d,s,t",  MATCH_VSETVL,
> MASK_VSETVL, match_opcode, 0},
> > +{"vsetvli",    0, INSN_CLASS_V_OR_XTHEADV,  "d,s,Vc", MATCH_VSETVLI,
> MASK_VSETVLI, match_opcode, 0},
> >  {"vsetivli",   0, INSN_CLASS_V,  "d,Z,Vb", MATCH_VSETIVLI,
> MASK_VSETIVLI, match_opcode, 0},
> >
> >  {"vlm.v",      0, INSN_CLASS_V,  "Vd,0(s)", MATCH_VLMV, MASK_VLMV,
> match_opcode, INSN_DREF },
> > @@ -1507,33 +1519,33 @@ const struct riscv_opcode riscv_opcodes[] =
> >
> >  {"vneg.v",     0, INSN_CLASS_V,  "Vd,VtVm",  MATCH_VRSUBVX,
> MASK_VRSUBVX | MASK_RS1, match_opcode, INSN_ALIAS },
> >
> > -{"vadd.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VADDVV,
> MASK_VADDVV, match_opcode, 0 },
> > -{"vadd.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VADDVX,
> MASK_VADDVX, match_opcode, 0 },
> > -{"vadd.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VADDVI,
> MASK_VADDVI, match_opcode, 0 },
> > -{"vsub.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSUBVV,
> MASK_VSUBVV, match_opcode, 0 },
> > -{"vsub.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSUBVX,
> MASK_VSUBVX, match_opcode, 0 },
> > -{"vrsub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VRSUBVX,
> MASK_VRSUBVX, match_opcode, 0 },
> > -{"vrsub.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VRSUBVI,
> MASK_VRSUBVI, match_opcode, 0 },
> > -
> > -{"vwcvt.x.x.v",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VWCVTXXV,
> MASK_VWCVTXXV, match_opcode, INSN_ALIAS },
> > -{"vwcvtu.x.x.v", 0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VWCVTUXXV,
> MASK_VWCVTUXXV, match_opcode, INSN_ALIAS },
> > -
> > -{"vwaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDUVV,
> MASK_VWADDUVV, match_opcode, 0 },
> > -{"vwaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDUVX,
> MASK_VWADDUVX, match_opcode, 0 },
> > -{"vwsubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBUVV,
> MASK_VWSUBUVV, match_opcode, 0 },
> > -{"vwsubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBUVX,
> MASK_VWSUBUVX, match_opcode, 0 },
> > -{"vwadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDVV,
> MASK_VWADDVV, match_opcode, 0 },
> > -{"vwadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDVX,
> MASK_VWADDVX, match_opcode, 0 },
> > -{"vwsub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBVV,
> MASK_VWSUBVV, match_opcode, 0 },
> > -{"vwsub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBVX,
> MASK_VWSUBVX, match_opcode, 0 },
> > -{"vwaddu.wv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDUWV,
> MASK_VWADDUWV, match_opcode, 0 },
> > -{"vwaddu.wx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDUWX,
> MASK_VWADDUWX, match_opcode, 0 },
> > -{"vwsubu.wv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBUWV,
> MASK_VWSUBUWV, match_opcode, 0 },
> > -{"vwsubu.wx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBUWX,
> MASK_VWSUBUWX, match_opcode, 0 },
> > -{"vwadd.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWADDWV,
> MASK_VWADDWV, match_opcode, 0 },
> > -{"vwadd.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWADDWX,
> MASK_VWADDWX, match_opcode, 0 },
> > -{"vwsub.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWSUBWV,
> MASK_VWSUBWV, match_opcode, 0 },
> > -{"vwsub.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWSUBWX,
> MASK_VWSUBWX, match_opcode, 0 },
> > +{"vadd.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VADDVV,
> MASK_VADDVV, match_opcode, 0 },
> > +{"vadd.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VADDVX,
> MASK_VADDVX, match_opcode, 0 },
> > +{"vadd.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VADDVI, MASK_VADDVI, match_opcode, 0 },
> > +{"vsub.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSUBVV,
> MASK_VSUBVV, match_opcode, 0 },
> > +{"vsub.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSUBVX,
> MASK_VSUBVX, match_opcode, 0 },
> > +{"vrsub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VRSUBVX,
> MASK_VRSUBVX, match_opcode, 0 },
> > +{"vrsub.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VRSUBVI, MASK_VRSUBVI, match_opcode, 0 },
> > +
> > +{"vwcvt.x.x.v",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm",
> MATCH_VWCVTXXV, MASK_VWCVTXXV, match_opcode, INSN_ALIAS },
> > +{"vwcvtu.x.x.v", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm",
> MATCH_VWCVTUXXV, MASK_VWCVTUXXV, match_opcode, INSN_ALIAS },
> > +
> > +{"vwaddu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWADDUVV, MASK_VWADDUVV, match_opcode, 0 },
> > +{"vwaddu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VWADDUVX, MASK_VWADDUVX, match_opcode, 0 },
> > +{"vwsubu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWSUBUVV, MASK_VWSUBUVV, match_opcode, 0 },
> > +{"vwsubu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VWSUBUVX, MASK_VWSUBUVX, match_opcode, 0 },
> > +{"vwadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWADDVV, MASK_VWADDVV, match_opcode, 0 },
> > +{"vwadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDVX,
> MASK_VWADDVX, match_opcode, 0 },
> > +{"vwsub.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWSUBVV, MASK_VWSUBVV, match_opcode, 0 },
> > +{"vwsub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBVX,
> MASK_VWSUBVX, match_opcode, 0 },
> > +{"vwaddu.wv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWADDUWV, MASK_VWADDUWV, match_opcode, 0 },
> > +{"vwaddu.wx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VWADDUWX, MASK_VWADDUWX, match_opcode, 0 },
> > +{"vwsubu.wv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWSUBUWV, MASK_VWSUBUWV, match_opcode, 0 },
> > +{"vwsubu.wx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VWSUBUWX, MASK_VWSUBUWX, match_opcode, 0 },
> > +{"vwadd.wv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWADDWV, MASK_VWADDWV, match_opcode, 0 },
> > +{"vwadd.wx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWADDWX,
> MASK_VWADDWX, match_opcode, 0 },
> > +{"vwsub.wv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWSUBWV, MASK_VWSUBWV, match_opcode, 0 },
> > +{"vwsub.wx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWSUBWX,
> MASK_VWSUBWX, match_opcode, 0 },
> >
> >  {"vzext.vf2",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VZEXT_VF2,
> MASK_VZEXT_VF2, match_opcode, 0 },
> >  {"vsext.vf2",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VSEXT_VF2,
> MASK_VSEXT_VF2, match_opcode, 0 },
> > @@ -1542,43 +1554,43 @@ const struct riscv_opcode riscv_opcodes[] =
> >  {"vzext.vf8",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VZEXT_VF8,
> MASK_VZEXT_VF8, match_opcode, 0 },
> >  {"vsext.vf8",  0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VSEXT_VF8,
> MASK_VSEXT_VF8, match_opcode, 0 },
> >
> > -{"vadc.vvm",   0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VADCVVM,
> MASK_VADCVVM, match_opcode, 0 },
> > -{"vadc.vxm",   0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VADCVXM,
> MASK_VADCVXM, match_opcode, 0 },
> > -{"vadc.vim",   0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VADCVIM,
> MASK_VADCVIM, match_opcode, 0 },
> > -{"vmadc.vvm",  0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMADCVVM,
> MASK_VMADCVVM, match_opcode, 0 },
> > -{"vmadc.vxm",  0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMADCVXM,
> MASK_VMADCVXM, match_opcode, 0 },
> > -{"vmadc.vim",  0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VMADCVIM,
> MASK_VMADCVIM, match_opcode, 0 },
> > +{"vadc.vvm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0",
> MATCH_VADCVVM, MASK_VADCVVM, match_opcode, 0 },
> > +{"vadc.vxm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0",
> MATCH_VADCVXM, MASK_VADCVXM, match_opcode, 0 },
> > +{"vadc.vim",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0",
> MATCH_VADCVIM, MASK_VADCVIM, match_opcode, 0 },
> > +{"vmadc.vvm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0",
> MATCH_VMADCVVM, MASK_VMADCVVM, match_opcode, 0 },
> > +{"vmadc.vxm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0",
> MATCH_VMADCVXM, MASK_VMADCVXM, match_opcode, 0 },
> > +{"vmadc.vim",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0",
> MATCH_VMADCVIM, MASK_VMADCVIM, match_opcode, 0 },
> >  {"vmadc.vv",   0, INSN_CLASS_V,  "Vd,Vt,Vs", MATCH_VMADCVV,
> MASK_VMADCVV, match_opcode, 0 },
> >  {"vmadc.vx",   0, INSN_CLASS_V,  "Vd,Vt,s", MATCH_VMADCVX,
> MASK_VMADCVX, match_opcode, 0 },
> >  {"vmadc.vi",   0, INSN_CLASS_V,  "Vd,Vt,Vi", MATCH_VMADCVI,
> MASK_VMADCVI, match_opcode, 0 },
> > -{"vsbc.vvm",   0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VSBCVVM,
> MASK_VSBCVVM, match_opcode, 0 },
> > -{"vsbc.vxm",   0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VSBCVXM,
> MASK_VSBCVXM, match_opcode, 0 },
> > -{"vmsbc.vvm",  0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMSBCVVM,
> MASK_VMSBCVVM, match_opcode, 0 },
> > -{"vmsbc.vxm",  0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMSBCVXM,
> MASK_VMSBCVXM, match_opcode, 0 },
> > +{"vsbc.vvm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0",
> MATCH_VSBCVVM, MASK_VSBCVVM, match_opcode, 0 },
> > +{"vsbc.vxm",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0",
> MATCH_VSBCVXM, MASK_VSBCVXM, match_opcode, 0 },
> > +{"vmsbc.vvm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0",
> MATCH_VMSBCVVM, MASK_VMSBCVVM, match_opcode, 0 },
> > +{"vmsbc.vxm",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0",
> MATCH_VMSBCVXM, MASK_VMSBCVXM, match_opcode, 0 },
> >  {"vmsbc.vv",   0, INSN_CLASS_V,  "Vd,Vt,Vs", MATCH_VMSBCVV,
> MASK_VMSBCVV, match_opcode, 0 },
> >  {"vmsbc.vx",   0, INSN_CLASS_V,  "Vd,Vt,s", MATCH_VMSBCVX,
> MASK_VMSBCVX, match_opcode, 0 },
> >
> > -{"vnot.v",     0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VNOTV, MASK_VNOTV,
> match_opcode, INSN_ALIAS },
> > -
> > -{"vand.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VANDVV,
> MASK_VANDVV, match_opcode, 0 },
> > -{"vand.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VANDVX,
> MASK_VANDVX, match_opcode, 0 },
> > -{"vand.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VANDVI,
> MASK_VANDVI, match_opcode, 0 },
> > -{"vor.vv",     0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VORVV, MASK_VORVV,
> match_opcode, 0 },
> > -{"vor.vx",     0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VORVX, MASK_VORVX,
> match_opcode, 0 },
> > -{"vor.vi",     0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VORVI,
> MASK_VORVI, match_opcode, 0 },
> > -{"vxor.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VXORVV,
> MASK_VXORVV, match_opcode, 0 },
> > -{"vxor.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VXORVX,
> MASK_VXORVX, match_opcode, 0 },
> > -{"vxor.vi",    0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VXORVI,
> MASK_VXORVI, match_opcode, 0 },
> > -
> > -{"vsll.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSLLVV,
> MASK_VSLLVV, match_opcode, 0 },
> > -{"vsll.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSLLVX,
> MASK_VSLLVX, match_opcode, 0 },
> > -{"vsll.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSLLVI,
> MASK_VSLLVI, match_opcode, 0 },
> > -{"vsrl.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSRLVV,
> MASK_VSRLVV, match_opcode, 0 },
> > -{"vsrl.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSRLVX,
> MASK_VSRLVX, match_opcode, 0 },
> > -{"vsrl.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSRLVI,
> MASK_VSRLVI, match_opcode, 0 },
> > -{"vsra.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSRAVV,
> MASK_VSRAVV, match_opcode, 0 },
> > -{"vsra.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSRAVX,
> MASK_VSRAVX, match_opcode, 0 },
> > -{"vsra.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSRAVI,
> MASK_VSRAVI, match_opcode, 0 },
> > +{"vnot.v",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,VtVm", MATCH_VNOTV,
> MASK_VNOTV, match_opcode, INSN_ALIAS },
> > +
> > +{"vand.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VANDVV,
> MASK_VANDVV, match_opcode, 0 },
> > +{"vand.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VANDVX,
> MASK_VANDVX, match_opcode, 0 },
> > +{"vand.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VANDVI, MASK_VANDVI, match_opcode, 0 },
> > +{"vor.vv",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VORVV,
> MASK_VORVV, match_opcode, 0 },
> > +{"vor.vx",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VORVX,
> MASK_VORVX, match_opcode, 0 },
> > +{"vor.vi",     0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm", MATCH_VORVI,
> MASK_VORVI, match_opcode, 0 },
> > +{"vxor.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VXORVV,
> MASK_VXORVV, match_opcode, 0 },
> > +{"vxor.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VXORVX,
> MASK_VXORVX, match_opcode, 0 },
> > +{"vxor.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VXORVI, MASK_VXORVI, match_opcode, 0 },
> > +
> > +{"vsll.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSLLVV,
> MASK_VSLLVV, match_opcode, 0 },
> > +{"vsll.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSLLVX,
> MASK_VSLLVX, match_opcode, 0 },
> > +{"vsll.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm",
> MATCH_VSLLVI, MASK_VSLLVI, match_opcode, 0 },
> > +{"vsrl.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSRLVV,
> MASK_VSRLVV, match_opcode, 0 },
> > +{"vsrl.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSRLVX,
> MASK_VSRLVX, match_opcode, 0 },
> > +{"vsrl.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm",
> MATCH_VSRLVI, MASK_VSRLVI, match_opcode, 0 },
> > +{"vsra.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VSRAVV,
> MASK_VSRAVV, match_opcode, 0 },
> > +{"vsra.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSRAVX,
> MASK_VSRAVX, match_opcode, 0 },
> > +{"vsra.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm",
> MATCH_VSRAVI, MASK_VSRAVI, match_opcode, 0 },
> >
> >  {"vncvt.x.x.w",0, INSN_CLASS_V,  "Vd,VtVm", MATCH_VNCVTXXW,
> MASK_VNCVTXXW, match_opcode, INSN_ALIAS },
> >
> > @@ -1589,130 +1601,138 @@ const struct riscv_opcode riscv_opcodes[] =
> >  {"vnsra.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNSRAWX,
> MASK_VNSRAWX, match_opcode, 0 },
> >  {"vnsra.wi",   0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VNSRAWI,
> MASK_VNSRAWI, match_opcode, 0 },
> >
> > -{"vmseq.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSEQVV,
> MASK_VMSEQVV, match_opcode, 0 },
> > -{"vmseq.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSEQVX,
> MASK_VMSEQVX, match_opcode, 0 },
> > -{"vmseq.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSEQVI,
> MASK_VMSEQVI, match_opcode, 0 },
> > -{"vmsne.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSNEVV,
> MASK_VMSNEVV, match_opcode, 0 },
> > -{"vmsne.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSNEVX,
> MASK_VMSNEVX, match_opcode, 0 },
> > -{"vmsne.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSNEVI,
> MASK_VMSNEVI, match_opcode, 0 },
> > -{"vmsltu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLTUVV,
> MASK_VMSLTUVV, match_opcode, 0 },
> > -{"vmsltu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLTUVX,
> MASK_VMSLTUVX, match_opcode, 0 },
> > -{"vmslt.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLTVV,
> MASK_VMSLTVV, match_opcode, 0 },
> > -{"vmslt.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLTVX,
> MASK_VMSLTVX, match_opcode, 0 },
> > -{"vmsleu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLEUVV,
> MASK_VMSLEUVV, match_opcode, 0 },
> > -{"vmsleu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLEUVX,
> MASK_VMSLEUVX, match_opcode, 0 },
> > -{"vmsleu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSLEUVI,
> MASK_VMSLEUVI, match_opcode, 0 },
> > -{"vmsle.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMSLEVV,
> MASK_VMSLEVV, match_opcode, 0 },
> > -{"vmsle.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSLEVX,
> MASK_VMSLEVX, match_opcode, 0 },
> > -{"vmsle.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSLEVI,
> MASK_VMSLEVI, match_opcode, 0 },
> > -{"vmsgtu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSGTUVX,
> MASK_VMSGTUVX, match_opcode, 0 },
> > -{"vmsgtu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSGTUVI,
> MASK_VMSGTUVI, match_opcode, 0 },
> > -{"vmsgt.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMSGTVX,
> MASK_VMSGTVX, match_opcode, 0 },
> > -{"vmsgt.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VMSGTVI,
> MASK_VMSGTVI, match_opcode, 0 },
> > -{"vmsgt.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLTVV,
> MASK_VMSLTVV, match_opcode, INSN_ALIAS },
> > -{"vmsgtu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLTUVV,
> MASK_VMSLTUVV, match_opcode, INSN_ALIAS },
> > -{"vmsge.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLEVV,
> MASK_VMSLEVV, match_opcode, INSN_ALIAS },
> > -{"vmsgeu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMSLEUVV,
> MASK_VMSLEUVV, match_opcode, INSN_ALIAS },
> > -{"vmslt.vi",   0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSLEVI,
> MASK_VMSLEVI, match_opcode, INSN_ALIAS },
> > -{"vmsltu.vi",  0, INSN_CLASS_V,  "Vd,Vu,0Vm", MATCH_VMSNEVV,
> MASK_VMSNEVV, match_vs1_eq_vs2, INSN_ALIAS },
> > -{"vmsltu.vi",  0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSLEUVI,
> MASK_VMSLEUVI, match_opcode, INSN_ALIAS },
> > -{"vmsge.vi",   0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSGTVI,
> MASK_VMSGTVI, match_opcode, INSN_ALIAS },
> > -{"vmsgeu.vi",  0, INSN_CLASS_V,  "Vd,Vu,0Vm", MATCH_VMSEQVV,
> MASK_VMSEQVV, match_vs1_eq_vs2, INSN_ALIAS },
> > -{"vmsgeu.vi",  0, INSN_CLASS_V,  "Vd,Vt,VkVm", MATCH_VMSGTUVI,
> MASK_VMSGTUVI, match_opcode, INSN_ALIAS },
> > -
> > -{"vmsge.vx",   0, INSN_CLASS_V, "Vd,Vt,sVm", 0, (int) M_VMSGE,
> match_never, INSN_MACRO },
> > -{"vmsge.vx",   0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 0, (int) M_VMSGE,
> match_never, INSN_MACRO },
> > -{"vmsgeu.vx",  0, INSN_CLASS_V, "Vd,Vt,sVm", 1, (int) M_VMSGE,
> match_never, INSN_MACRO },
> > -{"vmsgeu.vx",  0, INSN_CLASS_V, "Vd,Vt,s,VM,VT", 1, (int) M_VMSGE,
> match_never, INSN_MACRO },
> > -
> > -{"vminu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMINUVV,
> MASK_VMINUVV, match_opcode, 0},
> > -{"vminu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMINUVX,
> MASK_VMINUVX, match_opcode, 0},
> > -{"vmin.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMINVV,
> MASK_VMINVV, match_opcode, 0},
> > -{"vmin.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMINVX,
> MASK_VMINVX, match_opcode, 0},
> > -{"vmaxu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMAXUVV,
> MASK_VMAXUVV, match_opcode, 0},
> > -{"vmaxu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMAXUVX,
> MASK_VMAXUVX, match_opcode, 0},
> > -{"vmax.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMAXVV,
> MASK_VMAXVV, match_opcode, 0},
> > -{"vmax.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMAXVX,
> MASK_VMAXVX, match_opcode, 0},
> > -
> > -{"vmul.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULVV,
> MASK_VMULVV, match_opcode, 0 },
> > -{"vmul.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULVX,
> MASK_VMULVX, match_opcode, 0 },
> > -{"vmulh.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHVV,
> MASK_VMULHVV, match_opcode, 0 },
> > -{"vmulh.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHVX,
> MASK_VMULHVX, match_opcode, 0 },
> > -{"vmulhu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHUVV,
> MASK_VMULHUVV, match_opcode, 0 },
> > -{"vmulhu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHUVX,
> MASK_VMULHUVX, match_opcode, 0 },
> > -{"vmulhsu.vv", 0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VMULHSUVV,
> MASK_VMULHSUVV, match_opcode, 0 },
> > -{"vmulhsu.vx", 0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VMULHSUVX,
> MASK_VMULHSUVX, match_opcode, 0 },
> > -
> > -{"vwmul.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULVV,
> MASK_VWMULVV, match_opcode, 0 },
> > -{"vwmul.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULVX,
> MASK_VWMULVX, match_opcode, 0 },
> > -{"vwmulu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULUVV,
> MASK_VWMULUVV, match_opcode, 0 },
> > -{"vwmulu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULUVX,
> MASK_VWMULUVX, match_opcode, 0 },
> > -{"vwmulsu.vv", 0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VWMULSUVV,
> MASK_VWMULSUVV, match_opcode, 0 },
> > -{"vwmulsu.vx", 0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VWMULSUVX,
> MASK_VWMULSUVX, match_opcode, 0 },
> > -
> > -{"vmacc.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMACCVV,
> MASK_VMACCVV, match_opcode, 0},
> > -{"vmacc.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VMACCVX,
> MASK_VMACCVX, match_opcode, 0},
> > -{"vnmsac.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VNMSACVV,
> MASK_VNMSACVV, match_opcode, 0},
> > -{"vnmsac.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VNMSACVX,
> MASK_VNMSACVX, match_opcode, 0},
> > -{"vmadd.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VMADDVV,
> MASK_VMADDVV, match_opcode, 0},
> > -{"vmadd.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VMADDVX,
> MASK_VMADDVX, match_opcode, 0},
> > -{"vnmsub.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VNMSUBVV,
> MASK_VNMSUBVV, match_opcode, 0},
> > -{"vnmsub.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VNMSUBVX,
> MASK_VNMSUBVX, match_opcode, 0},
> > -
> > -{"vwmaccu.vv",  0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCUVV,
> MASK_VWMACCUVV, match_opcode, 0},
> > -{"vwmaccu.vx",  0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCUVX,
> MASK_VWMACCUVX, match_opcode, 0},
> > -{"vwmacc.vv",   0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCVV,
> MASK_VWMACCVV, match_opcode, 0},
> > -{"vwmacc.vx",   0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCVX,
> MASK_VWMACCVX, match_opcode, 0},
> > +{"vmseq.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMSEQVV, MASK_VMSEQVV, match_opcode, 0 },
> > +{"vmseq.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSEQVX,
> MASK_VMSEQVX, match_opcode, 0 },
> > +{"vmseq.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VMSEQVI, MASK_VMSEQVI, match_opcode, 0 },
> > +{"vmsne.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMSNEVV, MASK_VMSNEVV, match_opcode, 0 },
> > +{"vmsne.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSNEVX,
> MASK_VMSNEVX, match_opcode, 0 },
> > +{"vmsne.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VMSNEVI, MASK_VMSNEVI, match_opcode, 0 },
> > +{"vmsltu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, 0 },
> > +{"vmsltu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VMSLTUVX, MASK_VMSLTUVX, match_opcode, 0 },
> > +{"vmslt.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, 0 },
> > +{"vmslt.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLTVX,
> MASK_VMSLTVX, match_opcode, 0 },
> > +{"vmsleu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, 0 },
> > +{"vmsleu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VMSLEUVX, MASK_VMSLEUVX, match_opcode, 0 },
> > +{"vmsleu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, 0 },
> > +{"vmsle.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, 0 },
> > +{"vmsle.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSLEVX,
> MASK_VMSLEVX, match_opcode, 0 },
> > +{"vmsle.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, 0 },
> > +{"vmsgtu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VMSGTUVX, MASK_VMSGTUVX, match_opcode, 0 },
> > +{"vmsgtu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, 0 },
> > +{"vmsgt.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMSGTVX,
> MASK_VMSGTVX, match_opcode, 0 },
> > +{"vmsgt.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, 0 },
> > +{"vmsgt.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VMSLTVV, MASK_VMSLTVV, match_opcode, INSN_ALIAS },
> > +{"vmsgtu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VMSLTUVV, MASK_VMSLTUVV, match_opcode, INSN_ALIAS },
> > +{"vmsge.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VMSLEVV, MASK_VMSLEVV, match_opcode, INSN_ALIAS },
> > +{"vmsgeu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VMSLEUVV, MASK_VMSLEUVV, match_opcode, INSN_ALIAS },
> > +{"vmslt.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm",
> MATCH_VMSLEVI, MASK_VMSLEVI, match_opcode, INSN_ALIAS },
> > +{"vmsltu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vu,0Vm",
> MATCH_VMSNEVV, MASK_VMSNEVV, match_vs1_eq_vs2, INSN_ALIAS },
> > +{"vmsltu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm",
> MATCH_VMSLEUVI, MASK_VMSLEUVI, match_opcode, INSN_ALIAS },
> > +{"vmsge.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm",
> MATCH_VMSGTVI, MASK_VMSGTVI, match_opcode, INSN_ALIAS },
> > +{"vmsgeu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vu,0Vm",
> MATCH_VMSEQVV, MASK_VMSEQVV, match_vs1_eq_vs2, INSN_ALIAS },
> > +{"vmsgeu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VkVm",
> MATCH_VMSGTUVI, MASK_VMSGTUVI, match_opcode, INSN_ALIAS },
> > +
> > +{"vmsge.vx",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", 0, (int)
> M_VMSGE, match_never, INSN_MACRO },
> > +{"vmsge.vx",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,s,VM,VT", 0, (int)
> M_VMSGE, match_never, INSN_MACRO },
> > +{"vmsgeu.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm", 1, (int)
> M_VMSGE, match_never, INSN_MACRO },
> > +{"vmsgeu.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,s,VM,VT", 1, (int)
> M_VMSGE, match_never, INSN_MACRO },
> > +
> > +{"vminu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMINUVV, MASK_VMINUVV, match_opcode, 0},
> > +{"vminu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMINUVX,
> MASK_VMINUVX, match_opcode, 0},
> > +{"vmin.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMINVV,
> MASK_VMINVV, match_opcode, 0},
> > +{"vmin.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMINVX,
> MASK_VMINVX, match_opcode, 0},
> > +{"vmaxu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMAXUVV, MASK_VMAXUVV, match_opcode, 0},
> > +{"vmaxu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMAXUVX,
> MASK_VMAXUVX, match_opcode, 0},
> > +{"vmax.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMAXVV,
> MASK_VMAXVV, match_opcode, 0},
> > +{"vmax.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMAXVX,
> MASK_VMAXVX, match_opcode, 0},
> > +
> > +{"vmul.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VMULVV,
> MASK_VMULVV, match_opcode, 0 },
> > +{"vmul.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULVX,
> MASK_VMULVX, match_opcode, 0 },
> > +{"vmulh.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMULHVV, MASK_VMULHVV, match_opcode, 0 },
> > +{"vmulh.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VMULHVX,
> MASK_VMULHVX, match_opcode, 0 },
> > +{"vmulhu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMULHUVV, MASK_VMULHUVV, match_opcode, 0 },
> > +{"vmulhu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VMULHUVX, MASK_VMULHUVX, match_opcode, 0 },
> > +{"vmulhsu.vv", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VMULHSUVV, MASK_VMULHSUVV, match_opcode, 0 },
> > +{"vmulhsu.vx", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VMULHSUVX, MASK_VMULHSUVX, match_opcode, 0 },
> > +
> > +{"vwmul.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWMULVV, MASK_VWMULVV, match_opcode, 0 },
> > +{"vwmul.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VWMULVX,
> MASK_VWMULVX, match_opcode, 0 },
> > +{"vwmulu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWMULUVV, MASK_VWMULUVV, match_opcode, 0 },
> > +{"vwmulu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VWMULUVX, MASK_VWMULUVX, match_opcode, 0 },
> > +{"vwmulsu.vv", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VWMULSUVV, MASK_VWMULSUVV, match_opcode, 0 },
> > +{"vwmulsu.vx", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VWMULSUVX, MASK_VWMULSUVX, match_opcode, 0 },
> > +
> > +{"vmacc.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VMACCVV, MASK_VMACCVV, match_opcode, 0},
> > +{"vmacc.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VMACCVX,
> MASK_VMACCVX, match_opcode, 0},
> > +{"vnmsac.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VNMSACVV, MASK_VNMSACVV, match_opcode, 0},
> > +{"vnmsac.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm",
> MATCH_VNMSACVX, MASK_VNMSACVX, match_opcode, 0},
> > +{"vmadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VMADDVV, MASK_VMADDVV, match_opcode, 0},
> > +{"vmadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm", MATCH_VMADDVX,
> MASK_VMADDVX, match_opcode, 0},
> > +{"vnmsub.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VNMSUBVV, MASK_VNMSUBVV, match_opcode, 0},
> > +{"vnmsub.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm",
> MATCH_VNMSUBVX, MASK_VNMSUBVX, match_opcode, 0},
> > +
> > +{"vwmaccu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VWMACCUVV, MASK_VWMACCUVV, match_opcode, 0},
> > +{"vwmaccu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm",
> MATCH_VWMACCUVX, MASK_VWMACCUVX, match_opcode, 0},
> > +{"vwmacc.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VWMACCVV, MASK_VWMACCVV, match_opcode, 0},
> > +{"vwmacc.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s,VtVm",
> MATCH_VWMACCVX, MASK_VWMACCVX, match_opcode, 0},
> >  {"vwmaccsu.vv", 0, INSN_CLASS_V,  "Vd,Vs,VtVm", MATCH_VWMACCSUVV,
> MASK_VWMACCSUVV, match_opcode, 0},
> > +{"vwmaccsu.vv", 0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VWMACCSUVV_ZV, MASK_VWMACCSUVV_ZV, match_opcode, 0},
> >  {"vwmaccsu.vx", 0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCSUVX,
> MASK_VWMACCSUVX, match_opcode, 0},
> > +{"vwmaccsu.vx", 0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm",
> MATCH_VWMACCSUVX_ZV, MASK_VWMACCSUVX_ZV, match_opcode, 0},
> >  {"vwmaccus.vx", 0, INSN_CLASS_V,  "Vd,s,VtVm", MATCH_VWMACCUSVX,
> MASK_VWMACCUSVX, match_opcode, 0},
> > -
> > -{"vdivu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VDIVUVV,
> MASK_VDIVUVV, match_opcode, 0 },
> > -{"vdivu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VDIVUVX,
> MASK_VDIVUVX, match_opcode, 0 },
> > -{"vdiv.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VDIVVV,
> MASK_VDIVVV, match_opcode, 0 },
> > -{"vdiv.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VDIVVX,
> MASK_VDIVVX, match_opcode, 0 },
> > -{"vremu.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VREMUVV,
> MASK_VREMUVV, match_opcode, 0 },
> > -{"vremu.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VREMUVX,
> MASK_VREMUVX, match_opcode, 0 },
> > -{"vrem.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VREMVV,
> MASK_VREMVV, match_opcode, 0 },
> > -{"vrem.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VREMVX,
> MASK_VREMVX, match_opcode, 0 },
> > -
> > -{"vmerge.vvm", 0, INSN_CLASS_V,  "Vd,Vt,Vs,V0", MATCH_VMERGEVVM,
> MASK_VMERGEVVM, match_opcode, 0 },
> > -{"vmerge.vxm", 0, INSN_CLASS_V,  "Vd,Vt,s,V0", MATCH_VMERGEVXM,
> MASK_VMERGEVXM, match_opcode, 0 },
> > -{"vmerge.vim", 0, INSN_CLASS_V,  "Vd,Vt,Vi,V0", MATCH_VMERGEVIM,
> MASK_VMERGEVIM, match_opcode, 0 },
> > -
> > -{"vmv.v.v",    0, INSN_CLASS_V,  "Vd,Vs", MATCH_VMVVV, MASK_VMVVV,
> match_opcode, 0 },
> > -{"vmv.v.x",    0, INSN_CLASS_V,  "Vd,s", MATCH_VMVVX, MASK_VMVVX,
> match_opcode, 0 },
> > -{"vmv.v.i",    0, INSN_CLASS_V,  "Vd,Vi", MATCH_VMVVI, MASK_VMVVI,
> match_opcode, 0 },
> > -
> > -{"vsaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSADDUVV,
> MASK_VSADDUVV, match_opcode, 0 },
> > -{"vsaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSADDUVX,
> MASK_VSADDUVX, match_opcode, 0 },
> > -{"vsaddu.vi",  0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VSADDUVI,
> MASK_VSADDUVI, match_opcode, 0 },
> > -{"vsadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSADDVV,
> MASK_VSADDVV, match_opcode, 0 },
> > -{"vsadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSADDVX,
> MASK_VSADDVX, match_opcode, 0 },
> > -{"vsadd.vi",   0, INSN_CLASS_V,  "Vd,Vt,ViVm", MATCH_VSADDVI,
> MASK_VSADDVI, match_opcode, 0 },
> > -{"vssubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSUBUVV,
> MASK_VSSUBUVV, match_opcode, 0 },
> > -{"vssubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSUBUVX,
> MASK_VSSUBUVX, match_opcode, 0 },
> > -{"vssub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSUBVV,
> MASK_VSSUBVV, match_opcode, 0 },
> > -{"vssub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSUBVX,
> MASK_VSSUBVX, match_opcode, 0 },
> > +{"vwmaccus.vx", 0, INSN_CLASS_XTHEADV, "Vd,s,VtVm",
> MATCH_VWMACCUSVX_ZV, MASK_VWMACCUSVX_ZV, match_opcode, 0},
> > +
> > +{"vdivu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VDIVUVV, MASK_VDIVUVV, match_opcode, 0 },
> > +{"vdivu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VDIVUVX,
> MASK_VDIVUVX, match_opcode, 0 },
> > +{"vdiv.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDIVVV,
> MASK_VDIVVV, match_opcode, 0 },
> > +{"vdiv.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VDIVVX,
> MASK_VDIVVX, match_opcode, 0 },
> > +{"vremu.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VREMUVV, MASK_VREMUVV, match_opcode, 0 },
> > +{"vremu.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VREMUVX,
> MASK_VREMUVX, match_opcode, 0 },
> > +{"vrem.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm", MATCH_VREMVV,
> MASK_VREMVV, match_opcode, 0 },
> > +{"vrem.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VREMVX,
> MASK_VREMVX, match_opcode, 0 },
> > +
> > +{"vmerge.vvm", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vs,V0",
> MATCH_VMERGEVVM, MASK_VMERGEVVM, match_opcode, 0 },
> > +{"vmerge.vxm", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,s,V0",
> MATCH_VMERGEVXM, MASK_VMERGEVXM, match_opcode, 0 },
> > +{"vmerge.vim", 0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,Vi,V0",
> MATCH_VMERGEVIM, MASK_VMERGEVIM, match_opcode, 0 },
> > +
> > +{"vmv.v.v",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vs", MATCH_VMVVV,
> MASK_VMVVV, match_opcode, 0 },
> > +{"vmv.v.x",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,s", MATCH_VMVVX,
> MASK_VMVVX, match_opcode, 0 },
> > +{"vmv.v.i",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vi", MATCH_VMVVI,
> MASK_VMVVI, match_opcode, 0 },
> > +
> > +{"vsaddu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VSADDUVV, MASK_VSADDUVV, match_opcode, 0 },
> > +{"vsaddu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VSADDUVX, MASK_VSADDUVX, match_opcode, 0 },
> > +{"vsaddu.vi",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VSADDUVI, MASK_VSADDUVI, match_opcode, 0 },
> > +{"vsadd.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VSADDVV, MASK_VSADDVV, match_opcode, 0 },
> > +{"vsadd.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSADDVX,
> MASK_VSADDVX, match_opcode, 0 },
> > +{"vsadd.vi",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,ViVm",
> MATCH_VSADDVI, MASK_VSADDVI, match_opcode, 0 },
> > +{"vssubu.vv",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VSSUBUVV, MASK_VSSUBUVV, match_opcode, 0 },
> > +{"vssubu.vx",  0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VSSUBUVX, MASK_VSSUBUVX, match_opcode, 0 },
> > +{"vssub.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VSSUBVV, MASK_VSSUBVV, match_opcode, 0 },
> > +{"vssub.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSSUBVX,
> MASK_VSSUBVX, match_opcode, 0 },
> >
> >  {"vaaddu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VAADDUVV,
> MASK_VAADDUVV, match_opcode, 0 },
> >  {"vaaddu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VAADDUVX,
> MASK_VAADDUVX, match_opcode, 0 },
> >  {"vaadd.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VAADDVV,
> MASK_VAADDVV, match_opcode, 0 },
> > +{"vaadd.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VAADDVV_ZV,
> MASK_VAADDVV_ZV, match_opcode, 0 },
> >  {"vaadd.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VAADDVX,
> MASK_VAADDVX, match_opcode, 0 },
> > +{"vaadd.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VAADDVX_ZV,
> MASK_VAADDVX_ZV, match_opcode, 0 },
> > +{"vaadd.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,ViVm", MATCH_VAADDVI,
> MASK_VAADDVI, match_opcode, 0 },
> >  {"vasubu.vv",  0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VASUBUVV,
> MASK_VASUBUVV, match_opcode, 0 },
> >  {"vasubu.vx",  0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VASUBUVX,
> MASK_VASUBUVX, match_opcode, 0 },
> >  {"vasub.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VASUBVV,
> MASK_VASUBVV, match_opcode, 0 },
> > +{"vasub.vv", 0, INSN_CLASS_XTHEADV, "Vd,Vt,VsVm", MATCH_VASUBVV_ZV,
> MASK_VASUBVV_ZV, match_opcode, 0 },
> >  {"vasub.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VASUBVX,
> MASK_VASUBVX, match_opcode, 0 },
> > +{"vasub.vx", 0, INSN_CLASS_XTHEADV, "Vd,Vt,sVm", MATCH_VASUBVX_ZV,
> MASK_VASUBVX_ZV, match_opcode, 0 },
> >
> > -{"vsmul.vv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSMULVV,
> MASK_VSMULVV, match_opcode, 0 },
> > -{"vsmul.vx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSMULVX,
> MASK_VSMULVX, match_opcode, 0 },
> > +{"vsmul.vv",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VSMULVV, MASK_VSMULVV, match_opcode, 0 },
> > +{"vsmul.vx",   0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm", MATCH_VSMULVX,
> MASK_VSMULVX, match_opcode, 0 },
> >
> > -{"vssrl.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSRLVV,
> MASK_VSSRLVV, match_opcode, 0 },
> > -{"vssrl.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSRLVX,
> MASK_VSSRLVX, match_opcode, 0 },
> > -{"vssrl.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSSRLVI,
> MASK_VSSRLVI, match_opcode, 0 },
> > -{"vssra.vv",    0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VSSRAVV,
> MASK_VSSRAVV, match_opcode, 0 },
> > -{"vssra.vx",    0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VSSRAVX,
> MASK_VSSRAVX, match_opcode, 0 },
> > -{"vssra.vi",    0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VSSRAVI,
> MASK_VSSRAVI, match_opcode, 0 },
> > +{"vssrl.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VSSRLVV, MASK_VSSRLVV, match_opcode, 0 },
> > +{"vssrl.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VSSRLVX, MASK_VSSRLVX, match_opcode, 0 },
> > +{"vssrl.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm",
> MATCH_VSSRLVI, MASK_VSSRLVI, match_opcode, 0 },
> > +{"vssra.vv",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VsVm",
> MATCH_VSSRAVV, MASK_VSSRAVV, match_opcode, 0 },
> > +{"vssra.vx",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,sVm",
> MATCH_VSSRAVX, MASK_VSSRAVX, match_opcode, 0 },
> > +{"vssra.vi",    0, INSN_CLASS_V_OR_XTHEADV,  "Vd,Vt,VjVm",
> MATCH_VSSRAVI, MASK_VSSRAVI, match_opcode, 0 },
> >
> >  {"vnclipu.wv",   0, INSN_CLASS_V,  "Vd,Vt,VsVm", MATCH_VNCLIPUWV,
> MASK_VNCLIPUWV, match_opcode, 0 },
> >  {"vnclipu.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNCLIPUWX,
> MASK_VNCLIPUWX, match_opcode, 0 },
> > @@ -1721,190 +1741,210 @@ const struct riscv_opcode riscv_opcodes[] =
> >  {"vnclip.wx",   0, INSN_CLASS_V,  "Vd,Vt,sVm", MATCH_VNCLIPWX,
> MASK_VNCLIPWX, match_opcode, 0 },
> >  {"vnclip.wi",   0, INSN_CLASS_V,  "Vd,Vt,VjVm", MATCH_VNCLIPWI,
> MASK_VNCLIPWI, match_opcode, 0 },
> >
> > -{"vfadd.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFADDVV,
> MASK_VFADDVV, match_opcode, 0},
> > -{"vfadd.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFADDVF,
> MASK_VFADDVF, match_opcode, 0},
> > -{"vfsub.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSUBVV,
> MASK_VFSUBVV, match_opcode, 0},
> > -{"vfsub.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSUBVF,
> MASK_VFSUBVF, match_opcode, 0},
> > -{"vfrsub.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFRSUBVF,
> MASK_VFRSUBVF, match_opcode, 0},
> > -
> > -{"vfwadd.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWADDVV,
> MASK_VFWADDVV, match_opcode, 0},
> > -{"vfwadd.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWADDVF,
> MASK_VFWADDVF, match_opcode, 0},
> > -{"vfwsub.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWSUBVV,
> MASK_VFWSUBVV, match_opcode, 0},
> > -{"vfwsub.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWSUBVF,
> MASK_VFWSUBVF, match_opcode, 0},
> > -{"vfwadd.wv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWADDWV,
> MASK_VFWADDWV, match_opcode, 0},
> > -{"vfwadd.wf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWADDWF,
> MASK_VFWADDWF, match_opcode, 0},
> > -{"vfwsub.wv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWSUBWV,
> MASK_VFWSUBWV, match_opcode, 0},
> > -{"vfwsub.wf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWSUBWF,
> MASK_VFWSUBWF, match_opcode, 0},
> > -
> > -{"vfmul.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMULVV,
> MASK_VFMULVV, match_opcode, 0},
> > -{"vfmul.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMULVF,
> MASK_VFMULVF, match_opcode, 0},
> > -{"vfdiv.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFDIVVV,
> MASK_VFDIVVV, match_opcode, 0},
> > -{"vfdiv.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFDIVVF,
> MASK_VFDIVVF, match_opcode, 0},
> > -{"vfrdiv.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFRDIVVF,
> MASK_VFRDIVVF, match_opcode, 0},
> > -
> > -{"vfwmul.vv",  0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWMULVV,
> MASK_VFWMULVV, match_opcode, 0},
> > -{"vfwmul.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFWMULVF,
> MASK_VFWMULVF, match_opcode, 0},
> > -
> > -{"vfmadd.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMADDVV,
> MASK_VFMADDVV, match_opcode, 0},
> > -{"vfmadd.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMADDVF,
> MASK_VFMADDVF, match_opcode, 0},
> > -{"vfnmadd.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMADDVV,
> MASK_VFNMADDVV, match_opcode, 0},
> > -{"vfnmadd.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMADDVF,
> MASK_VFNMADDVF, match_opcode, 0},
> > -{"vfmsub.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMSUBVV,
> MASK_VFMSUBVV, match_opcode, 0},
> > -{"vfmsub.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMSUBVF,
> MASK_VFMSUBVF, match_opcode, 0},
> > -{"vfnmsub.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMSUBVV,
> MASK_VFNMSUBVV, match_opcode, 0},
> > -{"vfnmsub.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMSUBVF,
> MASK_VFNMSUBVF, match_opcode, 0},
> > -{"vfmacc.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMACCVV,
> MASK_VFMACCVV, match_opcode, 0},
> > -{"vfmacc.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMACCVF,
> MASK_VFMACCVF, match_opcode, 0},
> > -{"vfnmacc.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMACCVV,
> MASK_VFNMACCVV, match_opcode, 0},
> > -{"vfnmacc.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMACCVF,
> MASK_VFNMACCVF, match_opcode, 0},
> > -{"vfmsac.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFMSACVV,
> MASK_VFMSACVV, match_opcode, 0},
> > -{"vfmsac.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFMSACVF,
> MASK_VFMSACVF, match_opcode, 0},
> > -{"vfnmsac.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFNMSACVV,
> MASK_VFNMSACVV, match_opcode, 0},
> > -{"vfnmsac.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFNMSACVF,
> MASK_VFNMSACVF, match_opcode, 0},
> > -
> > -{"vfwmacc.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWMACCVV,
> MASK_VFWMACCVV, match_opcode, 0},
> > -{"vfwmacc.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWMACCVF,
> MASK_VFWMACCVF, match_opcode, 0},
> > -{"vfwnmacc.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWNMACCVV,
> MASK_VFWNMACCVV, match_opcode, 0},
> > -{"vfwnmacc.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWNMACCVF,
> MASK_VFWNMACCVF, match_opcode, 0},
> > -{"vfwmsac.vv",  0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWMSACVV,
> MASK_VFWMSACVV, match_opcode, 0},
> > -{"vfwmsac.vf",  0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWMSACVF,
> MASK_VFWMSACVF, match_opcode, 0},
> > -{"vfwnmsac.vv", 0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VFWNMSACVV,
> MASK_VFWNMSACVV, match_opcode, 0},
> > -{"vfwnmsac.vf", 0, INSN_CLASS_ZVEF, "Vd,S,VtVm", MATCH_VFWNMSACVF,
> MASK_VFWNMSACVF, match_opcode, 0},
> > +{"vfadd.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFADDVV, MASK_VFADDVV, match_opcode, 0},
> > +{"vfadd.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFADDVF, MASK_VFADDVF, match_opcode, 0},
> > +{"vfsub.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFSUBVV, MASK_VFSUBVV, match_opcode, 0},
> > +{"vfsub.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFSUBVF, MASK_VFSUBVF, match_opcode, 0},
> > +{"vfrsub.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFRSUBVF, MASK_VFRSUBVF, match_opcode, 0},
> > +
> > +{"vfwadd.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFWADDVV, MASK_VFWADDVV, match_opcode, 0},
> > +{"vfwadd.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFWADDVF, MASK_VFWADDVF, match_opcode, 0},
> > +{"vfwsub.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFWSUBVV, MASK_VFWSUBVV, match_opcode, 0},
> > +{"vfwsub.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFWSUBVF, MASK_VFWSUBVF, match_opcode, 0},
> > +{"vfwadd.wv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFWADDWV, MASK_VFWADDWV, match_opcode, 0},
> > +{"vfwadd.wf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFWADDWF, MASK_VFWADDWF, match_opcode, 0},
> > +{"vfwsub.wv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFWSUBWV, MASK_VFWSUBWV, match_opcode, 0},
> > +{"vfwsub.wf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFWSUBWF, MASK_VFWSUBWF, match_opcode, 0},
> > +
> > +{"vfmul.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFMULVV, MASK_VFMULVV, match_opcode, 0},
> > +{"vfmul.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFMULVF, MASK_VFMULVF, match_opcode, 0},
> > +{"vfdiv.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFDIVVV, MASK_VFDIVVV, match_opcode, 0},
> > +{"vfdiv.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFDIVVF, MASK_VFDIVVF, match_opcode, 0},
> > +{"vfrdiv.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFRDIVVF, MASK_VFRDIVVF, match_opcode, 0},
> > +
> > +{"vfwmul.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFWMULVV, MASK_VFWMULVV, match_opcode, 0},
> > +{"vfwmul.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFWMULVF, MASK_VFWMULVF, match_opcode, 0},
> > +
> > +{"vfmadd.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFMADDVV, MASK_VFMADDVV, match_opcode, 0},
> > +{"vfmadd.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFMADDVF, MASK_VFMADDVF, match_opcode, 0},
> > +{"vfnmadd.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFNMADDVV, MASK_VFNMADDVV, match_opcode, 0},
> > +{"vfnmadd.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFNMADDVF, MASK_VFNMADDVF, match_opcode, 0},
> > +{"vfmsub.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFMSUBVV, MASK_VFMSUBVV, match_opcode, 0},
> > +{"vfmsub.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFMSUBVF, MASK_VFMSUBVF, match_opcode, 0},
> > +{"vfnmsub.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFNMSUBVV, MASK_VFNMSUBVV, match_opcode, 0},
> > +{"vfnmsub.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFNMSUBVF, MASK_VFNMSUBVF, match_opcode, 0},
> > +{"vfmacc.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFMACCVV, MASK_VFMACCVV, match_opcode, 0},
> > +{"vfmacc.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFMACCVF, MASK_VFMACCVF, match_opcode, 0},
> > +{"vfnmacc.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFNMACCVV, MASK_VFNMACCVV, match_opcode, 0},
> > +{"vfnmacc.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFNMACCVF, MASK_VFNMACCVF, match_opcode, 0},
> > +{"vfmsac.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFMSACVV, MASK_VFMSACVV, match_opcode, 0},
> > +{"vfmsac.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFMSACVF, MASK_VFMSACVF, match_opcode, 0},
> > +{"vfnmsac.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFNMSACVV, MASK_VFNMSACVV, match_opcode, 0},
> > +{"vfnmsac.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFNMSACVF, MASK_VFNMSACVF, match_opcode, 0},
> > +
> > +{"vfwmacc.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFWMACCVV, MASK_VFWMACCVV, match_opcode, 0},
> > +{"vfwmacc.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFWMACCVF, MASK_VFWMACCVF, match_opcode, 0},
> > +{"vfwnmacc.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFWNMACCVV, MASK_VFWNMACCVV, match_opcode, 0},
> > +{"vfwnmacc.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFWNMACCVF, MASK_VFWNMACCVF, match_opcode, 0},
> > +{"vfwmsac.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFWMSACVV, MASK_VFWMSACVV, match_opcode, 0},
> > +{"vfwmsac.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFWMSACVF, MASK_VFWMSACVF, match_opcode, 0},
> > +{"vfwnmsac.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VFWNMSACVV, MASK_VFWNMSACVV, match_opcode, 0},
> > +{"vfwnmsac.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S,VtVm",
> MATCH_VFWNMSACVF, MASK_VFWNMSACVF, match_opcode, 0},
> >
> >  {"vfsqrt.v",   0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFSQRTV,
> MASK_VFSQRTV, match_opcode, 0},
> > +{"vfsqrt.v", 0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFSQRTV_ZV,
> MASK_VFSQRTV_ZV, match_opcode, 0},
> >  {"vfrsqrt7.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFRSQRT7V,
> MASK_VFRSQRT7V, match_opcode, 0},
> >  {"vfrsqrte7.v",0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFRSQRT7V,
> MASK_VFRSQRT7V, match_opcode, 0},
> >  {"vfrec7.v",   0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFREC7V,
> MASK_VFREC7V, match_opcode, 0},
> >  {"vfrece7.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFREC7V,
> MASK_VFREC7V, match_opcode, 0},
> >  {"vfclass.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCLASSV,
> MASK_VFCLASSV, match_opcode, 0},
> > +{"vfclass.v", 0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFCLASSV_ZV,
> MASK_VFCLASSV_ZV, match_opcode, 0},
> >
> > -{"vfmin.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMINVV,
> MASK_VFMINVV, match_opcode, 0},
> > -{"vfmin.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMINVF,
> MASK_VFMINVF, match_opcode, 0},
> > -{"vfmax.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFMAXVV,
> MASK_VFMAXVV, match_opcode, 0},
> > -{"vfmax.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFMAXVF,
> MASK_VFMAXVF, match_opcode, 0},
> > +{"vfmin.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFMINVV, MASK_VFMINVV, match_opcode, 0},
> > +{"vfmin.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFMINVF, MASK_VFMINVF, match_opcode, 0},
> > +{"vfmax.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFMAXVV, MASK_VFMAXVV, match_opcode, 0},
> > +{"vfmax.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFMAXVF, MASK_VFMAXVF, match_opcode, 0},
> >
> >  {"vfneg.v",    0, INSN_CLASS_ZVEF, "Vd,VuVm", MATCH_VFSGNJNVV,
> MASK_VFSGNJNVV, match_vs1_eq_vs2, INSN_ALIAS },
> >  {"vfabs.v",    0, INSN_CLASS_ZVEF, "Vd,VuVm", MATCH_VFSGNJXVV,
> MASK_VFSGNJXVV, match_vs1_eq_vs2, INSN_ALIAS },
> >
> > -{"vfsgnj.vv",  0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJVV,
> MASK_VFSGNJVV, match_opcode, 0},
> > -{"vfsgnj.vf",  0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJVF,
> MASK_VFSGNJVF, match_opcode, 0},
> > -{"vfsgnjn.vv", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJNVV,
> MASK_VFSGNJNVV, match_opcode, 0},
> > -{"vfsgnjn.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJNVF,
> MASK_VFSGNJNVF, match_opcode, 0},
> > -{"vfsgnjx.vv", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFSGNJXVV,
> MASK_VFSGNJXVV, match_opcode, 0},
> > -{"vfsgnjx.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VFSGNJXVF,
> MASK_VFSGNJXVF, match_opcode, 0},
> > -
> > -{"vmfeq.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFEQVV,
> MASK_VMFEQVV, match_opcode, 0},
> > -{"vmfeq.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFEQVF,
> MASK_VMFEQVF, match_opcode, 0},
> > -{"vmfne.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFNEVV,
> MASK_VMFNEVV, match_opcode, 0},
> > -{"vmfne.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFNEVF,
> MASK_VMFNEVF, match_opcode, 0},
> > -{"vmflt.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFLTVV,
> MASK_VMFLTVV, match_opcode, 0},
> > -{"vmflt.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFLTVF,
> MASK_VMFLTVF, match_opcode, 0},
> > -{"vmfle.vv",   0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VMFLEVV,
> MASK_VMFLEVV, match_opcode, 0},
> > -{"vmfle.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFLEVF,
> MASK_VMFLEVF, match_opcode, 0},
> > -{"vmfgt.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFGTVF,
> MASK_VMFGTVF, match_opcode, 0},
> > -{"vmfge.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm", MATCH_VMFGEVF,
> MASK_VMFGEVF, match_opcode, 0},
> > +{"vfsgnj.vv",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFSGNJVV, MASK_VFSGNJVV, match_opcode, 0},
> > +{"vfsgnj.vf",  0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFSGNJVF, MASK_VFSGNJVF, match_opcode, 0},
> > +{"vfsgnjn.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFSGNJNVV, MASK_VFSGNJNVV, match_opcode, 0},
> > +{"vfsgnjn.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFSGNJNVF, MASK_VFSGNJNVF, match_opcode, 0},
> > +{"vfsgnjx.vv", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFSGNJXVV, MASK_VFSGNJXVV, match_opcode, 0},
> > +{"vfsgnjx.vf", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VFSGNJXVF, MASK_VFSGNJXVF, match_opcode, 0},
> > +
> > +{"vmfeq.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VMFEQVV, MASK_VMFEQVV, match_opcode, 0},
> > +{"vmfeq.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VMFEQVF, MASK_VMFEQVF, match_opcode, 0},
> > +{"vmfne.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VMFNEVV, MASK_VMFNEVV, match_opcode, 0},
> > +{"vmfne.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VMFNEVF, MASK_VMFNEVF, match_opcode, 0},
> > +{"vmflt.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, 0},
> > +{"vmflt.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VMFLTVF, MASK_VMFLTVF, match_opcode, 0},
> > +{"vmfle.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, 0},
> > +{"vmfle.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VMFLEVF, MASK_VMFLEVF, match_opcode, 0},
> > +{"vmfgt.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VMFGTVF, MASK_VMFGTVF, match_opcode, 0},
> > +{"vmfge.vf",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,SVm",
> MATCH_VMFGEVF, MASK_VMFGEVF, match_opcode, 0},
> >
> >  /* These aliases are for assembly but not disassembly.  */
> > -{"vmfgt.vv",    0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VMFLTVV,
> MASK_VMFLTVV, match_opcode, INSN_ALIAS},
> > -{"vmfge.vv",   0, INSN_CLASS_ZVEF, "Vd,Vs,VtVm", MATCH_VMFLEVV,
> MASK_VMFLEVV, match_opcode, INSN_ALIAS},
> > +{"vmfgt.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VMFLTVV, MASK_VMFLTVV, match_opcode, INSN_ALIAS},
> > +{"vmfge.vv",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vs,VtVm",
> MATCH_VMFLEVV, MASK_VMFLEVV, match_opcode, INSN_ALIAS},
> >
> > -{"vfmerge.vfm",0, INSN_CLASS_ZVEF, "Vd,Vt,S,V0", MATCH_VFMERGEVFM,
> MASK_VFMERGEVFM, match_opcode, 0},
> > -{"vfmv.v.f",   0, INSN_CLASS_ZVEF, "Vd,S", MATCH_VFMVVF, MASK_VFMVVF,
> match_opcode, 0 },
> > +{"vfmerge.vfm",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,S,V0",
> MATCH_VFMERGEVFM, MASK_VFMERGEVFM, match_opcode, 0},
> > +{"vfmv.v.f",   0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,S", MATCH_VFMVVF,
> MASK_VFMVVF, match_opcode, 0 },
> >
> >  {"vfcvt.xu.f.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTXUFV,
> MASK_VFCVTXUFV, match_opcode, 0},
> > +{"vfcvt.xu.f.v",     0, INSN_CLASS_XTHEADV, "Vd,VtVm",
> MATCH_VFCVTXUFV_ZV, MASK_VFCVTXUFV_ZV, match_opcode, 0},
> >  {"vfcvt.x.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTXFV,
> MASK_VFCVTXFV, match_opcode, 0},
> > +{"vfcvt.x.f.v",      0, INSN_CLASS_XTHEADV, "Vd,VtVm",
> MATCH_VFCVTXFV_ZV, MASK_VFCVTXFV_ZV, match_opcode, 0},
> >  {"vfcvt.rtz.xu.f.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTRTZXUFV,
> MASK_VFCVTRTZXUFV, match_opcode, 0},
> >  {"vfcvt.rtz.x.f.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTRTZXFV,
> MASK_VFCVTRTZXFV, match_opcode, 0},
> >  {"vfcvt.f.xu.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTFXUV,
> MASK_VFCVTFXUV, match_opcode, 0},
> > +{"vfcvt.f.xu.v",     0, INSN_CLASS_XTHEADV, "Vd,VtVm",
> MATCH_VFCVTFXUV_ZV, MASK_VFCVTFXUV_ZV, match_opcode, 0},
> >  {"vfcvt.f.x.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFCVTFXV,
> MASK_VFCVTFXV, match_opcode, 0},
> > +{"vfcvt.f.x.v",      0, INSN_CLASS_XTHEADV, "Vd,VtVm",
> MATCH_VFCVTFXV_ZV, MASK_VFCVTFXV_ZV, match_opcode, 0},
> >
> >  {"vfwcvt.xu.f.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTXUFV,
> MASK_VFWCVTXUFV, match_opcode, 0},
> > +{"vfwcvt.xu.f.v",     0, INSN_CLASS_XTHEADV,   "Vd,VtVm",
> MATCH_VFWCVTXUFV_ZV, MASK_VFWCVTXUFV_ZV, match_opcode, 0},
> >  {"vfwcvt.x.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTXFV,
> MASK_VFWCVTXFV, match_opcode, 0},
> > +{"vfwcvt.x.f.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm",
> MATCH_VFWCVTXFV_ZV, MASK_VFWCVTXFV_ZV, match_opcode, 0},
> >  {"vfwcvt.rtz.xu.f.v", 0, INSN_CLASS_ZVEF, "Vd,VtVm",
> MATCH_VFWCVTRTZXUFV, MASK_VFWCVTRTZXUFV, match_opcode, 0},
> >  {"vfwcvt.rtz.x.f.v",  0, INSN_CLASS_ZVEF, "Vd,VtVm",
> MATCH_VFWCVTRTZXFV, MASK_VFWCVTRTZXFV, match_opcode, 0},
> >  {"vfwcvt.f.xu.v",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFXUV,
> MASK_VFWCVTFXUV, match_opcode, 0},
> > +{"vfwcvt.f.xu.v",     0, INSN_CLASS_XTHEADV,   "Vd,VtVm",
> MATCH_VFWCVTFXUV_ZV, MASK_VFWCVTFXUV_ZV, match_opcode, 0},
> >  {"vfwcvt.f.x.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFXV,
> MASK_VFWCVTFXV, match_opcode, 0},
> > +{"vfwcvt.f.x.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm",
> MATCH_VFWCVTFXV_ZV, MASK_VFWCVTFXV_ZV, match_opcode, 0},
> >  {"vfwcvt.f.f.v",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFWCVTFFV,
> MASK_VFWCVTFFV, match_opcode, 0},
> > +{"vfwcvt.f.f.v",      0, INSN_CLASS_XTHEADV,   "Vd,VtVm",
> MATCH_VFWCVTFFV_ZV, MASK_VFWCVTFFV_ZV, match_opcode, 0},
> >
> >  {"vfncvt.xu.f.w",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTXUFW,
> MASK_VFNCVTXUFW, match_opcode, 0},
> >  {"vfncvt.x.f.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTXFW,
> MASK_VFNCVTXFW, match_opcode, 0},
> > -{"vfncvt.rtz.xu.f.w", 0, INSN_CLASS_ZVEF, "Vd,VtVm",
> MATCH_VFNCVTRTZXUFW, MASK_VFNCVTRTZXUFW, match_opcode, 0},
> > -{"vfncvt.rtz.x.f.w",  0, INSN_CLASS_ZVEF, "Vd,VtVm",
> MATCH_VFNCVTRTZXFW, MASK_VFNCVTRTZXFW, match_opcode, 0},
> > -{"vfncvt.f.xu.w",     0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFXUW,
> MASK_VFNCVTFXUW, match_opcode, 0},
> > -{"vfncvt.f.x.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFXW,
> MASK_VFNCVTFXW, match_opcode, 0},
> >  {"vfncvt.f.f.w",      0, INSN_CLASS_ZVEF, "Vd,VtVm", MATCH_VFNCVTFFW,
> MASK_VFNCVTFFW, match_opcode, 0},
> >  {"vfncvt.rod.f.f.w",  0, INSN_CLASS_ZVEF, "Vd,VtVm",
> MATCH_VFNCVTRODFFW, MASK_VFNCVTRODFFW, match_opcode, 0},
> >
> > -{"vredsum.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDSUMVS,
> MASK_VREDSUMVS, match_opcode, 0},
> > -{"vredmaxu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMAXUVS,
> MASK_VREDMAXUVS, match_opcode, 0},
> > -{"vredmax.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMAXVS,
> MASK_VREDMAXVS, match_opcode, 0},
> > -{"vredminu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMINUVS,
> MASK_VREDMINUVS, match_opcode, 0},
> > -{"vredmin.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDMINVS,
> MASK_VREDMINVS, match_opcode, 0},
> > -{"vredand.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDANDVS,
> MASK_VREDANDVS, match_opcode, 0},
> > -{"vredor.vs",  0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDORVS,
> MASK_VREDORVS, match_opcode, 0},
> > -{"vredxor.vs", 0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VREDXORVS,
> MASK_VREDXORVS, match_opcode, 0},
> > +{"vredsum.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDSUMVS, MASK_VREDSUMVS, match_opcode, 0},
> > +{"vredmaxu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDMAXUVS, MASK_VREDMAXUVS, match_opcode, 0},
> > +{"vredmax.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDMAXVS, MASK_VREDMAXVS, match_opcode, 0},
> > +{"vredminu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDMINUVS, MASK_VREDMINUVS, match_opcode, 0},
> > +{"vredmin.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDMINVS, MASK_VREDMINVS, match_opcode, 0},
> > +{"vredand.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDANDVS, MASK_VREDANDVS, match_opcode, 0},
> > +{"vredor.vs",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDORVS, MASK_VREDORVS, match_opcode, 0},
> > +{"vredxor.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VREDXORVS, MASK_VREDXORVS, match_opcode, 0},
> >
> > -{"vwredsumu.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VWREDSUMUVS,
> MASK_VWREDSUMUVS, match_opcode, 0},
> > -{"vwredsum.vs",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VWREDSUMVS,
> MASK_VWREDSUMVS, match_opcode, 0},
> > +{"vwredsumu.vs",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VWREDSUMUVS, MASK_VWREDSUMUVS, match_opcode, 0},
> > +{"vwredsum.vs", 0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VWREDSUMVS, MASK_VWREDSUMVS, match_opcode, 0},
> >
> > -{"vfredosum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDOSUMVS,
> MASK_VFREDOSUMVS, match_opcode, 0},
> > +{"vfredosum.vs",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFREDOSUMVS, MASK_VFREDOSUMVS, match_opcode, 0},
> >  {"vfredusum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDUSUMVS,
> MASK_VFREDUSUMVS, match_opcode, 0},
> >  {"vfredsum.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDUSUMVS,
> MASK_VFREDUSUMVS, match_opcode, INSN_ALIAS},
> > -{"vfredmax.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDMAXVS,
> MASK_VFREDMAXVS, match_opcode, 0},
> > -{"vfredmin.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFREDMINVS,
> MASK_VFREDMINVS, match_opcode, 0},
> > +{"vfredsum.vs", 0, INSN_CLASS_XTHEADV,   "Vd,Vt,VsVm",
> MATCH_VFREDUSUMVS, MASK_VFREDUSUMVS, match_opcode, 0},
> > +{"vfredmax.vs", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFREDMAXVS, MASK_VFREDMAXVS, match_opcode, 0},
> > +{"vfredmin.vs", 0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFREDMINVS, MASK_VFREDMINVS, match_opcode, 0},
> >
> > -{"vfwredosum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDOSUMVS,
> MASK_VFWREDOSUMVS, match_opcode, 0},
> > +{"vfwredosum.vs",0, INSN_CLASS_ZVEF_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VFWREDOSUMVS, MASK_VFWREDOSUMVS, match_opcode, 0},
> >  {"vfwredusum.vs",0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS,
> MASK_VFWREDUSUMVS, match_opcode, 0},
> >  {"vfwredsum.vs", 0, INSN_CLASS_ZVEF, "Vd,Vt,VsVm", MATCH_VFWREDUSUMVS,
> MASK_VFWREDUSUMVS, match_opcode, INSN_ALIAS},
> > +{"vfwredsum.vs", 0, INSN_CLASS_XTHEADV,   "Vd,Vt,VsVm",
> MATCH_VFWREDUSUMVS, MASK_VFWREDUSUMVS, match_opcode, 0},
> >
> >  {"vmmv.m",     0, INSN_CLASS_V, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM,
> match_vs1_eq_vs2, INSN_ALIAS},
> > -{"vmcpy.m",    0, INSN_CLASS_V, "Vd,Vu", MATCH_VMANDMM, MASK_VMANDMM,
> match_vs1_eq_vs2, INSN_ALIAS},
> > -{"vmclr.m",    0, INSN_CLASS_V, "Vv", MATCH_VMXORMM, MASK_VMXORMM,
> match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> > -{"vmset.m",    0, INSN_CLASS_V, "Vv", MATCH_VMXNORMM, MASK_VMXNORMM,
> match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> > -{"vmnot.m",    0, INSN_CLASS_V, "Vd,Vu", MATCH_VMNANDMM, MASK_VMNANDMM,
> match_vs1_eq_vs2, INSN_ALIAS},
> > +{"vmcpy.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vu", MATCH_VMANDMM,
> MASK_VMANDMM, match_vs1_eq_vs2, INSN_ALIAS},
> > +{"vmclr.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vv", MATCH_VMXORMM,
> MASK_VMXORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> > +{"vmset.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vv", MATCH_VMXNORMM,
> MASK_VMXNORMM, match_vd_eq_vs1_eq_vs2, INSN_ALIAS},
> > +{"vmnot.m",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vu", MATCH_VMNANDMM,
> MASK_VMNANDMM, match_vs1_eq_vs2, INSN_ALIAS},
> >
> > -{"vmand.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDMM,
> MASK_VMANDMM, match_opcode, 0},
> > -{"vmnand.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMNANDMM,
> MASK_VMNANDMM, match_opcode, 0},
> > +{"vmand.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMANDMM,
> MASK_VMANDMM, match_opcode, 0},
> > +{"vmnand.mm",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMNANDMM,
> MASK_VMNANDMM, match_opcode, 0},
> >  {"vmandn.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDNMM,
> MASK_VMANDNMM, match_opcode, 0},
> >  {"vmandnot.mm",0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMANDNMM,
> MASK_VMANDNMM, match_opcode, INSN_ALIAS},
> > -{"vmxor.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMXORMM,
> MASK_VMXORMM, match_opcode, 0},
> > -{"vmor.mm",    0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORMM, MASK_VMORMM,
> match_opcode, 0},
> > -{"vmnor.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMNORMM,
> MASK_VMNORMM, match_opcode, 0},
> > +{"vmandnot.mm",0, INSN_CLASS_XTHEADV, "Vd,Vt,Vs", MATCH_VMANDNMM,
> MASK_VMANDNMM, match_opcode, 0},
> > +{"vmxor.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMXORMM,
> MASK_VMXORMM, match_opcode, 0},
> > +{"vmor.mm",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMORMM,
> MASK_VMORMM, match_opcode, 0},
> > +{"vmnor.mm",   0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMNORMM,
> MASK_VMNORMM, match_opcode, 0},
> >  {"vmorn.mm",   0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORNMM,
> MASK_VMORNMM, match_opcode, 0},
> >  {"vmornot.mm", 0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMORNMM,
> MASK_VMORNMM, match_opcode, INSN_ALIAS},
> > -{"vmxnor.mm",  0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VMXNORMM,
> MASK_VMXNORMM, match_opcode, 0},
> > +{"vmornot.mm", 0, INSN_CLASS_XTHEADV, "Vd,Vt,Vs", MATCH_VMORNMM,
> MASK_VMORNMM, match_opcode, 0},
> > +{"vmxnor.mm",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs", MATCH_VMXNORMM,
> MASK_VMXNORMM, match_opcode, 0},
> >
> >  {"vcpop.m",    0, INSN_CLASS_V, "d,VtVm", MATCH_VCPOPM, MASK_VCPOPM,
> match_opcode, 0},
> >  {"vpopc.m",    0, INSN_CLASS_V, "d,VtVm", MATCH_VCPOPM, MASK_VCPOPM,
> match_opcode, INSN_ALIAS},
> >  {"vfirst.m",   0, INSN_CLASS_V, "d,VtVm", MATCH_VFIRSTM, MASK_VFIRSTM,
> match_opcode, 0},
> >  {"vmsbf.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSBFM, MASK_VMSBFM,
> match_opcode, 0},
> > +{"vmsbf.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSBFM_ZV,
> MASK_VMSBFM_ZV, match_opcode, 0},
> >  {"vmsif.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSIFM, MASK_VMSIFM,
> match_opcode, 0},
> > +{"vmsif.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSIFM_ZV,
> MASK_VMSIFM_ZV, match_opcode, 0},
> >  {"vmsof.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VMSOFM, MASK_VMSOFM,
> match_opcode, 0},
> > +{"vmsof.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VMSOFM_ZV,
> MASK_VMSOFM_ZV, match_opcode, 0},
> >  {"viota.m",    0, INSN_CLASS_V, "Vd,VtVm", MATCH_VIOTAM, MASK_VIOTAM,
> match_opcode, 0},
> > +{"viota.m",    0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VIOTAM_ZV,
> MASK_VIOTAM_ZV, match_opcode, 0},
> >  {"vid.v",      0, INSN_CLASS_V, "VdVm", MATCH_VIDV, MASK_VIDV,
> match_opcode, 0},
> > +{"vid.v",      0, INSN_CLASS_XTHEADV, "VdVm", MATCH_VIDV_ZV,
> MASK_VIDV_ZV, match_opcode, 0},
> >
> >  {"vmv.x.s",    0, INSN_CLASS_V, "d,Vt", MATCH_VMVXS, MASK_VMVXS,
> match_opcode, 0},
> > +{"vmv.x.s",    0, INSN_CLASS_XTHEADV, "d,Vt", MATCH_VMVXS_ZV,
> MASK_VMVXS_ZV, match_opcode, INSN_ALIAS},
> >  {"vmv.s.x",    0, INSN_CLASS_V, "Vd,s", MATCH_VMVSX, MASK_VMVSX,
> match_opcode, 0},
> > +{"vmv.s.x",    0, INSN_CLASS_XTHEADV, "Vd,s", MATCH_VMVSX_ZV,
> MASK_VMVSX_ZV, match_opcode, 0},
> >
> > -{"vfmv.f.s",   0, INSN_CLASS_ZVEF, "D,Vt", MATCH_VFMVFS, MASK_VFMVFS,
> match_opcode, 0},
> > -{"vfmv.s.f",   0, INSN_CLASS_ZVEF, "Vd,S", MATCH_VFMVSF, MASK_VFMVSF,
> match_opcode, 0},
> > +{"vfmv.f.s",   0, INSN_CLASS_V, "D,Vt", MATCH_VFMVFS, MASK_VFMVFS,
> match_opcode, 0},
> > +{"vfmv.f.s",   0, INSN_CLASS_XTHEADV, "D,Vt", MATCH_VFMVFS_ZV,
> MASK_VFMVFS_ZV, match_opcode, 0},
> > +{"vfmv.s.f",   0, INSN_CLASS_V, "Vd,S", MATCH_VFMVSF, MASK_VFMVSF,
> match_opcode, 0},
> > +{"vfmv.s.f",   0, INSN_CLASS_XTHEADV, "Vd,S", MATCH_VFMVSF_ZV,
> MASK_VFMVSF_ZV, match_opcode, 0},
> >
> > -{"vslideup.vx",0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDEUPVX,
> MASK_VSLIDEUPVX, match_opcode, 0},
> > -{"vslideup.vi",0, INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VSLIDEUPVI,
> MASK_VSLIDEUPVI, match_opcode, 0},
> > -{"vslidedown.vx",0,INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDEDOWNVX,
> MASK_VSLIDEDOWNVX, match_opcode, 0},
> > -{"vslidedown.vi",0,INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VSLIDEDOWNVI,
> MASK_VSLIDEDOWNVI, match_opcode, 0},
> > +{"vslideup.vx",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm",
> MATCH_VSLIDEUPVX, MASK_VSLIDEUPVX, match_opcode, 0},
> > +{"vslideup.vi",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm",
> MATCH_VSLIDEUPVI, MASK_VSLIDEUPVI, match_opcode, 0},
> > +{"vslidedown.vx",0,INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm",
> MATCH_VSLIDEDOWNVX, MASK_VSLIDEDOWNVX, match_opcode, 0},
> > +{"vslidedown.vi",0,INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm",
> MATCH_VSLIDEDOWNVI, MASK_VSLIDEDOWNVI, match_opcode, 0},
> >
> > -{"vslide1up.vx",    0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDE1UPVX,
> MASK_VSLIDE1UPVX, match_opcode, 0},
> > -{"vslide1down.vx",  0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VSLIDE1DOWNVX,
> MASK_VSLIDE1DOWNVX, match_opcode, 0},
> > +{"vslide1up.vx",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm",
> MATCH_VSLIDE1UPVX, MASK_VSLIDE1UPVX, match_opcode, 0},
> > +{"vslide1down.vx",  0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm",
> MATCH_VSLIDE1DOWNVX, MASK_VSLIDE1DOWNVX, match_opcode, 0},
> >  {"vfslide1up.vf",   0, INSN_CLASS_ZVEF, "Vd,Vt,SVm",
> MATCH_VFSLIDE1UPVF, MASK_VFSLIDE1UPVF, match_opcode, 0},
> >  {"vfslide1down.vf", 0, INSN_CLASS_ZVEF, "Vd,Vt,SVm",
> MATCH_VFSLIDE1DOWNVF, MASK_VFSLIDE1DOWNVF, match_opcode, 0},
> >
> > -{"vrgather.vv",    0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VRGATHERVV,
> MASK_VRGATHERVV, match_opcode, 0},
> > -{"vrgather.vx",    0, INSN_CLASS_V, "Vd,Vt,sVm", MATCH_VRGATHERVX,
> MASK_VRGATHERVX, match_opcode, 0},
> > -{"vrgather.vi",    0, INSN_CLASS_V, "Vd,Vt,VjVm", MATCH_VRGATHERVI,
> MASK_VRGATHERVI, match_opcode, 0},
> > +{"vrgather.vv",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VsVm",
> MATCH_VRGATHERVV, MASK_VRGATHERVV, match_opcode, 0},
> > +{"vrgather.vx",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,sVm",
> MATCH_VRGATHERVX, MASK_VRGATHERVX, match_opcode, 0},
> > +{"vrgather.vi",    0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,VjVm",
> MATCH_VRGATHERVI, MASK_VRGATHERVI, match_opcode, 0},
> >  {"vrgatherei16.vv",0, INSN_CLASS_V, "Vd,Vt,VsVm", MATCH_VRGATHEREI16VV,
> MASK_VRGATHEREI16VV, match_opcode, 0},
> >
> > -{"vcompress.vm",0, INSN_CLASS_V, "Vd,Vt,Vs", MATCH_VCOMPRESSVM,
> MASK_VCOMPRESSVM, match_opcode, 0},
> > +{"vcompress.vm",0, INSN_CLASS_V_OR_XTHEADV, "Vd,Vt,Vs",
> MATCH_VCOMPRESSVM, MASK_VCOMPRESSVM, match_opcode, 0},
> >
> >  {"vmv1r.v",    0, INSN_CLASS_V, "Vd,Vt", MATCH_VMV1RV, MASK_VMV1RV,
> match_opcode, 0},
> >  {"vmv2r.v",    0, INSN_CLASS_V, "Vd,Vt", MATCH_VMV2RV, MASK_VMV2RV,
> match_opcode, 0},
> > @@ -1980,6 +2020,424 @@ const struct riscv_opcode riscv_opcodes[] =
> >  {"c.zext.w",  64, INSN_CLASS_ZCB_AND_ZBA, "Cs",  MATCH_C_ZEXT_W,
> MASK_C_ZEXT_W, match_opcode, 0 },
> >  {"c.zext.b",   0, INSN_CLASS_ZCB, "Cs",  MATCH_C_ZEXT_B, MASK_C_ZEXT_B,
> match_opcode, 0 },
> >  {"c.sext.w",  64, INSN_CLASS_ZCB, "d",  MATCH_C_ADDIW,
> MASK_C_ADDIW|MASK_RVC_IMM, match_rd_nonzero, INSN_ALIAS },
> > +/* RVV 0.7 instructions.*/
> > +{"vlb.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLBV,
> MASK_VLBV, match_opcode, INSN_DREF },
> > +{"vlh.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLHV,
> MASK_VLHV, match_opcode, INSN_DREF },
> > +{"vlw.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLWV,
> MASK_VLWV, match_opcode, INSN_DREF },
> > +{"vlbu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE8V,
> MASK_VLE8V, match_opcode, INSN_DREF },
> > +{"vlhu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE16V,
> MASK_VLE16V, match_opcode, INSN_DREF },
> > +{"vlwu.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE32V,
> MASK_VLE32V, match_opcode, INSN_DREF },
> > +{"vle.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE64V,
> MASK_VLE64V, match_opcode, INSN_DREF },
> > +{"vsb.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE8V,
> MASK_VSE8V, match_opcode, INSN_DREF },
> > +{"vsh.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE16V,
> MASK_VSE16V, match_opcode, INSN_DREF },
> > +{"vsw.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE32V,
> MASK_VSE32V, match_opcode, INSN_DREF },
> > +{"vse.v",      0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSE64V,
> MASK_VSE64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSBV,
> MASK_VLSBV, match_opcode, INSN_DREF },
> > +{"vlsh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSHV,
> MASK_VLSHV, match_opcode, INSN_DREF },
> > +{"vlsw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSWV,
> MASK_VLSWV, match_opcode, INSN_DREF },
> > +{"vlsbu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE8V,
> MASK_VLSE8V, match_opcode, INSN_DREF },
> > +{"vlshu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE16V,
> MASK_VLSE16V, match_opcode, INSN_DREF },
> > +{"vlswu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE32V,
> MASK_VLSE32V, match_opcode, INSN_DREF },
> > +{"vlse.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSE64V,
> MASK_VLSE64V, match_opcode, INSN_DREF },
> > +{"vssb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE8V,
> MASK_VSSE8V, match_opcode, INSN_DREF },
> > +{"vssh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE16V,
> MASK_VSSE16V, match_opcode, INSN_DREF },
> > +{"vssw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE32V,
> MASK_VSSE32V, match_opcode, INSN_DREF },
> > +{"vsse.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VSSE64V,
> MASK_VSSE64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXBV,
> MASK_VLXBV, match_opcode, INSN_DREF },
> > +{"vlxh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXHV,
> MASK_VLXHV, match_opcode, INSN_DREF },
> > +{"vlxw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLXWV,
> MASK_VLXWV, match_opcode, INSN_DREF },
> > +{"vlxbu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI8V,
> MASK_VLOXEI8V, match_opcode, INSN_DREF },
> > +{"vlxhu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI16V,
> MASK_VLOXEI16V, match_opcode, INSN_DREF },
> > +{"vlxwu.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI32V,
> MASK_VLOXEI16V, match_opcode, INSN_DREF },
> > +{"vlxe.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VLOXEI64V,
> MASK_VLOXEI16V, match_opcode, INSN_DREF },
> > +{"vsxb.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI8V,
> MASK_VSOXEI8V, match_opcode, INSN_DREF },
> > +{"vsxh.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI16V,
> MASK_VSOXEI16V, match_opcode, INSN_DREF },
> > +{"vsxw.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI32V,
> MASK_VSOXEI32V, match_opcode, INSN_DREF },
> > +{"vsxe.v",     0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSOXEI64V,
> MASK_VSOXEI64V, match_opcode, INSN_DREF },
> > +{"vsuxb.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXBV,
> MASK_VSUXBV, match_opcode, INSN_DREF },
> > +{"vsuxh.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXHV,
> MASK_VSUXHV, match_opcode, INSN_DREF },
> > +{"vsuxw.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXWV,
> MASK_VSUXWV, match_opcode, INSN_DREF },
> > +{"vsuxe.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm", MATCH_VSUXEV,
> MASK_VSUXEV, match_opcode, INSN_DREF },
> > +
> > +{"vlbff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLBFFV,
> MASK_VLBFFV, match_opcode, INSN_DREF },
> > +{"vlhff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLHFFV,
> MASK_VLHFFV, match_opcode, INSN_DREF },
> > +{"vlwff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLWFFV,
> MASK_VLWFFV, match_opcode, INSN_DREF },
> > +{"vlbuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE8FFV,
> MASK_VLE8FFV, match_opcode, INSN_DREF },
> > +{"vlhuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE16FFV,
> MASK_VLE16FFV, match_opcode, INSN_DREF },
> > +{"vlwuff.v",   0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE32FFV,
> MASK_VLE32FFV, match_opcode, INSN_DREF },
> > +{"vleff.v",    0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLE64FFV,
> MASK_VLE64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vlseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2BV,
> MASK_VLSEG2BV, match_opcode, INSN_DREF },
> > +{"vlseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2HV,
> MASK_VLSEG2HV, match_opcode, INSN_DREF },
> > +{"vlseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2WV,
> MASK_VLSEG2WV, match_opcode, INSN_DREF },
> > +{"vlseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E8V,
> MASK_VLSEG2E8V, match_opcode, INSN_DREF },
> > +{"vlseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E16V,
> MASK_VLSEG2E16V, match_opcode, INSN_DREF },
> > +{"vlseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E32V,
> MASK_VLSEG2E32V, match_opcode, INSN_DREF },
> > +{"vlseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2E64V,
> MASK_VLSEG2E64V, match_opcode, INSN_DREF },
> > +{"vsseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E8V,
> MASK_VSSEG2E8V, match_opcode, INSN_DREF },
> > +{"vsseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E16V,
> MASK_VSSEG2E16V, match_opcode, INSN_DREF },
> > +{"vsseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E32V,
> MASK_VSSEG2E32V, match_opcode, INSN_DREF },
> > +{"vsseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG2E64V,
> MASK_VSSEG2E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3BV,
> MASK_VLSEG3BV, match_opcode, INSN_DREF },
> > +{"vlseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3HV,
> MASK_VLSEG3HV, match_opcode, INSN_DREF },
> > +{"vlseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3WV,
> MASK_VLSEG3WV, match_opcode, INSN_DREF },
> > +{"vlseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E8V,
> MASK_VLSEG3E8V, match_opcode, INSN_DREF },
> > +{"vlseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E16V,
> MASK_VLSEG3E16V, match_opcode, INSN_DREF },
> > +{"vlseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32V,
> MASK_VLSEG3E32V, match_opcode, INSN_DREF },
> > +{"vlseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3E32V,
> MASK_VLSEG3E32V, match_opcode, INSN_DREF },
> > +{"vsseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E8V,
> MASK_VSSEG3E8V, match_opcode, INSN_DREF },
> > +{"vsseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E16V,
> MASK_VSSEG3E16V, match_opcode, INSN_DREF },
> > +{"vsseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E32V,
> MASK_VSSEG3E32V, match_opcode, INSN_DREF },
> > +{"vsseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG3E64V,
> MASK_VSSEG3E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4BV,
> MASK_VLSEG4BV, match_opcode, INSN_DREF },
> > +{"vlseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4HV,
> MASK_VLSEG4HV, match_opcode, INSN_DREF },
> > +{"vlseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4WV,
> MASK_VLSEG4WV, match_opcode, INSN_DREF },
> > +{"vlseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E8V,
> MASK_VLSEG4E8V, match_opcode, INSN_DREF },
> > +{"vlseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E16V,
> MASK_VLSEG4E16V, match_opcode, INSN_DREF },
> > +{"vlseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E32V,
> MASK_VLSEG4E32V, match_opcode, INSN_DREF },
> > +{"vlseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4E64V,
> MASK_VLSEG4E64V, match_opcode, INSN_DREF },
> > +{"vsseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E8V,
> MASK_VSSEG4E8V, match_opcode, INSN_DREF },
> > +{"vsseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E16V,
> MASK_VSSEG4E16V, match_opcode, INSN_DREF },
> > +{"vsseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E32V,
> MASK_VSSEG4E32V, match_opcode, INSN_DREF },
> > +{"vsseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG4E64V,
> MASK_VSSEG4E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5BV,
> MASK_VLSEG5BV, match_opcode, INSN_DREF },
> > +{"vlseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5HV,
> MASK_VLSEG5HV, match_opcode, INSN_DREF },
> > +{"vlseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5WV,
> MASK_VLSEG5WV, match_opcode, INSN_DREF },
> > +{"vlseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E8V,
> MASK_VLSEG5E8V, match_opcode, INSN_DREF },
> > +{"vlseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E16V,
> MASK_VLSEG5E16V, match_opcode, INSN_DREF },
> > +{"vlseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E32V,
> MASK_VLSEG5E32V, match_opcode, INSN_DREF },
> > +{"vlseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5E64V,
> MASK_VLSEG5E64V, match_opcode, INSN_DREF },
> > +{"vsseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E8V,
> MASK_VSSEG5E8V, match_opcode, INSN_DREF },
> > +{"vsseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E16V,
> MASK_VSSEG5E16V, match_opcode, INSN_DREF },
> > +{"vsseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E32V,
> MASK_VSSEG5E32V, match_opcode, INSN_DREF },
> > +{"vsseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG5E64V,
> MASK_VSSEG5E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6BV,
> MASK_VLSEG6BV, match_opcode, INSN_DREF },
> > +{"vlseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6HV,
> MASK_VLSEG6HV, match_opcode, INSN_DREF },
> > +{"vlseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6WV,
> MASK_VLSEG6WV, match_opcode, INSN_DREF },
> > +{"vlseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E8V,
> MASK_VLSEG6E8V, match_opcode, INSN_DREF },
> > +{"vlseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E16V,
> MASK_VLSEG6E16V, match_opcode, INSN_DREF },
> > +{"vlseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E32V,
> MASK_VLSEG6E32V, match_opcode, INSN_DREF },
> > +{"vlseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6E64V,
> MASK_VLSEG6E64V, match_opcode, INSN_DREF },
> > +{"vsseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E8V,
> MASK_VSSEG6E8V, match_opcode, INSN_DREF },
> > +{"vsseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E16V,
> MASK_VSSEG6E16V, match_opcode, INSN_DREF },
> > +{"vsseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E32V,
> MASK_VSSEG6E32V, match_opcode, INSN_DREF },
> > +{"vsseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG6E64V,
> MASK_VSSEG6E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7BV,
> MASK_VLSEG7BV, match_opcode, INSN_DREF },
> > +{"vlseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7HV,
> MASK_VLSEG7HV, match_opcode, INSN_DREF },
> > +{"vlseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7WV,
> MASK_VLSEG7WV, match_opcode, INSN_DREF },
> > +{"vlseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E8V,
> MASK_VLSEG7E8V, match_opcode, INSN_DREF },
> > +{"vlseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E16V,
> MASK_VLSEG7E16V, match_opcode, INSN_DREF },
> > +{"vlseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E32V,
> MASK_VLSEG7E32V, match_opcode, INSN_DREF },
> > +{"vlseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7E64V,
> MASK_VLSEG7E64V, match_opcode, INSN_DREF },
> > +{"vsseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E8V,
> MASK_VSSEG7E8V, match_opcode, INSN_DREF },
> > +{"vsseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E16V,
> MASK_VSSEG7E16V, match_opcode, INSN_DREF },
> > +{"vsseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E32V,
> MASK_VSSEG7E32V, match_opcode, INSN_DREF },
> > +{"vsseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG7E64V,
> MASK_VSSEG7E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8BV,
> MASK_VLSEG8BV, match_opcode, INSN_DREF },
> > +{"vlseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8HV,
> MASK_VLSEG8HV, match_opcode, INSN_DREF },
> > +{"vlseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8WV,
> MASK_VLSEG8WV, match_opcode, INSN_DREF },
> > +{"vlseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E8V,
> MASK_VLSEG8E8V, match_opcode, INSN_DREF },
> > +{"vlseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E16V,
> MASK_VLSEG8E16V, match_opcode, INSN_DREF },
> > +{"vlseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E32V,
> MASK_VLSEG8E32V, match_opcode, INSN_DREF },
> > +{"vlseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8E64V,
> MASK_VLSEG8E64V, match_opcode, INSN_DREF },
> > +{"vsseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E8V,
> MASK_VSSEG8E8V, match_opcode, INSN_DREF },
> > +{"vsseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E16V,
> MASK_VSSEG8E16V, match_opcode, INSN_DREF },
> > +{"vsseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E32V,
> MASK_VSSEG8E32V, match_opcode, INSN_DREF },
> > +{"vsseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VSSEG8E64V,
> MASK_VSSEG8E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2BV,
> MASK_VLSSEG2BV, match_opcode, INSN_DREF },
> > +{"vlsseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2HV,
> MASK_VLSSEG2HV, match_opcode, INSN_DREF },
> > +{"vlsseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG2WV,
> MASK_VLSSEG2WV, match_opcode, INSN_DREF },
> > +{"vlsseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG2E8V, MASK_VLSSEG2E8V, match_opcode, INSN_DREF },
> > +{"vlsseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG2E16V, MASK_VLSSEG2E16V, match_opcode, INSN_DREF },
> > +{"vlsseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG2E32V, MASK_VLSSEG2E32V, match_opcode, INSN_DREF },
> > +{"vlsseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG2E64V, MASK_VLSSEG2E64V, match_opcode, INSN_DREF },
> > +{"vssseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG2E8V, MASK_VSSSEG2E8V, match_opcode, INSN_DREF },
> > +{"vssseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG2E16V, MASK_VSSSEG2E16V, match_opcode, INSN_DREF },
> > +{"vssseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG2E32V, MASK_VSSSEG2E32V, match_opcode, INSN_DREF },
> > +{"vssseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG2E64V, MASK_VSSSEG2E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3BV,
> MASK_VLSSEG3BV, match_opcode, INSN_DREF },
> > +{"vlsseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3HV,
> MASK_VLSSEG3HV, match_opcode, INSN_DREF },
> > +{"vlsseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG3WV,
> MASK_VLSSEG3WV, match_opcode, INSN_DREF },
> > +{"vlsseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG3E8V, MASK_VLSSEG3E8V, match_opcode, INSN_DREF },
> > +{"vlsseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG3E16V, MASK_VLSSEG3E16V, match_opcode, INSN_DREF },
> > +{"vlsseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG3E32V, MASK_VLSSEG3E32V, match_opcode, INSN_DREF },
> > +{"vlsseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG3E64V, MASK_VLSSEG3E64V, match_opcode, INSN_DREF },
> > +{"vssseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG3E8V, MASK_VSSSEG3E8V, match_opcode, INSN_DREF },
> > +{"vssseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG3E16V, MASK_VSSSEG3E16V, match_opcode, INSN_DREF },
> > +{"vssseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG3E32V, MASK_VSSSEG3E32V, match_opcode, INSN_DREF },
> > +{"vssseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG3E64V, MASK_VSSSEG3E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4BV,
> MASK_VLSSEG4BV, match_opcode, INSN_DREF },
> > +{"vlsseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4HV,
> MASK_VLSSEG4HV, match_opcode, INSN_DREF },
> > +{"vlsseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG4WV,
> MASK_VLSSEG4WV, match_opcode, INSN_DREF },
> > +{"vlsseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG4E8V, MASK_VLSSEG4E8V, match_opcode, INSN_DREF },
> > +{"vlsseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG4E16V, MASK_VLSSEG4E16V, match_opcode, INSN_DREF },
> > +{"vlsseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG4E32V, MASK_VLSSEG4E32V, match_opcode, INSN_DREF },
> > +{"vlsseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG4E64V, MASK_VLSSEG4E64V, match_opcode, INSN_DREF },
> > +{"vssseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG4E8V, MASK_VSSSEG4E8V, match_opcode, INSN_DREF },
> > +{"vssseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG4E16V, MASK_VSSSEG4E16V, match_opcode, INSN_DREF },
> > +{"vssseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG4E32V, MASK_VSSSEG4E32V, match_opcode, INSN_DREF },
> > +{"vssseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG4E64V, MASK_VSSSEG4E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5BV,
> MASK_VLSSEG5BV, match_opcode, INSN_DREF },
> > +{"vlsseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5HV,
> MASK_VLSSEG5HV, match_opcode, INSN_DREF },
> > +{"vlsseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG5WV,
> MASK_VLSSEG5WV, match_opcode, INSN_DREF },
> > +{"vlsseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG5E8V, MASK_VLSSEG5E8V, match_opcode, INSN_DREF },
> > +{"vlsseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG5E16V, MASK_VLSSEG5E16V, match_opcode, INSN_DREF },
> > +{"vlsseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG5E32V, MASK_VLSSEG5E32V, match_opcode, INSN_DREF },
> > +{"vlsseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG5E64V, MASK_VLSSEG5E64V, match_opcode, INSN_DREF },
> > +{"vssseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG5E8V, MASK_VSSSEG5E8V, match_opcode, INSN_DREF },
> > +{"vssseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG5E16V, MASK_VSSSEG5E16V, match_opcode, INSN_DREF },
> > +{"vssseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG5E32V, MASK_VSSSEG5E32V, match_opcode, INSN_DREF },
> > +{"vssseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG5E64V, MASK_VSSSEG5E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6BV,
> MASK_VLSSEG6BV, match_opcode, INSN_DREF },
> > +{"vlsseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6HV,
> MASK_VLSSEG6HV, match_opcode, INSN_DREF },
> > +{"vlsseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG6WV,
> MASK_VLSSEG6WV, match_opcode, INSN_DREF },
> > +{"vlsseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG6E8V, MASK_VLSSEG6E8V, match_opcode, INSN_DREF },
> > +{"vlsseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG6E16V, MASK_VLSSEG6E16V, match_opcode, INSN_DREF },
> > +{"vlsseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG6E32V, MASK_VLSSEG6E32V, match_opcode, INSN_DREF },
> > +{"vlsseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG6E64V, MASK_VLSSEG6E64V, match_opcode, INSN_DREF },
> > +{"vssseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG6E8V, MASK_VSSSEG6E8V, match_opcode, INSN_DREF },
> > +{"vssseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG6E16V, MASK_VSSSEG6E16V, match_opcode, INSN_DREF },
> > +{"vssseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG6E32V, MASK_VSSSEG6E32V, match_opcode, INSN_DREF },
> > +{"vssseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG6E64V, MASK_VSSSEG6E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7BV,
> MASK_VLSSEG7BV, match_opcode, INSN_DREF },
> > +{"vlsseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7HV,
> MASK_VLSSEG7HV, match_opcode, INSN_DREF },
> > +{"vlsseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG7WV,
> MASK_VLSSEG7WV, match_opcode, INSN_DREF },
> > +{"vlsseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG7E8V, MASK_VLSSEG7E8V, match_opcode, INSN_DREF },
> > +{"vlsseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG7E16V, MASK_VLSSEG7E16V, match_opcode, INSN_DREF },
> > +{"vlsseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG7E32V, MASK_VLSSEG7E32V, match_opcode, INSN_DREF },
> > +{"vlsseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG7E64V, MASK_VLSSEG7E64V, match_opcode, INSN_DREF },
> > +{"vssseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG7E8V, MASK_VSSSEG7E8V, match_opcode, INSN_DREF },
> > +{"vssseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG7E16V, MASK_VSSSEG7E16V, match_opcode, INSN_DREF },
> > +{"vssseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG7E32V, MASK_VSSSEG7E32V, match_opcode, INSN_DREF },
> > +{"vssseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG7E64V, MASK_VSSSEG7E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlsseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8BV,
> MASK_VLSSEG8BV, match_opcode, INSN_DREF },
> > +{"vlsseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8HV,
> MASK_VLSSEG8HV, match_opcode, INSN_DREF },
> > +{"vlsseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm", MATCH_VLSSEG8WV,
> MASK_VLSSEG8WV, match_opcode, INSN_DREF },
> > +{"vlsseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG8E8V, MASK_VLSSEG8E8V, match_opcode, INSN_DREF },
> > +{"vlsseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG8E16V, MASK_VLSSEG8E16V, match_opcode, INSN_DREF },
> > +{"vlsseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG8E32V, MASK_VLSSEG8E32V, match_opcode, INSN_DREF },
> > +{"vlsseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VLSSEG8E64V, MASK_VLSSEG8E64V, match_opcode, INSN_DREF },
> > +{"vssseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG8E8V, MASK_VSSSEG8E8V, match_opcode, INSN_DREF },
> > +{"vssseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG8E16V, MASK_VSSSEG8E16V, match_opcode, INSN_DREF },
> > +{"vssseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG8E32V, MASK_VSSSEG8E32V, match_opcode, INSN_DREF },
> > +{"vssseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),tVm",
> MATCH_VSSSEG8E64V, MASK_VSSSEG8E64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG2BV, MASK_VLXSEG2BV, match_opcode, INSN_DREF },
> > +{"vlxseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG2HV, MASK_VLXSEG2HV, match_opcode, INSN_DREF },
> > +{"vlxseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG2WV, MASK_VLXSEG2WV, match_opcode, INSN_DREF },
> > +{"vlxseg2bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG2EI8V, MASK_VLOXSEG2EI8V, match_opcode, INSN_DREF },
> > +{"vlxseg2hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG2EI16V, MASK_VLOXSEG2EI16V, match_opcode, INSN_DREF },
> > +{"vlxseg2wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG2EI32V, MASK_VLOXSEG2EI32V, match_opcode, INSN_DREF },
> > +{"vlxseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG2EI64V, MASK_VLOXSEG2EI64V, match_opcode, INSN_DREF },
> > +{"vsxseg2b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG2EI8V, MASK_VSOXSEG2EI8V, match_opcode, INSN_DREF },
> > +{"vsxseg2h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG2EI16V, MASK_VSOXSEG2EI16V, match_opcode, INSN_DREF },
> > +{"vsxseg2w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG2EI32V, MASK_VSOXSEG2EI32V, match_opcode, INSN_DREF },
> > +{"vsxseg2e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG2EI64V, MASK_VSOXSEG2EI64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG3BV, MASK_VLXSEG3BV, match_opcode, INSN_DREF },
> > +{"vlxseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG3HV, MASK_VLXSEG3HV, match_opcode, INSN_DREF },
> > +{"vlxseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG3WV, MASK_VLXSEG3WV, match_opcode, INSN_DREF },
> > +{"vlxseg3bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG3EI8V, MASK_VLOXSEG3EI8V, match_opcode, INSN_DREF },
> > +{"vlxseg3hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG3EI16V, MASK_VLOXSEG3EI16V, match_opcode, INSN_DREF },
> > +{"vlxseg3wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG3EI32V, MASK_VLOXSEG3EI32V, match_opcode, INSN_DREF },
> > +{"vlxseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG3EI64V, MASK_VLOXSEG3EI64V, match_opcode, INSN_DREF },
> > +{"vsxseg3b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG3EI8V, MASK_VSOXSEG3EI8V, match_opcode, INSN_DREF },
> > +{"vsxseg3h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG3EI16V, MASK_VSOXSEG3EI16V, match_opcode, INSN_DREF },
> > +{"vsxseg3w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG3EI32V, MASK_VSOXSEG3EI32V, match_opcode, INSN_DREF },
> > +{"vsxseg3e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG3EI64V, MASK_VSOXSEG3EI64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG4BV, MASK_VLXSEG4BV, match_opcode, INSN_DREF },
> > +{"vlxseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG4HV, MASK_VLXSEG4HV, match_opcode, INSN_DREF },
> > +{"vlxseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG4WV, MASK_VLXSEG4WV, match_opcode, INSN_DREF },
> > +{"vlxseg4bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG4EI8V, MASK_VLOXSEG4EI8V, match_opcode, INSN_DREF },
> > +{"vlxseg4hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG4EI16V, MASK_VLOXSEG4EI16V, match_opcode, INSN_DREF },
> > +{"vlxseg4wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG4EI32V, MASK_VLOXSEG4EI32V, match_opcode, INSN_DREF },
> > +{"vlxseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG4EI64V, MASK_VLOXSEG4EI64V, match_opcode, INSN_DREF },
> > +{"vsxseg4b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG4EI8V, MASK_VSOXSEG4EI8V, match_opcode, INSN_DREF },
> > +{"vsxseg4h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG4EI16V, MASK_VSOXSEG4EI16V, match_opcode, INSN_DREF },
> > +{"vsxseg4w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG4EI32V, MASK_VSOXSEG4EI32V, match_opcode, INSN_DREF },
> > +{"vsxseg4e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG4EI64V, MASK_VSOXSEG4EI64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG5BV, MASK_VLXSEG5BV, match_opcode, INSN_DREF },
> > +{"vlxseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG5HV, MASK_VLXSEG5HV, match_opcode, INSN_DREF },
> > +{"vlxseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG5WV, MASK_VLXSEG5WV, match_opcode, INSN_DREF },
> > +{"vlxseg5bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG5EI8V, MASK_VLOXSEG5EI8V, match_opcode, INSN_DREF },
> > +{"vlxseg5hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG5EI16V, MASK_VLOXSEG5EI16V, match_opcode, INSN_DREF },
> > +{"vlxseg5wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG5EI32V, MASK_VLOXSEG5EI32V, match_opcode, INSN_DREF },
> > +{"vlxseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG5EI64V, MASK_VLOXSEG5EI64V, match_opcode, INSN_DREF },
> > +{"vsxseg5b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG5EI8V, MASK_VSOXSEG5EI8V, match_opcode, INSN_DREF },
> > +{"vsxseg5h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG5EI16V, MASK_VSOXSEG5EI16V, match_opcode, INSN_DREF },
> > +{"vsxseg5w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG5EI32V, MASK_VSOXSEG5EI32V, match_opcode, INSN_DREF },
> > +{"vsxseg5e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG5EI64V, MASK_VSOXSEG5EI64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG6BV, MASK_VLXSEG6BV, match_opcode, INSN_DREF },
> > +{"vlxseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG6HV, MASK_VLXSEG6HV, match_opcode, INSN_DREF },
> > +{"vlxseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG6WV, MASK_VLXSEG6WV, match_opcode, INSN_DREF },
> > +{"vlxseg6bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG6EI8V, MASK_VLOXSEG6EI8V, match_opcode, INSN_DREF },
> > +{"vlxseg6hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG6EI16V, MASK_VLOXSEG6EI16V, match_opcode, INSN_DREF },
> > +{"vlxseg6wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG6EI32V, MASK_VLOXSEG6EI32V, match_opcode, INSN_DREF },
> > +{"vlxseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG6EI64V, MASK_VLOXSEG6EI64V, match_opcode, INSN_DREF },
> > +{"vsxseg6b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG6EI8V, MASK_VSOXSEG6EI8V, match_opcode, INSN_DREF },
> > +{"vsxseg6h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG6EI16V, MASK_VSOXSEG6EI16V, match_opcode, INSN_DREF },
> > +{"vsxseg6w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG6EI32V, MASK_VSOXSEG6EI32V, match_opcode, INSN_DREF },
> > +{"vsxseg6e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG6EI64V, MASK_VSOXSEG6EI64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG7BV, MASK_VLXSEG7BV, match_opcode, INSN_DREF },
> > +{"vlxseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG7HV, MASK_VLXSEG7HV, match_opcode, INSN_DREF },
> > +{"vlxseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG7WV, MASK_VLXSEG7WV, match_opcode, INSN_DREF },
> > +{"vlxseg7bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG7EI8V, MASK_VLOXSEG7EI8V, match_opcode, INSN_DREF },
> > +{"vlxseg7hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG7EI16V, MASK_VLOXSEG7EI16V, match_opcode, INSN_DREF },
> > +{"vlxseg7wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG7EI32V, MASK_VLOXSEG7EI32V, match_opcode, INSN_DREF },
> > +{"vlxseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG7EI64V, MASK_VLOXSEG7EI64V, match_opcode, INSN_DREF },
> > +{"vsxseg7b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG7EI8V, MASK_VSOXSEG7EI8V, match_opcode, INSN_DREF },
> > +{"vsxseg7h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG7EI16V, MASK_VSOXSEG7EI16V, match_opcode, INSN_DREF },
> > +{"vsxseg7w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG7EI32V, MASK_VSOXSEG7EI32V, match_opcode, INSN_DREF },
> > +{"vsxseg7e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG7EI64V, MASK_VSOXSEG7EI64V, match_opcode, INSN_DREF },
> > +
> > +{"vlxseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG8BV, MASK_VLXSEG8BV, match_opcode, INSN_DREF },
> > +{"vlxseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG8HV, MASK_VLXSEG8HV, match_opcode, INSN_DREF },
> > +{"vlxseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLXSEG8WV, MASK_VLXSEG8WV, match_opcode, INSN_DREF },
> > +{"vlxseg8bu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG8EI8V, MASK_VLOXSEG8EI8V, match_opcode, INSN_DREF },
> > +{"vlxseg8hu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG8EI16V, MASK_VLOXSEG8EI16V, match_opcode, INSN_DREF },
> > +{"vlxseg8wu.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG8EI32V, MASK_VLOXSEG8EI32V, match_opcode, INSN_DREF },
> > +{"vlxseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VLOXSEG8EI64V, MASK_VLOXSEG8EI64V, match_opcode, INSN_DREF },
> > +{"vsxseg8b.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG8EI8V, MASK_VSOXSEG8EI8V, match_opcode, INSN_DREF },
> > +{"vsxseg8h.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG8EI16V, MASK_VSOXSEG8EI16V, match_opcode, INSN_DREF },
> > +{"vsxseg8w.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG8EI32V, MASK_VSOXSEG8EI32V, match_opcode, INSN_DREF },
> > +{"vsxseg8e.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s),VtVm",
> MATCH_VSOXSEG8EI64V, MASK_VSOXSEG8EI64V, match_opcode, INSN_DREF },
> > +
> > +{"vlseg2bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2BFFV,
> MASK_VLSEG2BFFV, match_opcode, INSN_DREF },
> > +{"vlseg2hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2HFFV,
> MASK_VLSEG2HFFV, match_opcode, INSN_DREF },
> > +{"vlseg2wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG2WFFV,
> MASK_VLSEG2WFFV, match_opcode, INSN_DREF },
> > +{"vlseg2buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG2E8FFV, MASK_VLSEG2E8FFV, match_opcode, INSN_DREF },
> > +{"vlseg2huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG2E16FFV, MASK_VLSEG2E16FFV, match_opcode, INSN_DREF },
> > +{"vlseg2wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG2E32FFV, MASK_VLSEG2E32FFV, match_opcode, INSN_DREF },
> > +{"vlseg2eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG2E64FFV, MASK_VLSEG2E64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vlseg3bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3BFFV,
> MASK_VLSEG3BFFV, match_opcode, INSN_DREF },
> > +{"vlseg3hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3HFFV,
> MASK_VLSEG3HFFV, match_opcode, INSN_DREF },
> > +{"vlseg3wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG3WFFV,
> MASK_VLSEG3WFFV, match_opcode, INSN_DREF },
> > +{"vlseg3buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG3E8FFV, MASK_VLSEG3E8FFV, match_opcode, INSN_DREF },
> > +{"vlseg3huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG3E16FFV, MASK_VLSEG3E16FFV, match_opcode, INSN_DREF },
> > +{"vlseg3wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG3E32FFV, MASK_VLSEG3E32FFV, match_opcode, INSN_DREF },
> > +{"vlseg3eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG3E64FFV, MASK_VLSEG3E64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vlseg4bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4BFFV,
> MASK_VLSEG4BFFV, match_opcode, INSN_DREF },
> > +{"vlseg4hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4HFFV,
> MASK_VLSEG4HFFV, match_opcode, INSN_DREF },
> > +{"vlseg4wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG4WFFV,
> MASK_VLSEG4WFFV, match_opcode, INSN_DREF },
> > +{"vlseg4buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG4E8FFV, MASK_VLSEG4E8FFV, match_opcode, INSN_DREF },
> > +{"vlseg4huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG4E16FFV, MASK_VLSEG4E16FFV, match_opcode, INSN_DREF },
> > +{"vlseg4wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG4E32FFV, MASK_VLSEG4E32FFV, match_opcode, INSN_DREF },
> > +{"vlseg4eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG4E64FFV, MASK_VLSEG4E64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vlseg5bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5BFFV,
> MASK_VLSEG5BFFV, match_opcode, INSN_DREF },
> > +{"vlseg5hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5HFFV,
> MASK_VLSEG5HFFV, match_opcode, INSN_DREF },
> > +{"vlseg5wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG5WFFV,
> MASK_VLSEG5WFFV, match_opcode, INSN_DREF },
> > +{"vlseg5buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG5E8FFV, MASK_VLSEG5E8FFV, match_opcode, INSN_DREF },
> > +{"vlseg5huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG5E16FFV, MASK_VLSEG5E16FFV, match_opcode, INSN_DREF },
> > +{"vlseg5wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG5E32FFV, MASK_VLSEG5E32FFV, match_opcode, INSN_DREF },
> > +{"vlseg5eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG5E64FFV, MASK_VLSEG5E64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vlseg6bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6BFFV,
> MASK_VLSEG6BFFV, match_opcode, INSN_DREF },
> > +{"vlseg6hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6HFFV,
> MASK_VLSEG6HFFV, match_opcode, INSN_DREF },
> > +{"vlseg6wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG6WFFV,
> MASK_VLSEG6WFFV, match_opcode, INSN_DREF },
> > +{"vlseg6buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG6E8FFV, MASK_VLSEG6E8FFV, match_opcode, INSN_DREF },
> > +{"vlseg6huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG6E16FFV, MASK_VLSEG6E16FFV, match_opcode, INSN_DREF },
> > +{"vlseg6wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG6E32FFV, MASK_VLSEG6E32FFV, match_opcode, INSN_DREF },
> > +{"vlseg6eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG6E64FFV, MASK_VLSEG6E64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vlseg7bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7BFFV,
> MASK_VLSEG7BFFV, match_opcode, INSN_DREF },
> > +{"vlseg7hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7HFFV,
> MASK_VLSEG7HFFV, match_opcode, INSN_DREF },
> > +{"vlseg7wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG7WFFV,
> MASK_VLSEG7WFFV, match_opcode, INSN_DREF },
> > +{"vlseg7buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG7E8FFV, MASK_VLSEG7E8FFV, match_opcode, INSN_DREF },
> > +{"vlseg7huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG7E16FFV, MASK_VLSEG7E16FFV, match_opcode, INSN_DREF },
> > +{"vlseg7wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG7E32FFV, MASK_VLSEG7E32FFV, match_opcode, INSN_DREF },
> > +{"vlseg7eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG7E64FFV, MASK_VLSEG7E64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vlseg8bff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8BFFV,
> MASK_VLSEG8BFFV, match_opcode, INSN_DREF },
> > +{"vlseg8hff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8HFFV,
> MASK_VLSEG8HFFV, match_opcode, INSN_DREF },
> > +{"vlseg8wff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm", MATCH_VLSEG8WFFV,
> MASK_VLSEG8WFFV, match_opcode, INSN_DREF },
> > +{"vlseg8buff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG8E8FFV, MASK_VLSEG8E8FFV, match_opcode, INSN_DREF },
> > +{"vlseg8huff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG8E16FFV, MASK_VLSEG8E16FFV, match_opcode, INSN_DREF },
> > +{"vlseg8wuff.v", 0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG8E32FFV, MASK_VLSEG8E32FFV, match_opcode, INSN_DREF },
> > +{"vlseg8eff.v",  0, INSN_CLASS_XTHEADV,  "Vd,0(s)Vm",
> MATCH_VLSEG8E64FFV, MASK_VLSEG8E64FFV, match_opcode, INSN_DREF },
> > +
> > +{"vnsrl.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNSRLVV,
> MASK_VNSRLVV, match_opcode, 0 },
> > +{"vnsrl.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNSRLVX,
> MASK_VNSRLVX, match_opcode, 0 },
> > +{"vnsrl.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNSRLVI,
> MASK_VNSRLVI, match_opcode, 0 },
> > +{"vnsra.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNSRAVV,
> MASK_VNSRAVV, match_opcode, 0 },
> > +{"vnsra.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNSRAVX,
> MASK_VNSRAVX, match_opcode, 0 },
> > +{"vnsra.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNSRAVI,
> MASK_VNSRAVI, match_opcode, 0 },
> > +
> > +{"vwsmaccu.vv", 0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCUVV,
> MASK_VWSMACCUVV, match_opcode, 0 },
> > +{"vwsmaccu.vx", 0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCUVX,
> MASK_VWSMACCUVX, match_opcode, 0 },
> > +{"vwsmacc.vv",  0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm", MATCH_VWSMACCVV,
> MASK_VWSMACCVV, match_opcode, 0 },
> > +{"vwsmacc.vx",  0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCVX,
> MASK_VWSMACCVX, match_opcode, 0 },
> > +{"vwsmaccsu.vv",0, INSN_CLASS_XTHEADV,  "Vd,Vs,VtVm",
> MATCH_VWSMACCSUVV, MASK_VWSMACCSUVV, match_opcode, 0 },
> > +{"vwsmaccsu.vx",0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCSUVX,
> MASK_VWSMACCSUVX, match_opcode, 0 },
> > +{"vwsmaccus.vx",0, INSN_CLASS_XTHEADV,  "Vd,s,VtVm", MATCH_VWSMACCUSVX,
> MASK_VWSMACCUSVX, match_opcode, 0 },
> > +
> > +{"vnclipu.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNCLIPUVV,
> MASK_VNCLIPUVV, match_opcode, 0 },
> > +{"vnclipu.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNCLIPUVX,
> MASK_VNCLIPUVX, match_opcode, 0 },
> > +{"vnclipu.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm",
> MATCH_VNCLIPUVI, MASK_VNCLIPUVI, match_opcode, 0 },
> > +{"vnclip.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VNCLIPVV,
> MASK_VNCLIPVV, match_opcode, 0 },
> > +{"vnclip.vx",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,sVm", MATCH_VNCLIPVX,
> MASK_VNCLIPVX, match_opcode, 0 },
> > +{"vnclip.vi",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VjVm", MATCH_VNCLIPVI,
> MASK_VNCLIPVI, match_opcode, 0 },
> > +
> > +{"vmford.vv",  0, INSN_CLASS_XTHEADV, "Vd,Vt,VsVm", MATCH_VMFORDVV,
> MASK_VMFORDVV, match_opcode, 0},
> > +{"vmford.vf",  0, INSN_CLASS_XTHEADV, "Vd,Vt,SVm", MATCH_VMFORDVF,
> MASK_VMFORDVF, match_opcode, 0},
> > +
> > +{"vfncvt.xu.f.v",0,INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTXUFV,
> MASK_VFNCVTXUFV, match_opcode, 0},
> > +{"vfncvt.x.f.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTXFV,
> MASK_VFNCVTXFV, match_opcode, 0},
> > +{"vfncvt.f.xu.v",0,INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFXUV,
> MASK_VFNCVTFXUV, match_opcode, 0},
> > +{"vfncvt.f.x.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFXV,
> MASK_VFNCVTFXV, match_opcode, 0},
> > +{"vfncvt.f.f.v",0, INSN_CLASS_XTHEADV, "Vd,VtVm", MATCH_VFNCVTFFV,
> MASK_VFNCVTFFV, match_opcode, 0},
> > +
> > +{"vmpopc.m",   0, INSN_CLASS_XTHEADV, "d,VtVm", MATCH_VMPOPCM,
> MASK_VMPOPCM, match_opcode, 0 },
> > +{"vmfirst.m",  0, INSN_CLASS_XTHEADV, "d,VtVm", MATCH_VMFIRSTM,
> MASK_VMFIRSTM, match_opcode, 0},
> > +
> > +{"vext.x.v",   0, INSN_CLASS_XTHEADV, "d,Vt,s", MATCH_VEXTXV,
> MASK_VEXTXV, match_opcode, 0},
> > +
> > +{"vdot.vv",    0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDOTVV,
> MASK_VDOTVV, match_opcode, 0},
> > +{"vdotu.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VDOTUVV,
> MASK_VDOTUVV, match_opcode, 0},
> > +{"vfdot.vv",   0, INSN_CLASS_XTHEADV,  "Vd,Vt,VsVm", MATCH_VFDOTVV,
> MASK_VFDOTVV, match_opcode, 0},
> > +
> > +/* Zvamo instructions.  */
> > +{"vamoaddw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOADDWV, MASK_VAMOADDWV, match_opcode, INSN_DREF},
> > +{"vamoaddd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOADDDV, MASK_VAMOADDDV, match_opcode, INSN_DREF},
> > +{"vamoswapw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOSWAPWV, MASK_VAMOSWAPWV, match_opcode, INSN_DREF},
> > +{"vamoswapd.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOSWAPDV, MASK_VAMOSWAPDV, match_opcode, INSN_DREF},
> > +
> > +{"vamoxorw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOXORWV, MASK_VAMOXORWV, match_opcode, INSN_DREF},
> > +{"vamoxord.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOXORDV, MASK_VAMOXORDV, match_opcode, INSN_DREF},
> > +{"vamoandw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOANDWV, MASK_VAMOANDWV, match_opcode, INSN_DREF},
> > +{"vamoandd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOANDDV, MASK_VAMOANDDV, match_opcode, INSN_DREF},
> > +{"vamoorw.v",    0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOORWV, MASK_VAMOORWV, match_opcode, INSN_DREF},
> > +{"vamoord.v",    0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOORDV, MASK_VAMOORDV, match_opcode, INSN_DREF},
> > +
> > +{"vamominw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMINWV, MASK_VAMOMINWV, match_opcode, INSN_DREF},
> > +{"vamomind.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMINDV, MASK_VAMOMINDV, match_opcode, INSN_DREF},
> > +{"vamomaxw.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMAXWV, MASK_VAMOMAXWV, match_opcode, INSN_DREF},
> > +{"vamomaxd.v",   0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMAXDV, MASK_VAMOMAXDV, match_opcode, INSN_DREF},
> > +{"vamominuw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMINUWV, MASK_VAMOMINUWV, match_opcode, INSN_DREF},
> > +{"vamominud.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMINUDV, MASK_VAMOMINUDV, match_opcode, INSN_DREF},
> > +{"vamomaxuw.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMAXUWV, MASK_VAMOMAXUWV, match_opcode, INSN_DREF},
> > +{"vamomaxud.v",  0, INSN_CLASS_XTHEADV,  "Ve,Vt,(s),VfVm",
> MATCH_VAMOMAXUDV, MASK_VAMOMAXUDV, match_opcode, INSN_DREF},
> >
> >  /* Supervisor instructions.  */
> >  {"csrr",       0, INSN_CLASS_ZICSR, "d,E",   MATCH_CSRRS,
> MASK_CSRRS|MASK_RS1, match_opcode, INSN_ALIAS },
> > --
> > 2.42.0
> >
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-11-09 10:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-08 13:28 [PATCH] add opcode for xtheadv chenyixuan
2023-11-09  7:28 ` Jan Beulich
2023-11-09 10:18 ` Christoph Müllner
2023-11-09 10:40   ` Yixuan Chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).