@@ -1221,6 +1221,9 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"zcmop", "+zca", check_implicit_always},
{"zcmt", "+zca,+zicsr", check_implicit_always},
+ {"zclsd", "+zca,+zilsd", check_implicit_always},
+ {"zilsd", "+zicsr", check_implicit_always},
+
{"shcounterenw", "+h", check_implicit_always},
{"shgatpa", "+h", check_implicit_always},
{"shtvala", "+h", check_implicit_always},
@@ -1354,6 +1357,8 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
{"zihintpause", ISA_SPEC_CLASS_DRAFT, 2, 0, 0 },
{"zihpm", ISA_SPEC_CLASS_DRAFT, 2, 0, 0 },
{"zimop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zilsd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zclsd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zmmul", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"za64rs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"za128rs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
@@ -2108,6 +2113,29 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
(_("`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"));
no_conflict = false;
}
+ if (riscv_lookup_subset (rps->subset_list, "zilsd", &subset)
+ && xlen > 32)
+ {
+ rps->error_handler
+ (_("rv%d does not support the `zilsd' extension"), xlen);
+ no_conflict = false;
+ }
+ if (riscv_lookup_subset (rps->subset_list, "zclsd", &subset)
+ && xlen > 32)
+ {
+ rps->error_handler
+ (_("rv%d does not support the `zclsd' extension"), xlen);
+ no_conflict = false;
+ }
+ if (riscv_lookup_subset (rps->subset_list, "zclsd", &subset)
+ && ((riscv_lookup_subset (rps->subset_list, "c", &subset)
+ && riscv_lookup_subset (rps->subset_list, "f", &subset))
+ || riscv_lookup_subset (rps->subset_list, "zcf", &subset)))
+ {
+ rps->error_handler
+ (_("`zclsd' is conflict with the `c+f'/ `zcf' extension"));
+ no_conflict = false;
+ }
if (riscv_lookup_subset (rps->subset_list, "xtheadvector", &subset)
&& riscv_lookup_subset (rps->subset_list, "v", &subset))
{
@@ -2736,6 +2764,10 @@ 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_ZILSD:
+ return riscv_subset_supports (rps, "zilsd");
+ case INSN_CLASS_ZCLSD:
+ return riscv_subset_supports (rps, "zclsd");
case INSN_CLASS_SVINVAL:
return riscv_subset_supports (rps, "svinval");
case INSN_CLASS_H:
@@ -3026,6 +3058,10 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
return "zcmp";
case INSN_CLASS_ZCMT:
return "zcmt";
+ case INSN_CLASS_ZILSD:
+ return "zilsd";
+ case INSN_CLASS_ZCLSD:
+ return "zclsd";
case INSN_CLASS_SVINVAL:
return "svinval";
case INSN_CLASS_H:
@@ -13,6 +13,8 @@
CORE-V (xcvbitmanip, xcvsimd) extensions with version 1.0 and more SiFive
extensions (xsfvqmaccdod, xsfvqmaccqoq and xsfvfnrclipxfqf).
+ Add support for RISC-V z[i/c]lsd extension, version 1.0.
+
Changes in 2.43:
* Add support for LoongArch .option for fine-grained control of assembly
new file mode 100644
@@ -0,0 +1,3 @@
+#as: -march=rv64i_zca_zclsd
+#source: empty.s
+#error_output: march-fail-zclsd-01.l
new file mode 100644
@@ -0,0 +1,2 @@
+.*Assembler messages:
+.*Error: .*rv64 does not support the `zclsd' extension
new file mode 100644
@@ -0,0 +1,3 @@
+#as: -march=rv32i_zcf_zclsd
+#source: empty.s
+#error_output: march-fail-zclsd-02.l
new file mode 100644
@@ -0,0 +1,2 @@
+.*Assembler messages:
+.*Error: .*`zclsd' is conflict with the `c+f'/ `zcf' extension
new file mode 100644
@@ -0,0 +1,3 @@
+#as: -march=rv64i_zilsd
+#source: empty.s
+#error_output: march-fail-zilsd.l
new file mode 100644
@@ -0,0 +1,2 @@
+.*Assembler messages:
+.*Error: .*rv64 does not support the `zilsd' extension
@@ -26,6 +26,8 @@ All available -march extensions for RISC-V:
zihintpause 2.0
zihpm 2.0
zimop 1.0
+ zilsd 1.0
+ zclsd 1.0
zmmul 1.0
za64rs 1.0
za128rs 1.0
@@ -522,6 +522,8 @@ enum riscv_insn_class
INSN_CLASS_ZCMOP,
INSN_CLASS_ZCMP,
INSN_CLASS_ZCMT,
+ INSN_CLASS_ZILSD,
+ INSN_CLASS_ZCLSD,
INSN_CLASS_SVINVAL,
INSN_CLASS_ZICBOM,
INSN_CLASS_ZICBOP,