[binutils-gdb] RISC-V: Support pointer masking extension 1.0

Nelson Chu nelsonc1225@sourceware.org
Tue Mar 18 06:31:37 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7b2a5f7183b946a0a2644a505892b7e0aefbbfd1

commit 7b2a5f7183b946a0a2644a505892b7e0aefbbfd1
Author: Jerry Zhang Jian <jerry.zhangjian@sifive.com>
Date:   Mon Mar 17 20:16:35 2025 +0800

    RISC-V: Support pointer masking extension 1.0
    
    - Adding Ssnpm, Smnpm, Smmpm, Sspm, and Supm
    - No new CSR added
    - Pointer masking only applies to RV64
    - Ref: https://github.com/riscv/riscv-j-extension/releases/download/pointer-masking-ratified/pointer-masking-ratified.pdf
    
    Signed-off-by: Jerry Zhang Jian <jerry.zhangjian@sifive.com>

Diff:
---
 bfd/elfxx-riscv.c                                  | 35 ++++++++++++++++++++++
 gas/NEWS                                           |  2 +-
 .../gas/riscv/march-fail-rv32-pointer-masking.d    |  3 ++
 .../gas/riscv/march-fail-rv32-pointer-masking.l    |  6 ++++
 gas/testsuite/gas/riscv/march-help.l               |  5 ++++
 5 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
index a2f67bc244e..481bac91d73 100644
--- a/bfd/elfxx-riscv.c
+++ b/bfd/elfxx-riscv.c
@@ -1477,6 +1477,11 @@ static struct riscv_supported_ext riscv_supported_std_s_ext[] =
   {"svnapot",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
   {"svpbmt",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
   {"ssqosid",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"ssnpm",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"smnpm",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"smmpm",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"sspm",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
+  {"supm",		ISA_SPEC_CLASS_DRAFT,		1, 0, 0 },
   {NULL, 0, 0, 0, 0}
 };
 
@@ -2125,6 +2130,36 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
 	(_("`xtheadvector' is conflict with the `v' extension"));
       no_conflict = false;
     }
+  if (riscv_lookup_subset (rps->subset_list, "ssnpm", &subset) && xlen != 64)
+    {
+      rps->error_handler (_ ("rv%d does not support the `ssnpm' extension"),
+			  xlen);
+      no_conflict = false;
+    }
+  if (riscv_lookup_subset (rps->subset_list, "smnpm", &subset) && xlen != 64)
+    {
+      rps->error_handler (_ ("rv%d does not support the `smnpm' extension"),
+			  xlen);
+      no_conflict = false;
+    }
+  if (riscv_lookup_subset (rps->subset_list, "smmpm", &subset) && xlen != 64)
+    {
+      rps->error_handler (_ ("rv%d does not support the `smmpm' extension"),
+			  xlen);
+      no_conflict = false;
+    }
+  if (riscv_lookup_subset (rps->subset_list, "sspm", &subset) && xlen != 64)
+    {
+      rps->error_handler (_ ("rv%d does not support the `sspm' extension"),
+			  xlen);
+      no_conflict = false;
+    }
+  if (riscv_lookup_subset (rps->subset_list, "supm", &subset) && xlen != 64)
+    {
+      rps->error_handler (_ ("rv%d does not support the `supm' extension"),
+			  xlen);
+      no_conflict = false;
+    }
 
   bool support_zve = false;
   bool support_zvl = false;
diff --git a/gas/NEWS b/gas/NEWS
index dc09ef57dfa..dc0fd1009cb 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -6,7 +6,7 @@
   directives, the file need to be rebuilt since 2.45.
 
 * Add support for RISC-V standard extensions:
-  ssqosid v1.0.
+  ssqosid v1.0, ssnpm v1.0, smnpm v1.0, smmpm v1.0, sspm v1.0, supm v1.0.
 
 * Add support for RISC-V vendor extensions:
   T-Head: xtheadvdot v1.0.
diff --git a/gas/testsuite/gas/riscv/march-fail-rv32-pointer-masking.d b/gas/testsuite/gas/riscv/march-fail-rv32-pointer-masking.d
new file mode 100644
index 00000000000..fb4dfc619dc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/march-fail-rv32-pointer-masking.d
@@ -0,0 +1,3 @@
+#as: -march=rv32i_ssnpm_smnpm_smmpm_sspm_supm
+#source: empty.s
+#error_output: march-fail-rv32-pointer-masking.l
diff --git a/gas/testsuite/gas/riscv/march-fail-rv32-pointer-masking.l b/gas/testsuite/gas/riscv/march-fail-rv32-pointer-masking.l
new file mode 100644
index 00000000000..119652878dd
--- /dev/null
+++ b/gas/testsuite/gas/riscv/march-fail-rv32-pointer-masking.l
@@ -0,0 +1,6 @@
+.*Assembler messages:
+.*Error: rv32 does not support the `ssnpm' extension
+.*Error: rv32 does not support the `smnpm' extension
+.*Error: rv32 does not support the `smmpm' extension
+.*Error: rv32 does not support the `sspm' extension
+.*Error: rv32 does not support the `supm' extension
diff --git a/gas/testsuite/gas/riscv/march-help.l b/gas/testsuite/gas/riscv/march-help.l
index f4b1e306895..d77472fda9c 100644
--- a/gas/testsuite/gas/riscv/march-help.l
+++ b/gas/testsuite/gas/riscv/march-help.l
@@ -140,6 +140,11 @@ All available -march extensions for RISC-V:
 	svnapot                                 1.0
 	svpbmt                                  1.0
 	ssqosid                                 1.0
+	ssnpm                                   1.0
+	smnpm                                   1.0
+	smmpm                                   1.0
+	sspm                                    1.0
+	supm                                    1.0
 	xcvalu                                  1.0
 	xcvbi                                   1.0
 	xcvbitmanip                             1.0


More information about the Binutils-cvs mailing list