On Thu, Nov 14, 2019 at 06:14:47PM -0500, Michael Meissner wrote:
> * config/rs6000/linux64.h (TARGET_PREFIXED_ADDR_DEFAULT): Enable
> prefixed addressing by default.
> (TARGET_PCREL_DEFAULT): Enable pc-relative addressing by default.
> * config/rs6000/rs6000-cpus.def (ISA_FUTURE_MASKS_SERVER): Only
> enable -mprefixed-addr and -mpcrel if the OS tm.h says to enable
> it.
> (ADDRESSING_FUTURE_MASKS): New mask macro.
> (OTHER_FUTURE_MASKS): Use ADDRESSING_FUTURE_MASKS.
> * config/rs6000/rs6000.c (TARGET_PREFIXED_ADDR_DEFAULT): Do not
> enable -mprefixed-addr unless the OS tm.h says to.
> (TARGET_PCREL_DEFAULT): Do not enable -mpcrel unless the OS tm.h
> says to.
> (rs6000_option_override_internal): Do not enable -mprefixed-addr
> or -mpcrel unless the OS tm.h says to enable it. Add more checks
> for -mcpu=future.
> +/* Support for a future processor's features. The prefixed and pc-relative
> + addressing bits are not added here. Instead, rs6000.c adds them if the OS
> + tm.h says that it supports the addressing modes. */
This comment could be a lot clearer. It should just say it is about
ADRESSING_FUTURE_MASKS, and not mention rs6000.c at all.
> #define ISA_FUTURE_MASKS_SERVER (ISA_3_0_MASKS_SERVER
> \
> - | OPTION_MASK_FUTURE \
> + | OPTION_MASK_FUTURE)
> +
> +/* Addressing related flags on a future processor. These flags are broken
> out
> + because not all targets will support either pc-relative addressing, or
> even
> + prefixed addressing, and we want to clear all of the addressing bits
> + on targets that cannot support prefixed/pcrel addressing. */
> +#define ADDRESSING_FUTURE_MASKS (OPTION_MASK_PCREL
> \
> | OPTION_MASK_PREFIXED_ADDR)
> --- gcc/config/rs6000/rs6000.c (revision 278181)
> +++ gcc/config/rs6000/rs6000.c (working copy)
> @@ -98,6 +98,16 @@
> #endif
> #endif
>
> +/* Set up the defaults for whether prefixed addressing is used, and if it is
> + used, whether we want to turn on pc-relative support by default. */
> +#ifndef TARGET_PREFIXED_ADDR_DEFAULT
> +#define TARGET_PREFIXED_ADDR_DEFAULT 0
> +#endif
> +
> +#ifndef TARGET_PCREL_DEFAULT
> +#define TARGET_PCREL_DEFAULT 0
> +#endif
"DEFAULT" is a bad name for this? "SUPPORTED"?
We do *not* turn on prefixed or pcrel by default on most linux64 targets
-- most of those are p9 or p8 or p7 or older! So "SUPPORTED" isn't good
either. SUPPORTED_BY_OS?
A name like "XXX_DEFAULT" inevitably means we will later get an
"XXX_REALLY_DEFAULT" macro as well. Not good.
> + /* Enable prefixed addressing and pc-relative addressing on 64-bit ELF v2
> + systems if the OS tm.h file says that it is supported and the user did
> not
> + explicitly use -mprefixed-addr or -mpcrel. At the present time, only
> + 64-bit Linux enables this.
> + /* Enable defaults if desired. */
This comment does not say anything. Please say something like "Enable
PCREL and PREFIXED if [...]"
> + else
> + {
> + if (!explicit_prefixed
> + && (TARGET_PREFIXED_ADDR_DEFAULT
> + || TARGET_PCREL
> + || TARGET_PCREL_DEFAULT))
> + rs6000_isa_flags |= OPTION_MASK_PREFIXED_ADDR;
> +
> + if (!explicit_pcrel && TARGET_PCREL_DEFAULT
> + && TARGET_CMODEL == CMODEL_MEDIUM)
> + rs6000_isa_flags |= OPTION_MASK_PCREL;
> + }
> + }
... and I don't understand this code. If you use -mpcrel but you do not
have the medium model, you _do_ get prefixed but you do _not_ get pcrel?
And this all quietly?
Segher