diff options
author | Christoph Müllner <christoph.muellner@vrull.eu> | 2024-07-05 01:09:46 +0200 |
---|---|---|
committer | Christoph Müllner <christoph.muellner@vrull.eu> | 2024-07-09 15:21:15 +0200 |
commit | 85fa334fbcaa8e4b98ab197a8c9410dde87f0ae3 (patch) | |
tree | f1ef5ec1ea3b27b262552a408e6618152af83bd3 /gcc/common | |
parent | 0717d50fc4ff983b79093bdef43b04e4584cc3cd (diff) | |
download | gcc-85fa334fbcaa8e4b98ab197a8c9410dde87f0ae3.zip gcc-85fa334fbcaa8e4b98ab197a8c9410dde87f0ae3.tar.gz gcc-85fa334fbcaa8e4b98ab197a8c9410dde87f0ae3.tar.bz2 |
RISC-V: Deduplicate arch subset list processing
We have a code duplication in riscv_set_arch_by_subset_list() and
riscv_parse_arch_string(), where the latter function parses an ISA string
into a subset_list before doing the same as the former function.
riscv_parse_arch_string() is used to process command line options and
riscv_set_arch_by_subset_list() processes target attributes.
So, it is obvious that both functions should do the same.
Let's deduplicate the code to enforce this.
gcc/ChangeLog:
* common/config/riscv/riscv-common.cc (riscv_set_arch_by_subset_list):
Fix overlong line.
(riscv_parse_arch_string): Replace duplicated code by a call to
riscv_set_arch_by_subset_list.
Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
Diffstat (limited to 'gcc/common')
-rw-r--r-- | gcc/common/config/riscv/riscv-common.cc | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index b9bda3e..dab2e76 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -1826,7 +1826,8 @@ riscv_set_arch_by_subset_list (riscv_subset_list *subset_list, else if (subset_list->xlen () == 64) opts->x_target_flags |= MASK_64BIT; - for (arch_ext_flag_tab = &riscv_ext_flag_table[0]; arch_ext_flag_tab->ext; + for (arch_ext_flag_tab = &riscv_ext_flag_table[0]; + arch_ext_flag_tab->ext; ++arch_ext_flag_tab) { if (subset_list->lookup (arch_ext_flag_tab->ext)) @@ -1850,30 +1851,6 @@ riscv_parse_arch_string (const char *isa, if (!subset_list) return; - if (opts) - { - const riscv_ext_flag_table_t *arch_ext_flag_tab; - /* Clean up target flags before we set. */ - for (arch_ext_flag_tab = &riscv_ext_flag_table[0]; - arch_ext_flag_tab->ext; - ++arch_ext_flag_tab) - opts->*arch_ext_flag_tab->var_ref &= ~arch_ext_flag_tab->mask; - - if (subset_list->xlen () == 32) - opts->x_target_flags &= ~MASK_64BIT; - else if (subset_list->xlen () == 64) - opts->x_target_flags |= MASK_64BIT; - - - for (arch_ext_flag_tab = &riscv_ext_flag_table[0]; - arch_ext_flag_tab->ext; - ++arch_ext_flag_tab) - { - if (subset_list->lookup (arch_ext_flag_tab->ext)) - opts->*arch_ext_flag_tab->var_ref |= arch_ext_flag_tab->mask; - } - } - /* Avoid double delete if current_subset_list equals cmdline_subset_list. */ if (current_subset_list && current_subset_list != cmdline_subset_list) delete current_subset_list; @@ -1881,7 +1858,10 @@ riscv_parse_arch_string (const char *isa, if (cmdline_subset_list) delete cmdline_subset_list; - current_subset_list = cmdline_subset_list = subset_list; + cmdline_subset_list = subset_list; + /* current_subset_list is set in the call below. */ + + riscv_set_arch_by_subset_list (subset_list, opts); } /* Return the riscv_cpu_info entry for CPU, NULL if not found. */ |