@@ -1230,6 +1230,9 @@ static const struct riscv_implicit_subset riscv_implicit_subsets[] =
{"xtheadvector", "+zicsr", check_implicit_always},
{"xtheadzvamo", "+zaamo", check_implicit_always},
+ {"xxtvarith", "+v", check_implicit_always},
+ {"xxtvcoder", "+v", check_implicit_always},
+
{"xsmtvdot", "+zve32x", check_implicit_always},
{"xsmtvdotii", "+xsmtvdot", check_implicit_always},
@@ -1661,6 +1664,8 @@ static const struct riscv_supported_ext riscv_supported_vendor_x_ext[] =
{"xtheadvector", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"xtheadvdot", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"xtheadzvamo", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"xxtvarith", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"xxtvcoder", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"xventanacondops", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"xsfvcp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"xsfcease", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
@@ -3112,6 +3117,10 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
return riscv_subset_supports (rps, "xtheadvector");
case INSN_CLASS_XTHEADVDOT:
return riscv_subset_supports (rps, "xtheadvdot");
+ case INSN_CLASS_XXTVARITH:
+ return riscv_subset_supports (rps, "xxtvarith");
+ case INSN_CLASS_XXTVCODER:
+ return riscv_subset_supports (rps, "xxtvcoder");
case INSN_CLASS_XTHEADZVAMO:
return riscv_subset_supports (rps, "xtheadzvamo");
case INSN_CLASS_XVENTANACONDOPS:
@@ -3456,6 +3465,10 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
return "xtheadvector";
case INSN_CLASS_XTHEADVDOT:
return "xtheadvdot";
+ case INSN_CLASS_XXTVARITH:
+ return "xxtvarith";
+ case INSN_CLASS_XXTVCODER:
+ return "xxtvcoder";
case INSN_CLASS_XTHEADZVAMO:
return "xtheadzvamo";
case INSN_CLASS_XVENTANACONDOPS:
@@ -189,6 +189,8 @@ All available -march extensions for RISC-V:
xtheadvector 1.0
xtheadvdot 1.0
xtheadzvamo 1.0
+ xxtvarith 1.0
+ xxtvcoder 1.0
xventanacondops 1.0
xsfvcp 1.0
xsfcease 1.0
new file mode 100644
@@ -0,0 +1,13 @@
+#as: -march=rv64i_xxtvarith
+#objdump: -dr
+
+.*:[ ]+file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]+[0-9a-f]+:[ ]+da11600b[ ]+xt.vile.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+f211600b[ ]+xt.vilo.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+fa11600b[ ]+xt.vcrcfoldr.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+fe11600b[ ]+xt.vcrcfoldn.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+7a11600b[ ]+xt.vgmulxor.vv[ ]+v0,v1,v2
new file mode 100644
@@ -0,0 +1,5 @@
+ xt.vile.vv v0, v1, v2
+ xt.vilo.vv v0, v1, v2
+ xt.vcrcfoldr.vv v0, v1, v2
+ xt.vcrcfoldn.vv v0, v1, v2
+ xt.vgmulxor.vv v0, v1, v2
new file mode 100644
@@ -0,0 +1,32 @@
+#as: -march=rv64i_xxtvcoder
+#objdump: -dr
+
+.*:[ ]+file format .*
+
+Disassembly of section .text:
+
+0+000 <.text>:
+[ ]+[0-9a-f]+:[ ]+c211700b[ ]+xt.vabd.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+c615700b[ ]+xt.vabd.vx[ ]+v0,v1,a0
+[ ]+[0-9a-f]+:[ ]+ca12f00b[ ]+xt.vabd.vi[ ]+v0,v1,5
+[ ]+[0-9a-f]+:[ ]+da11700b[ ]+xt.vaba.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+de15700b[ ]+xt.vaba.vx[ ]+v0,v1,a0
+[ ]+[0-9a-f]+:[ ]+ce12700b[ ]+xt.vaba.vi[ ]+v0,v1,4
+[ ]+[0-9a-f]+:[ ]+a211600b[ ]+xt.vabdu.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+a615600b[ ]+xt.vabdu.vx[ ]+v0,v1,a0
+[ ]+[0-9a-f]+:[ ]+aa12600b[ ]+xt.vabdu.vi[ ]+v0,v1,4
+[ ]+[0-9a-f]+:[ ]+b211600b[ ]+xt.vabau.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+b615600b[ ]+xt.vabau.vx[ ]+v0,v1,a0
+[ ]+[0-9a-f]+:[ ]+ae12600b[ ]+xt.vabau.vi[ ]+v0,v1,4
+[ ]+[0-9a-f]+:[ ]+e211700b[ ]+xt.vwabd.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+e616700b[ ]+xt.vwabd.vx[ ]+v0,v1,a2
+[ ]+[0-9a-f]+:[ ]+f211700b[ ]+xt.vwaba.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+f616700b[ ]+xt.vwaba.vx[ ]+v0,v1,a2
+[ ]+[0-9a-f]+:[ ]+fa11700b[ ]+xt.vwabau.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+fe16700b[ ]+xt.vwabau.vx[ ]+v0,v1,a2
+[ ]+[0-9a-f]+:[ ]+ea11700b[ ]+xt.vwabdu.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+ee16700b[ ]+xt.vwabdu.vx[ ]+v0,v1,a2
+[ ]+[0-9a-f]+:[ ]+d211700b[ ]+xt.vfabd.vv[ ]+v0,v1,v2
+[ ]+[0-9a-f]+:[ ]+d616700b[ ]+xt.vfabd.vf[ ]+v0,v1,fa2
+[ ]+[0-9a-f]+:[ ]+6a21f08b[ ]+xt.vabsmax.vv[ ]+v1,v2,v3
+[ ]+[0-9a-f]+:[ ]+6821f08b[ ]+xt.vabsmax.vv[ ]+v1,v2,v3,v0.t
new file mode 100644
@@ -0,0 +1,24 @@
+ xt.vabd.vv v0, v1, v2
+ xt.vabd.vx v0, v1, a0
+ xt.vabd.vi v0, v1, 5
+ xt.vaba.vv v0, v1, v2
+ xt.vaba.vx v0, v1, a0
+ xt.vaba.vi v0, v1, 4
+ xt.vabdu.vv v0, v1, v2
+ xt.vabdu.vx v0, v1, a0
+ xt.vabdu.vi v0, v1, 4
+ xt.vabau.vv v0, v1, v2
+ xt.vabau.vx v0, v1, a0
+ xt.vabau.vi v0, v1, 4
+ xt.vwabd.vv v0, v1, v2
+ xt.vwabd.vx v0, v1, a2
+ xt.vwaba.vv v0, v1, v2
+ xt.vwaba.vx v0, v1, a2
+ xt.vwabau.vv v0, v1, v2
+ xt.vwabau.vx v0, v1, a2
+ xt.vwabdu.vv v0, v1, v2
+ xt.vwabdu.vx v0, v1, a2
+ xt.vfabd.vv v0, v1, v2
+ xt.vfabd.vf v0, v1, fa2
+ xt.vabsmax.vv v1,v2,v3
+ xt.vabsmax.vv v1,v2,v3,v0.t
@@ -3798,6 +3798,64 @@
#define MASK_TH_VMAQASU_VX 0xfc00707f
#define MATCH_TH_VMAQAUS_VX 0x9c00600b
#define MASK_TH_VMAQAUS_VX 0xfc00707f
+/* Vendor-specific (XuanTie) XXTVarith instructions. */
+#define MATCH_XT_VILE_VV 0xda00600b
+#define MASK_XT_VILE_VV 0xfe00707f
+#define MATCH_XT_VILO_VV 0xf200600b
+#define MASK_XT_VILO_VV 0xfe00707f
+#define MATCH_XT_VGMULXOR_VV 0x7a00600b
+#define MASK_XT_VGMULXOR_VV 0xfe00707f
+#define MATCH_XT_VCRCFOLDR_VV 0xfa00600b
+#define MASK_XT_VCRCFOLDR_VV 0xfe00707f
+#define MATCH_XT_VCRCFOLDN_VV 0xfe00600b
+#define MASK_XT_VCRCFOLDN_VV 0xfe00707f
+/* Vendor-specific (XuanTie) XXTVcoder instructions. */
+#define MATCH_XT_VABD_VV 0xc000700b
+#define MASK_XT_VABD_VV 0xfc00707f
+#define MATCH_XT_VABD_VX 0xc400700b
+#define MASK_XT_VABD_VX 0xfc00707f
+#define MATCH_XT_VABD_VI 0xc800700b
+#define MASK_XT_VABD_VI 0xfc00707f
+#define MATCH_XT_VABA_VV 0xd800700b
+#define MASK_XT_VABA_VV 0xfc00707f
+#define MATCH_XT_VABA_VX 0xdc00700b
+#define MASK_XT_VABA_VX 0xfc00707f
+#define MATCH_XT_VABA_VI 0xcc00700b
+#define MASK_XT_VABA_VI 0xfc00707f
+#define MATCH_XT_VABDU_VV 0xa000600b
+#define MASK_XT_VABDU_VV 0xfc00707f
+#define MATCH_XT_VABDU_VX 0xa400600b
+#define MASK_XT_VABDU_VX 0xfc00707f
+#define MATCH_XT_VABDU_VI 0xa800600b
+#define MASK_XT_VABDU_VI 0xfc00707f
+#define MATCH_XT_VABAU_VV 0xb000600b
+#define MASK_XT_VABAU_VV 0xfc00707f
+#define MATCH_XT_VABAU_VX 0xb400600b
+#define MASK_XT_VABAU_VX 0xfc00707f
+#define MATCH_XT_VABAU_VI 0xac00600b
+#define MASK_XT_VABAU_VI 0xfc00707f
+#define MATCH_XT_VWABD_VV 0xe000700b
+#define MASK_XT_VWABD_VV 0xfc00707f
+#define MATCH_XT_VWABD_VX 0xe400700b
+#define MASK_XT_VWABD_VX 0xfc00707f
+#define MATCH_XT_VWABA_VV 0xf000700b
+#define MASK_XT_VWABA_VV 0xfc00707f
+#define MATCH_XT_VWABA_VX 0xf400700b
+#define MASK_XT_VWABA_VX 0xfc00707f
+#define MATCH_XT_VWABAU_VV 0xf800700b
+#define MASK_XT_VWABAU_VV 0xfc00707f
+#define MATCH_XT_VWABAU_VX 0xfc00700b
+#define MASK_XT_VWABAU_VX 0xfc00707f
+#define MATCH_XT_VWABDU_VV 0xe800700b
+#define MASK_XT_VWABDU_VV 0xfc00707f
+#define MATCH_XT_VWABDU_VX 0xec00700b
+#define MASK_XT_VWABDU_VX 0xfc00707f
+#define MATCH_XT_VFABD_VV 0xd000700b
+#define MASK_XT_VFABD_VV 0xfc00707f
+#define MATCH_XT_VFABD_VF 0xd400700b
+#define MASK_XT_VFABD_VF 0xfc00707f
+#define MATCH_XT_VABSMAX_VV 0x6800700b
+#define MASK_XT_VABSMAX_VV 0xfc00707f
/* Vendor-specific (Ventana Microsystems) XVentanaCondOps instructions */
#define MATCH_VT_MASKC 0x607b
#define MASK_VT_MASKC 0xfe00707f
@@ -624,6 +624,8 @@ enum riscv_insn_class
INSN_CLASS_XTHEADVECTOR,
INSN_CLASS_XTHEADVDOT,
INSN_CLASS_XTHEADZVAMO,
+ INSN_CLASS_XXTVARITH,
+ INSN_CLASS_XXTVCODER,
INSN_CLASS_XVENTANACONDOPS,
INSN_CLASS_XSFVCP,
INSN_CLASS_XSFCEASE,
@@ -3570,6 +3570,38 @@ const struct riscv_opcode riscv_opcodes[] =
{"th.vmaqasu.vx", 0, INSN_CLASS_XTHEADVDOT, "Vd,s,VtVm", MATCH_TH_VMAQASU_VX, MASK_TH_VMAQASU_VX, match_opcode, 0},
{"th.vmaqaus.vx", 0, INSN_CLASS_XTHEADVDOT, "Vd,s,VtVm", MATCH_TH_VMAQAUS_VX, MASK_TH_VMAQAUS_VX, match_opcode, 0},
+/* Vendor-specific (XuanTie) XXTVarith instructions. */
+{"xt.vile.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VILE_VV, MASK_XT_VILE_VV, match_opcode, 0 },
+{"xt.vilo.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VILO_VV, MASK_XT_VILO_VV, match_opcode, 0 },
+{"xt.vcrcfoldr.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VCRCFOLDR_VV, MASK_XT_VCRCFOLDR_VV, match_opcode, 0 },
+{"xt.vcrcfoldn.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VCRCFOLDN_VV, MASK_XT_VCRCFOLDN_VV, match_opcode, 0 },
+{"xt.vgmulxor.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VGMULXOR_VV, MASK_XT_VGMULXOR_VV, match_opcode, 0 },
+
+/* Vendor-specific (XuanTie) XXTVcoder instructions. */
+{"xt.vabd.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABD_VV, MASK_XT_VABD_VV, match_opcode, 0 },
+{"xt.vabd.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABD_VX, MASK_XT_VABD_VX, match_opcode, 0 },
+{"xt.vabd.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,ViVm", MATCH_XT_VABD_VI, MASK_XT_VABD_VI, match_opcode, 0 },
+{"xt.vabdu.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABDU_VV, MASK_XT_VABDU_VV, match_opcode, 0 },
+{"xt.vabdu.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABDU_VX, MASK_XT_VABDU_VX, match_opcode, 0 },
+{"xt.vabdu.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VjVm", MATCH_XT_VABDU_VI, MASK_XT_VABDU_VI, match_opcode, 0 },
+{"xt.vaba.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABA_VV, MASK_XT_VABA_VV, match_opcode, 0 },
+{"xt.vaba.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABA_VX, MASK_XT_VABA_VX, match_opcode, 0 },
+{"xt.vaba.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,ViVm", MATCH_XT_VABA_VI, MASK_XT_VABA_VI, match_opcode, 0 },
+{"xt.vabau.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABAU_VV, MASK_XT_VABAU_VV, match_opcode, 0 },
+{"xt.vabau.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABAU_VX, MASK_XT_VABAU_VX, match_opcode, 0 },
+{"xt.vabau.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VjVm", MATCH_XT_VABAU_VI, MASK_XT_VABAU_VI, match_opcode, 0 },
+{"xt.vwabd.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABD_VV, MASK_XT_VWABD_VV, match_opcode, 0 },
+{"xt.vwabd.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABD_VX, MASK_XT_VWABD_VX, match_opcode, 0 },
+{"xt.vwaba.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABA_VV, MASK_XT_VWABA_VV, match_opcode, 0 },
+{"xt.vwaba.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABA_VX, MASK_XT_VWABA_VX, match_opcode, 0 },
+{"xt.vwabau.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABAU_VV, MASK_XT_VWABAU_VV, match_opcode, 0 },
+{"xt.vwabau.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABAU_VX, MASK_XT_VWABAU_VX, match_opcode, 0 },
+{"xt.vwabdu.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABDU_VV, MASK_XT_VWABDU_VV, match_opcode, 0 },
+{"xt.vwabdu.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABDU_VX, MASK_XT_VWABDU_VX, match_opcode, 0 },
+{"xt.vfabd.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VFABD_VV, MASK_XT_VFABD_VV, match_opcode, 0 },
+{"xt.vfabd.vf", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,SVm", MATCH_XT_VFABD_VF, MASK_XT_VFABD_VF, match_opcode, 0 },
+{"xt.vabsmax.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABSMAX_VV, MASK_XT_VABSMAX_VV, match_opcode, 0 },
+
/* Vendor-specific (Ventana Microsystems) XVentanaCondOps instructions */
{"vt.maskc", 64, INSN_CLASS_XVENTANACONDOPS, "d,s,t", MATCH_VT_MASKC, MASK_VT_MASKC, match_opcode, 0 },
{"vt.maskcn", 64, INSN_CLASS_XVENTANACONDOPS, "d,s,t", MATCH_VT_MASKCN, MASK_VT_MASKCN, match_opcode, 0 },