diff options
author | Kito Cheng <kito.cheng@sifive.com> | 2023-11-27 15:28:30 +0800 |
---|---|---|
committer | Kito Cheng <kito.cheng@sifive.com> | 2023-12-04 14:34:41 +0800 |
commit | 26b1599d83ddd5b5ac6fb845549e66acc45981f6 (patch) | |
tree | 0faf1529f29feba510fa2ff90bb177fad3964375 /gcc | |
parent | 88029286c35d3bf65568fea1324d595a15441772 (diff) | |
download | gcc-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.cc | 31 | ||||
-rw-r--r-- | gcc/config/riscv/riscv-subset.h | 1 |
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 (); |