[PATCH v2 2/2] RISC-V: Support Zce 1.0
Kito Cheng
kito.cheng@sifive.com
Fri May 9 09:34:49 GMT 2025
From: Jerry Zhang Jian <jerry.zhangjian@sifive.com>
Zce is the extension defined in code-size-reduction
Ref: https://github.com/riscvarchive/riscv-code-size-reduction
Co-authored-by: Kito Cheng <kito.cheng@sifive.com>
---
bfd/elfxx-riscv.c | 15 +++++++++++++++
gas/testsuite/gas/riscv/march-help.l | 1 +
gas/testsuite/gas/riscv/march-imply-zce-f-32.d | 6 ++++++
gas/testsuite/gas/riscv/march-imply-zce-f-64.d | 6 ++++++
gas/testsuite/gas/riscv/march-imply-zce.d | 6 ++++++
5 files changed, 34 insertions(+)
create mode 100644 gas/testsuite/gas/riscv/march-imply-zce-f-32.d
create mode 100644 gas/testsuite/gas/riscv/march-imply-zce-f-64.d
create mode 100644 gas/testsuite/gas/riscv/march-imply-zce.d
diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
index 780d64523a9..d19165aa306 100644
--- a/bfd/elfxx-riscv.c
+++ b/bfd/elfxx-riscv.c
@@ -1176,6 +1176,18 @@ check_implicit_for_i (riscv_parse_subset_t *rps ATTRIBUTE_UNUSED,
&& subset->minor_version < 1));
}
+/* Add the IMPLICIT only when the 'f' extension is also available
+ and XLEN is 32. */
+
+static bool
+check_implicit_for_zcf (riscv_parse_subset_t *rps,
+ const riscv_subset_t *subset ATTRIBUTE_UNUSED)
+{
+ riscv_subset_t *tmp = NULL;
+ return *rps->xlen == 32
+ && riscv_lookup_subset (rps->subset_list, "f", &tmp);
+}
+
/* Please added in order since this table is only run once time. */
static struct riscv_implicit_subset riscv_implicit_subsets[] =
{
@@ -1218,6 +1230,8 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"zvl128b", "+zvl64b", check_implicit_always},
{"zvl64b", "+zvl32b", check_implicit_always},
+ {"zce", "+zca,+zcb,+zcmp,+zcmt", check_implicit_always},
+ {"zce", "+zcf", check_implicit_for_zcf},
{"zcb", "+zca", check_implicit_always},
{"zcd", "+d,+zca", check_implicit_always},
{"zcf", "+f,+zca", check_implicit_always},
@@ -1446,6 +1460,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
{"ztso", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zca", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcb", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zce", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcf", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcmop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
diff --git a/gas/testsuite/gas/riscv/march-help.l b/gas/testsuite/gas/riscv/march-help.l
index caf897b22b8..25b78eb1177 100644
--- a/gas/testsuite/gas/riscv/march-help.l
+++ b/gas/testsuite/gas/riscv/march-help.l
@@ -103,6 +103,7 @@ All available -march extensions for RISC-V:
ztso 1.0
zca 1.0
zcb 1.0
+ zce 1.0
zcf 1.0
zcd 1.0
zcmop 1.0
diff --git a/gas/testsuite/gas/riscv/march-imply-zce-f-32.d b/gas/testsuite/gas/riscv/march-imply-zce-f-32.d
new file mode 100644
index 00000000000..e0cca82e0a0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/march-imply-zce-f-32.d
@@ -0,0 +1,6 @@
+#as: -march=rv32if_zce -march-attr -misa-spec=20191213
+#readelf: -A
+#source: empty.s
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: "rv32i2p1_f2p2_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcf1p0_zcmp1p0_zcmt1p0"
diff --git a/gas/testsuite/gas/riscv/march-imply-zce-f-64.d b/gas/testsuite/gas/riscv/march-imply-zce-f-64.d
new file mode 100644
index 00000000000..f0ccd7a3fce
--- /dev/null
+++ b/gas/testsuite/gas/riscv/march-imply-zce-f-64.d
@@ -0,0 +1,6 @@
+#as: -march=rv64if_zce -march-attr -misa-spec=20191213
+#readelf: -A
+#source: empty.s
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: "rv64i2p1_f2p2_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0"
diff --git a/gas/testsuite/gas/riscv/march-imply-zce.d b/gas/testsuite/gas/riscv/march-imply-zce.d
new file mode 100644
index 00000000000..fd1cd3f5af6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/march-imply-zce.d
@@ -0,0 +1,6 @@
+#as: -march=rv32i_zce -march-attr -misa-spec=20191213
+#readelf: -A
+#source: empty.s
+Attribute Section: riscv
+File Attributes
+ Tag_RISCV_arch: "rv32i2p1_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0"
--
2.34.1
More information about the Binutils
mailing list