From 8d852645145d10bbf72cbd82ef080a0057eb9c0e Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sun, 28 Jul 2019 18:56:13 +0930 Subject: [PATCH] [RS6000] Make assembler command line cpu match default for gcc When gcc is configured using --with-cpu=, the specified cpu effectively becomes a default -mcpu= passed to gcc. This then affects the cpu passed to gas via ASM_CPU_SPEC. If gcc is not configured using --with-cpu then the cpu passed to gas is that given by ASM_DEFAULT_SPEC, which currently does not match the default flags selected in default64.h. This patch makes ASM_DEFAULT_SPEC agree with TARGET_DEFAULT flags. rs6000/default64.h appears in three places in config.gcc, the first one immediately followed by rs6000/freebsd64.h in $tm_file, and the other two immediately followed by rs6000/linux64.h. To be able to define ASM_DEFAULT_SPEC in rs6000/default64.h we don't want to redefine in the other two files. rs6000/freebsd64.h is easy since that file is always preceded by rs6000/default64.h, but rs6000/linux64.h can appear without rs6000/default64.h (a powerpc*-linux config where the default is -m32). In that case we will have TARGET_DEFAULT flags of 0 (from rs6000/sysv4.h) and want to use -mppc without -m64 and -mppc64 with -m64. This can be done by using the rs6000/rtems.h ASM_DEFAULT_SPEC in rs6000/sysv4.h, a change that won't affect sysv4 configurations where -m64 is invalid. The patch also introduces ASM_DEFAULT_EXTRA for the altivec variant targets so as to enable -maltivec by default. PR target/91050 * config/rs6000/sysv4.h (ASM_DEFAULT_SPEC): Modify if -m64. * config/rs6000/default64.h (ASM_DEFAULT_SPEC): Define. * config/rs6000/freebsd64.h (ASM_DEFAULT_SPEC): Don't define. * config/rs6000/linux64.h (ASM_DEFAULT_SPEC): Likewise. * config/rs6000/rtems.h (ASM_DEFAULT_SPEC): Likewise. * config/rs6000/rs6000.h (ASM_DEFAULT_EXTRA): Define and use in asm_default spec. * config/rs6000/eabialtivec.h (ASM_DEFAULT_EXTRA): Redefine. * config/rs6000/linuxaltivec.h (ASM_DEFAULT_EXTRA): Redefine. From-SVN: r273853 --- gcc/ChangeLog | 13 +++++++++++++ gcc/config/rs6000/default64.h | 4 ++++ gcc/config/rs6000/eabialtivec.h | 3 +++ gcc/config/rs6000/freebsd64.h | 2 -- gcc/config/rs6000/linux64.h | 4 ---- gcc/config/rs6000/linuxaltivec.h | 3 +++ gcc/config/rs6000/rs6000.h | 3 ++- gcc/config/rs6000/rtems.h | 3 --- gcc/config/rs6000/sysv4.h | 2 +- 9 files changed, 26 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9239cad..d005cd9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2019-07-28 Alan Modra + + PR target/91050 + * config/rs6000/sysv4.h (ASM_DEFAULT_SPEC): Modify if -m64. + * config/rs6000/default64.h (ASM_DEFAULT_SPEC): Define. + * config/rs6000/freebsd64.h (ASM_DEFAULT_SPEC): Don't define. + * config/rs6000/linux64.h (ASM_DEFAULT_SPEC): Likewise. + * config/rs6000/rtems.h (ASM_DEFAULT_SPEC): Likewise. + * config/rs6000/rs6000.h (ASM_DEFAULT_EXTRA): Define and use + in asm_default spec. + * config/rs6000/eabialtivec.h (ASM_DEFAULT_EXTRA): Redefine. + * config/rs6000/linuxaltivec.h (ASM_DEFAULT_EXTRA): Redefine. + 2019-07-28 Gerald Pfeifer * doc/include/gpl_v3.texi (Copying): Use https for www.gnu.org. diff --git a/gcc/config/rs6000/default64.h b/gcc/config/rs6000/default64.h index 0cceefe..10743fe 100644 --- a/gcc/config/rs6000/default64.h +++ b/gcc/config/rs6000/default64.h @@ -25,7 +25,11 @@ along with GCC; see the file COPYING3. If not see #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN) #undef TARGET_DEFAULT #define TARGET_DEFAULT (ISA_2_7_MASKS_SERVER | MASK_POWERPC64 | MASK_64BIT | MASK_LITTLE_ENDIAN) +#undef ASM_DEFAULT_SPEC +#define ASM_DEFAULT_SPEC "-mpower8" #else #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_PPC_GFXOPT | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64 | MASK_64BIT) +#undef ASM_DEFAULT_SPEC +#define ASM_DEFAULT_SPEC "-mpower4" #endif diff --git a/gcc/config/rs6000/eabialtivec.h b/gcc/config/rs6000/eabialtivec.h index 6a95f90..6daa922 100644 --- a/gcc/config/rs6000/eabialtivec.h +++ b/gcc/config/rs6000/eabialtivec.h @@ -23,5 +23,8 @@ #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_EABI | MASK_ALTIVEC) +#undef ASM_DEFAULT_EXTRA +#define ASM_DEFAULT_EXTRA " %{!mvsx:%{!maltivec:%{!no-maltivec:-maltivec}}}" + #undef SUBSUBTARGET_OVERRIDE_OPTIONS #define SUBSUBTARGET_OVERRIDE_OPTIONS rs6000_altivec_abi = 1 diff --git a/gcc/config/rs6000/freebsd64.h b/gcc/config/rs6000/freebsd64.h index 7e819d1..4951275 100644 --- a/gcc/config/rs6000/freebsd64.h +++ b/gcc/config/rs6000/freebsd64.h @@ -134,11 +134,9 @@ extern int dot_symbols; } \ while (0) -#undef ASM_DEFAULT_SPEC #undef ASM_SPEC #undef LINK_OS_FREEBSD_SPEC -#define ASM_DEFAULT_SPEC "-mppc%{!m32:64}" #define ASM_SPEC "%{m32:%(asm_spec32)}%{!m32:%(asm_spec64)} %(asm_spec_common)" #define LINK_OS_FREEBSD_SPEC "%{m32:%(link_os_freebsd_spec32)}%{!m32:%(link_os_freebsd_spec64)}" diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index bd19749..ba5f640 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -181,24 +181,20 @@ extern int dot_symbols; } \ while (0) -#undef ASM_DEFAULT_SPEC #undef ASM_SPEC #undef LINK_OS_LINUX_SPEC #undef LINK_SECURE_PLT_SPEC #ifndef RS6000_BI_ARCH -#define ASM_DEFAULT_SPEC "-mppc64" #define ASM_SPEC "%(asm_spec64) %(asm_spec_common)" #define LINK_OS_LINUX_SPEC "%(link_os_linux_spec64)" #define LINK_SECURE_PLT_SPEC "" #else #if DEFAULT_ARCH64_P -#define ASM_DEFAULT_SPEC "-mppc%{!m32:64}" #define ASM_SPEC "%{m32:%(asm_spec32)}%{!m32:%(asm_spec64)} %(asm_spec_common)" #define LINK_OS_LINUX_SPEC "%{m32:%(link_os_linux_spec32)}%{!m32:%(link_os_linux_spec64)}" #define LINK_SECURE_PLT_SPEC "%{m32: " LINK_SECURE_PLT_DEFAULT_SPEC "}" #else -#define ASM_DEFAULT_SPEC "-mppc%{m64:64}" #define ASM_SPEC "%{!m64:%(asm_spec32)}%{m64:%(asm_spec64)} %(asm_spec_common)" #define LINK_OS_LINUX_SPEC "%{!m64:%(link_os_linux_spec32)}%{m64:%(link_os_linux_spec64)}" #define LINK_SECURE_PLT_SPEC "%{!m64: " LINK_SECURE_PLT_DEFAULT_SPEC "}" diff --git a/gcc/config/rs6000/linuxaltivec.h b/gcc/config/rs6000/linuxaltivec.h index 0f3e24f..8578f42 100644 --- a/gcc/config/rs6000/linuxaltivec.h +++ b/gcc/config/rs6000/linuxaltivec.h @@ -28,5 +28,8 @@ #define TARGET_DEFAULT MASK_ALTIVEC #endif +#undef ASM_DEFAULT_EXTRA +#define ASM_DEFAULT_EXTRA " %{!mvsx:%{!maltivec:%{!mno-altivec:-maltivec}}}" + #undef SUBSUBTARGET_OVERRIDE_OPTIONS #define SUBSUBTARGET_OVERRIDE_OPTIONS rs6000_altivec_abi = 1 diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 70e0616..6c24b48 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -157,6 +157,7 @@ ASM_OPT_ANY #define CPP_DEFAULT_SPEC "" #define ASM_DEFAULT_SPEC "" +#define ASM_DEFAULT_EXTRA "" /* This macro defines names of additional specifications to put in the specs that can be used in various specifications like CC1_SPEC. Its definition @@ -174,7 +175,7 @@ ASM_OPT_ANY { "cpp_default", CPP_DEFAULT_SPEC }, \ { "asm_cpu", ASM_CPU_SPEC }, \ { "asm_cpu_native", ASM_CPU_NATIVE_SPEC }, \ - { "asm_default", ASM_DEFAULT_SPEC }, \ + { "asm_default", ASM_DEFAULT_SPEC ASM_DEFAULT_EXTRA }, \ { "cc1_cpu", CC1_CPU_SPEC }, \ SUBTARGET_EXTRA_SPECS diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h index 401077d..0c19802 100644 --- a/gcc/config/rs6000/rtems.h +++ b/gcc/config/rs6000/rtems.h @@ -254,9 +254,6 @@ %{mcpu=8540: %{!Dppc*: %{!Dmpc*: -Dppc8540} } } \ %{mcpu=e6500: -D__PPC_CPU_E6500__}" -#undef ASM_DEFAULT_SPEC -#define ASM_DEFAULT_SPEC "-mppc%{m64:64}" - #undef ASM_SPEC #define ASM_SPEC "%{!m64:%(asm_spec32)}%{m64:%(asm_spec64)} %(asm_spec_common)" diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index 17fea80..4645ef3 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -39,7 +39,7 @@ /* Override rs6000.h definition. */ #undef ASM_DEFAULT_SPEC -#define ASM_DEFAULT_SPEC "-mppc" +#define ASM_DEFAULT_SPEC "-mppc%{m64:64}" #define TARGET_HAS_TOC (TARGET_64BIT \ || (TARGET_MINIMAL_TOC \ -- 2.7.4