aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick O'Neill <patrick@rivosinc.com>2024-07-30 14:28:23 -0700
committerPatrick O'Neill <patrick@rivosinc.com>2024-08-01 11:25:47 -0700
commit642e38983668807882e774524c88478f641f360f (patch)
treea8388a14fc1962037cbf78d28b7e65436c60833f
parent0d514c11ef5931d61917c0c663646e73154f8473 (diff)
downloadgcc-642e38983668807882e774524c88478f641f360f.zip
gcc-642e38983668807882e774524c88478f641f360f.tar.gz
gcc-642e38983668807882e774524c88478f641f360f.tar.bz2
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 <patrick@rivosinc.com>
-rw-r--r--gcc/config/riscv/riscv.cc5
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-41.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr116111.c7
3 files changed, 19 insertions, 0 deletions
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 8ece785..b19d561 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 0000000..699eeb2
--- /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 0000000..5c824be
--- /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 } */