2012-03-08 Michael Meissner <meissner@the-meissners.org>
authormeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Mar 2012 16:56:25 +0000 (16:56 +0000)
committermeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Mar 2012 16:56:25 +0000 (16:56 +0000)
* config/rs6000/linux64.h (OPTION_TARGET_CPU_DEFAULT): Do not
redefine to be NULL if the current bit-size is different from the
configured bit-size.

* config/rs6000/rs6000.c (rs6000_option_override_internal): If the
cpu is defaulted, use PROCESSOR_DEFAULT and PROCESSOR_DEFAULT64 to
set the default tuning.  Add asserts to make sure the cpu and tune
indexes are defined.  Fix tests for cpu/tune index to use >= 0 to
test whether the index is set, instead of > 0.
(rs6000_file_start): Do not reset the default cpu if the current
bit-size is different from the configured bit-size.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185146 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/linux64.h
gcc/config/rs6000/rs6000.c

index 95ce3eb..cc4df12 100644 (file)
@@ -1,3 +1,17 @@
+2012-03-09  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * config/rs6000/linux64.h (OPTION_TARGET_CPU_DEFAULT): Do not
+       redefine to be NULL if the current bit-size is different from the
+       configured bit-size.
+
+       * config/rs6000/rs6000.c (rs6000_option_override_internal): If the
+       cpu is defaulted, use PROCESSOR_DEFAULT and PROCESSOR_DEFAULT64 to
+       set the default tuning.  Add asserts to make sure the cpu and tune
+       indexes are defined.  Fix tests for cpu/tune index to use >= 0 to
+       test whether the index is set, instead of > 0.
+       (rs6000_file_start): Do not reset the default cpu if the current
+       bit-size is different from the configured bit-size.
+
 2012-03-09  Tristan Gingold  <gingold@adacore.com>
 
        * config/vms/vms-crtlmap.map: Add comments.
index 972f353..7c516eb 100644 (file)
@@ -159,15 +159,6 @@ extern int dot_symbols;
     }                                                          \
   while (0)
 
-#ifdef RS6000_BI_ARCH
-
-#undef OPTION_TARGET_CPU_DEFAULT
-#define        OPTION_TARGET_CPU_DEFAULT \
-  (((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \
-   ? (char *) 0 : TARGET_CPU_DEFAULT)
-
-#endif
-
 #undef ASM_DEFAULT_SPEC
 #undef ASM_SPEC
 #undef LINK_OS_LINUX_SPEC
index 5558f77..bdd11cc 100644 (file)
@@ -2596,6 +2596,7 @@ static bool
 rs6000_option_override_internal (bool global_init_p)
 {
   bool ret = true;
+  bool have_cpu = false;
   const char *default_cpu = OPTION_TARGET_CPU_DEFAULT;
   int set_masks;
   int cpu_index;
@@ -2652,43 +2653,55 @@ rs6000_option_override_internal (bool global_init_p)
   /* Don't override by the processor default if given explicitly.  */
   set_masks &= ~target_flags_explicit;
 
-  /* Identify the processor type.  */
-  if (!default_cpu)
-    {
-      if (TARGET_POWERPC64)
-       default_cpu = "powerpc64";
-      else if (TARGET_POWERPC)
-       default_cpu = "powerpc";
-    }
-
   /* Process the -mcpu=<xxx> and -mtune=<xxx> argument.  If the user changed
      the cpu in a target attribute or pragma, but did not specify a tuning
      option, use the cpu for the tuning option rather than the option specified
      with -mtune on the command line.  */
-  if (rs6000_cpu_index > 0)
-    cpu_index = rs6000_cpu_index;
-  else if (main_target_opt != NULL && main_target_opt->x_rs6000_cpu_index > 0)
-    rs6000_cpu_index = cpu_index = main_target_opt->x_rs6000_cpu_index;
+  if (rs6000_cpu_index >= 0)
+    {
+      cpu_index = rs6000_cpu_index;
+      have_cpu = true;
+    }
+  else if (main_target_opt != NULL && main_target_opt->x_rs6000_cpu_index >= 0)
+    {
+      rs6000_cpu_index = cpu_index = main_target_opt->x_rs6000_cpu_index;
+      have_cpu = true;
+    }
   else
-    rs6000_cpu_index = cpu_index = rs6000_cpu_name_lookup (default_cpu);
+    {
+      if (!default_cpu)
+       default_cpu = (TARGET_POWERPC64 ? "powerpc64" : "powerpc");
+
+      rs6000_cpu_index = cpu_index = rs6000_cpu_name_lookup (default_cpu);
+    }
+
+  gcc_assert (cpu_index >= 0);
 
-  if (rs6000_tune_index > 0)
+  target_flags &= ~set_masks;
+  target_flags |= (processor_target_table[cpu_index].target_enable
+                  & set_masks);
+
+  if (rs6000_tune_index >= 0)
     tune_index = rs6000_tune_index;
-  else
+  else if (have_cpu)
     rs6000_tune_index = tune_index = cpu_index;
-
-  if (cpu_index >= 0)
+  else
     {
-      target_flags &= ~set_masks;
-      target_flags |= (processor_target_table[cpu_index].target_enable
-                      & set_masks);
+      size_t i;
+      enum processor_type tune_proc
+       = (TARGET_POWERPC64 ? PROCESSOR_DEFAULT64 : PROCESSOR_DEFAULT);
+
+      tune_index = -1;
+      for (i = 0; i < ARRAY_SIZE (processor_target_table); i++)
+       if (processor_target_table[i].processor == tune_proc)
+         {
+           rs6000_tune_index = tune_index = i;
+           break;
+         }
     }
 
-  rs6000_cpu = ((tune_index >= 0)
-               ? processor_target_table[tune_index].processor
-               : (TARGET_POWERPC64
-                  ? PROCESSOR_DEFAULT64
-                  : PROCESSOR_DEFAULT));
+  gcc_assert (tune_index >= 0);
+  rs6000_cpu = processor_target_table[tune_index].processor;
 
   if (rs6000_cpu == PROCESSOR_PPCE300C2 || rs6000_cpu == PROCESSOR_PPCE300C3
       || rs6000_cpu == PROCESSOR_PPCE500MC || rs6000_cpu == PROCESSOR_PPCE500MC64)
@@ -4023,11 +4036,6 @@ rs6000_file_start (void)
 
   default_file_start ();
 
-#ifdef TARGET_BI_ARCH
-  if ((TARGET_DEFAULT ^ target_flags) & MASK_64BIT)
-    rs6000_default_cpu = 0;
-#endif
-
   if (flag_verbose_asm)
     {
       sprintf (buffer, "\n%s rs6000/powerpc options:", ASM_COMMENT_START);