]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V: Deduplicate arch subset list processing
authorChristoph Müllner <christoph.muellner@vrull.eu>
Thu, 4 Jul 2024 23:09:46 +0000 (01:09 +0200)
committerChristoph Müllner <christoph.muellner@vrull.eu>
Tue, 9 Jul 2024 13:21:15 +0000 (15:21 +0200)
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>
gcc/common/config/riscv/riscv-common.cc

index b9bda3e110a2f77623c5c857bec64c2d51b703c2..dab2e76796538655a028ded75d3f732c3d9393ff 100644 (file)
@@ -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.  */