David noticed that I set default_cpu twice in my previous patch. This patch fixes that, and also updates the ChangeLog message to indicate fixing some tests for using >= 0 instead of > 0, since processor 0 is a valid index. I've bootstrapped both 4.7 and 4.8 with this new patch. Is it ok to install? As I said, in the original message, we would like to install in 4.7 rather than waiting for 4.7.1.
2012-03-08 Michael Meissner <meiss...@the-meissners.org> * 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. -- Michael Meissner, IBM 5 Technology Place Drive, M/S 2757, Westford, MA 01886-3141, USA meiss...@linux.vnet.ibm.com fax +1 (978) 399-6899
Index: gcc/config/rs6000/linux64.h =================================================================== --- gcc/config/rs6000/linux64.h (revision 185105) +++ gcc/config/rs6000/linux64.h (working copy) @@ -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: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 185105) +++ gcc/config/rs6000/rs6000.c (working copy) @@ -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 gl /* 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); + } - if (rs6000_tune_index > 0) + gcc_assert (cpu_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);