aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@sifive.com>2023-11-27 20:50:11 +0800
committerKito Cheng <kito.cheng@sifive.com>2023-12-05 17:24:34 +0800
commitf542df026cd24e604eb40426a83ce072ef34e15a (patch)
tree8ad5d139849926938efd6801ba52f30e52ebe423 /gcc
parent6e2e0ce6795c863e295eb33559f8dc0500297da3 (diff)
downloadgcc-f542df026cd24e604eb40426a83ce072ef34e15a.zip
gcc-f542df026cd24e604eb40426a83ce072ef34e15a.tar.gz
gcc-f542df026cd24e604eb40426a83ce072ef34e15a.tar.bz2
RISC-V: Check if zcd conflicts with zcmt and zcmp
gcc/ChangeLog: * common/config/riscv/riscv-common.cc (riscv_subset_list::check_conflict_ext): Check zcd conflicts with zcmt and zcmp. gcc/testsuite/ChangeLog: * gcc.target/riscv/arch-29.c: New test. * gcc.target/riscv/arch-30.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/common/config/riscv/riscv-common.cc8
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-29.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-30.c7
3 files changed, 22 insertions, 0 deletions
diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc
index 277d86d..4d5a2f8 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -1231,6 +1231,14 @@ riscv_subset_list::check_conflict_ext ()
/* 'H' hypervisor extension requires base ISA with 32 registers. */
if (lookup ("e") && lookup ("h"))
error_at (m_loc, "%<-march=%s%>: h extension requires i extension", m_arch);
+
+ if (lookup ("zcd"))
+ {
+ if (lookup ("zcmt"))
+ error_at (m_loc, "%<-march=%s%>: zcd conflicts with zcmt", m_arch);
+ if (lookup ("zcmp"))
+ error_at (m_loc, "%<-march=%s%>: zcd conflicts with zcmp", m_arch);
+ }
}
/* Parsing function for multi-letter extensions.
diff --git a/gcc/testsuite/gcc.target/riscv/arch-29.c b/gcc/testsuite/gcc.target/riscv/arch-29.c
new file mode 100644
index 0000000..f828127
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-29.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64id_zcd_zcmt -mabi=lp64d" } */
+int foo()
+{
+}
+
+/* { dg-error "zcd conflicts with zcmt" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/arch-30.c b/gcc/testsuite/gcc.target/riscv/arch-30.c
new file mode 100644
index 0000000..3e67ea0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-30.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64id_zcd_zcmp -mabi=lp64d" } */
+int foo()
+{
+}
+
+/* { dg-error "zcd conflicts with zcmp" "" { target *-*-* } 0 } */