@@ -1302,6 +1302,7 @@ static const struct riscv_implicit_subset riscv_implicit_subsets[] =
{"zvksg", "+zvks,+zvkg", check_implicit_always},
{"zvksc", "+zvks,+zvbc", check_implicit_always},
{"zvks", "+zvksed,+zvksh,+zvkb,+zvkt", check_implicit_always},
+ {"zvabd", "+zvabd", check_implicit_always},
{"smaia", "+ssaia", check_implicit_always},
{"smcdeleg", "+ssccfg", check_implicit_always},
@@ -1546,6 +1547,7 @@ static const struct riscv_supported_ext riscv_supported_std_z_ext[] =
{"zcmop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcmp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcmt", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zvabd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zclsd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{NULL, 0, 0, 0, 0}
};
@@ -2977,6 +2979,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
return riscv_subset_supports (rps, "zcmp");
case INSN_CLASS_ZCMT:
return riscv_subset_supports (rps, "zcmt");
+ case INSN_CLASS_ZVABD:
+ return riscv_subset_supports (rps, "zvabd");
case INSN_CLASS_SMCTR_OR_SSCTR:
return (riscv_subset_supports (rps, "smctr")
|| riscv_subset_supports (rps, "ssctr"));
@@ -3280,6 +3284,8 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
return "zcmp";
case INSN_CLASS_ZCMT:
return "zcmt";
+ case INSN_CLASS_ZVABD:
+ return "zvabd";
case INSN_CLASS_SMCTR_OR_SSCTR:
return _("smctr' or `ssctr");
case INSN_CLASS_ZILSD:
@@ -1867,6 +1867,18 @@
#define MASK_VNCLIPWX 0xfc00707f
#define MATCH_VNCLIPWI 0xbc003057
#define MASK_VNCLIPWI 0xfc00707f
+//abs
+#define MATCH_VABS 0x48082057
+#define MASK_VABS 0xfc0ff07f
+#define MATCH_VABD 0x44002057
+#define MASK_VABD 0xfc00707f
+#define MATCH_VABDU 0x4c002057
+#define MASK_VABD 0xfc00707f
+#define MATCH_VWABDACC 0x54002057
+#define MASK_VWABDACC 0xfc00707f
+#define MATCH_VWABDACCU 0x58002057
+#define MASK_VWABDACC 0xfc00707f
+
#define MATCH_VFADDVV 0x00001057
#define MASK_VFADDVV 0xfc00707f
#define MATCH_VFADDVF 0x00005057
@@ -573,6 +573,7 @@ enum riscv_insn_class
INSN_CLASS_ZABHA,
INSN_CLASS_ZACAS,
INSN_CLASS_ZABHA_AND_ZACAS,
+ INSN_CLASS_ZVABD,
INSN_CLASS_H,
INSN_CLASS_XCVALU,
INSN_CLASS_XCVBI,
@@ -2024,6 +2024,13 @@ 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 },
+/*zvabd instructions.*/
+{"vabs.v", 0, INSN_CLASS_ZVABD, "Vd,VtVm", MATCH_VABS, MASK_VABS, match_opcode, 0 },
+{"vabd.vv", 0, INSN_CLASS_ZVABD, "Vd,Vt,VsVm", MATCH_VABD, MASK_VABD, match_opcode, 0 },
+{"vabdu.vv", 0, INSN_CLASS_ZVABD, "Vd,Vt,VsVm", MATCH_VABDU, MASK_VABD, match_opcode, 0 },
+{"vwabdacc.vv", 0, INSN_CLASS_ZVABD, "Vd,Vt,VsVm", MATCH_VWABDACC, MASK_VWABDACC, match_opcode, 0 },
+{"vwabdaccu.vv", 0, INSN_CLASS_ZVABD, "Vd,Vt,VsVm", MATCH_VWABDACCU, MASK_VWABDACC, 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},