[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