aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@sifive.com>2023-11-27 15:28:30 +0800
committerKito Cheng <kito.cheng@sifive.com>2023-12-04 14:34:41 +0800
commit26b1599d83ddd5b5ac6fb845549e66acc45981f6 (patch)
tree0faf1529f29feba510fa2ff90bb177fad3964375 /gcc
parent88029286c35d3bf65568fea1324d595a15441772 (diff)
downloadgcc-26b1599d83ddd5b5ac6fb845549e66acc45981f6.zip
gcc-26b1599d83ddd5b5ac6fb845549e66acc45981f6.tar.gz
gcc-26b1599d83ddd5b5ac6fb845549e66acc45981f6.tar.bz2
RISC-V: Refine riscv_subset_list::parse [NFC]
Extract the logic of checking conflict extensions to a standard alone function, prepare to add more checking logic. gcc/ChangeLog: * common/config/riscv/riscv-common.cc (riscv_subset_list::check_conflict_ext): New. (riscv_subset_list::parse): Move checking conflict ext. to check_conflict_ext. * config/riscv/riscv-subset.h: Add riscv_subset_list::check_conflict_ext.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/common/config/riscv/riscv-common.cc31
-rw-r--r--gcc/config/riscv/riscv-subset.h1
2 files changed, 20 insertions, 12 deletions
diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc
index ded85b4..de793f9 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -1185,6 +1185,24 @@ riscv_subset_list::handle_combine_ext ()
}
}
+void
+riscv_subset_list::check_conflict_ext ()
+{
+ if (lookup ("zcf") && m_xlen == 64)
+ error_at (m_loc, "%<-march=%s%>: zcf extension supports in rv32 only",
+ m_arch);
+
+ if (lookup ("zfinx") && lookup ("f"))
+ error_at (m_loc,
+ "%<-march=%s%>: z*inx conflicts with floating-point "
+ "extensions",
+ m_arch);
+
+ /* '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);
+}
+
/* Parsing function for multi-letter extensions.
Return Value:
@@ -1495,18 +1513,7 @@ riscv_subset_list::parse (const char *arch, location_t loc)
gcc_assert (subset_list->check_implied_ext ());
subset_list->handle_combine_ext ();
-
- if (subset_list->lookup ("zcf") && subset_list->m_xlen == 64)
- error_at (loc, "%<-march=%s%>: zcf extension supports in rv32 only"
- , arch);
-
- if (subset_list->lookup ("zfinx") && subset_list->lookup ("f"))
- error_at (loc, "%<-march=%s%>: z*inx conflicts with floating-point "
- "extensions", arch);
-
- /* 'H' hypervisor extension requires base ISA with 32 registers. */
- if (subset_list->lookup ("e") && subset_list->lookup ("h"))
- error_at (loc, "%<-march=%s%>: h extension requires i extension", arch);
+ subset_list->check_conflict_ext ();
return subset_list;
diff --git a/gcc/config/riscv/riscv-subset.h b/gcc/config/riscv/riscv-subset.h
index d2a4bd2..ad1cab2 100644
--- a/gcc/config/riscv/riscv-subset.h
+++ b/gcc/config/riscv/riscv-subset.h
@@ -79,6 +79,7 @@ private:
void handle_implied_ext (const char *);
bool check_implied_ext ();
void handle_combine_ext ();
+ void check_conflict_ext ();
public:
~riscv_subset_list ();