https://gcc.gnu.org/g:5e106d5552f11a16a83f8e48852dc3803b010c11

commit 5e106d5552f11a16a83f8e48852dc3803b010c11
Author: Patrick O'Neill <patr...@rivosinc.com>
Date:   Tue Jul 30 14:28:23 2024 -0700

    RISC-V: Reject 'd' extension with ILP32E ABI
    
    Also add a testcase for -mabi=lp64d where 'd' is required.
    
    gcc/ChangeLog:
    
            PR target/116111
            * config/riscv/riscv.cc (riscv_option_override): Add error.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/riscv/arch-41.c: New test.
            * gcc.target/riscv/pr116111.c: New test.
    
    Signed-off-by: Patrick O'Neill <patr...@rivosinc.com>
    (cherry picked from commit 642e38983668807882e774524c88478f641f360f)

Diff:
---
 gcc/config/riscv/riscv.cc                 | 5 +++++
 gcc/testsuite/gcc.target/riscv/arch-41.c  | 7 +++++++
 gcc/testsuite/gcc.target/riscv/pr116111.c | 7 +++++++
 3 files changed, 19 insertions(+)

diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index bf0e0b8a0e7..b1a3d0bdd36 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -9818,6 +9818,11 @@ riscv_option_override (void)
        error ("rv64e requires lp64e ABI");
     }
 
+  /* ILP32E does not support the 'd' extension.  */
+  if (riscv_abi == ABI_ILP32E && UNITS_PER_FP_REG > 4)
+    error ("ILP32E ABI does not support the %qc extension",
+          UNITS_PER_FP_REG > 8 ? 'Q' : 'D');
+
   /* Zfinx require abi ilp32, ilp32e, lp64 or lp64e.  */
   if (TARGET_ZFINX
       && riscv_abi != ABI_ILP32 && riscv_abi != ABI_LP64
diff --git a/gcc/testsuite/gcc.target/riscv/arch-41.c 
b/gcc/testsuite/gcc.target/riscv/arch-41.c
new file mode 100644
index 00000000000..699eeb20a58
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-41.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64i -mabi=lp64d" } */
+int
+foo ()
+{}
+
+/* { dg-error "requested ABI requires '-march' to subsume the 'D' extension" 
"" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr116111.c 
b/gcc/testsuite/gcc.target/riscv/pr116111.c
new file mode 100644
index 00000000000..5c824be2e93
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr116111.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32ed -mabi=ilp32e" } */
+int
+foo ()
+{}
+
+/* { dg-error "ILP32E ABI does not support the 'D' extension" "" { target 
*-*-* } 0 } */

Reply via email to