This is a revision of a patch that I've submitted several times. It makes -mpcrel the default on Linux 64-bit systems that use ELF v2, use the medium code mode, and if the user did not disable prefixed load/store instructions for -mcpu=future.
Previous versions of the patch had two macros that the target os could set, one to say that the target os supported prefixed instructions with large numeric offsets, and the second whether PC-relative prefixed load/store instructions could be generated. Segher asked that we drop the capability to configure whether prefixed numeric load/store instructions would be enabled by default, and this patch does this. All of the PC-relative support is in the master branch, we just need to enable it by default. Is this patch acceptable to be committed to the master branch. I have done various tests with this patch, including most recently bootstraping and running make check. I have built the Spec 2017 benchmark suite with this patch. 2020-03-23 Michael Meissner <meiss...@linux.ibm.com> * config/rs6000/linux64.h (PCREL_SUPPORTED_BY_OS): Enable -mpcrel for -mcpu=future by default on 64-bit systems with medium code model. * config/rs6000/rs6000-cpus.def (ISA_FUTURE_MASKS_SERVER): Do not define the bits for -mprefixed or -mpcrel here. (OTHER_FUTURE_MASKS): Define the bits for -mprefixed and -mpcrel here. * config/rs6000/rs6000.c (PCREL_SUPPORTED_BY_OS): If not defined, don't enable -mpcrel by default. (rs6000_option_override_internal): Enable -mpcrel on systems that support it, if the user did not do -mno-pcrel. --- /tmp/QuuFm5_linux64.h 2020-03-20 20:15:38.321862650 -0400 +++ gcc/config/rs6000/linux64.h 2020-03-20 18:36:33.654484833 -0400 @@ -640,3 +640,11 @@ extern int dot_symbols; enabling the __float128 keyword. */ #undef TARGET_FLOAT128_ENABLE_TYPE #define TARGET_FLOAT128_ENABLE_TYPE 1 + +/* Enable support for PC-relative addressing on the 'future' system. Currently + this support only exits for the ELF v2 object file format using the medium + code model. */ +#undef PCREL_SUPPORTED_BY_OS +#define PCREL_SUPPORTED_BY_OS (TARGET_FUTURE && TARGET_PREFIXED \ + && ELFv2_ABI_CHECK \ + && (TARGET_CMODEL == CMODEL_MEDIUM)) --- /tmp/sO5cAE_rs6000-cpus.def 2020-03-20 20:15:38.331862575 -0400 +++ gcc/config/rs6000/rs6000-cpus.def 2020-03-20 17:05:17.347638233 -0400 @@ -75,11 +75,10 @@ | OPTION_MASK_P8_VECTOR \ | OPTION_MASK_P9_VECTOR) -/* Support for a future processor's features. Do not enable -mpcrel until it - is fully functional. */ +/* Support for a future processor's features. The addressing related options + (like -mprefixed, -mpcrel) are not set here. */ #define ISA_FUTURE_MASKS_SERVER (ISA_3_0_MASKS_SERVER \ - | OPTION_MASK_FUTURE \ - | OPTION_MASK_PREFIXED) + | OPTION_MASK_FUTURE) /* Flags that need to be turned off if -mno-future. */ #define OTHER_FUTURE_MASKS (OPTION_MASK_PCREL \ --- /tmp/xQt3Pd_rs6000.c 2020-03-20 20:15:38.343862485 -0400 +++ gcc/config/rs6000/rs6000.c 2020-03-20 20:11:02.942928364 -0400 @@ -98,6 +98,12 @@ #endif #endif +/* Set up the defaults for whether PC-relative addressing is supported by the + target system. */ +#ifndef PCREL_SUPPORTED_BY_OS +#define PCREL_SUPPORTED_BY_OS 0 +#endif + /* Support targetm.vectorize.builtin_mask_for_load. */ tree altivec_builtin_mask_for_load; @@ -4012,6 +4018,11 @@ rs6000_option_override_internal (bool gl rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW; } + /* Enable -mprefixed by default on 64-bit 'future' systems. */ + if (TARGET_FUTURE && TARGET_POWERPC64 + && (rs6000_isa_flags_explicit & OPTION_MASK_PREFIXED) == 0) + rs6000_isa_flags |= OPTION_MASK_PREFIXED; + /* -mprefixed (and hence -mpcrel) requires -mcpu=future. */ if (TARGET_PREFIXED && !TARGET_FUTURE) { @@ -4173,6 +4184,11 @@ rs6000_option_override_internal (bool gl rs6000_isa_flags &= ~OPTION_MASK_PCREL; } + /* If the OS has support for PC-relative relocations, enable it now. */ + if (PCREL_SUPPORTED_BY_OS + && (rs6000_isa_flags_explicit & OPTION_MASK_PCREL) == 0) + rs6000_isa_flags |= OPTION_MASK_PCREL; + if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET) rs6000_print_isa_options (stderr, 0, "after subtarget", rs6000_isa_flags); -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797