This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH], Patch #6, revision 3, Create pc-relative addressing insns
- From: Segher Boessenkool <segher at kernel dot crashing dot org>
- To: Michael Meissner <meissner at linux dot ibm dot com>, gcc-patches at gcc dot gnu dot org, dje dot gcc at gmail dot com
- Date: Tue, 16 Jul 2019 15:58:18 -0500
- Subject: Re: [PATCH], Patch #6, revision 3, Create pc-relative addressing insns
- References: <20190628000602.GA24286@ibm-toto.the-meissners.org> <20190716061913.GA20513@ibm-toto.the-meissners.org>
On Tue, Jul 16, 2019 at 02:19:14AM -0400, Michael Meissner wrote:
> I have changed the TARGET_TOC to be TARGET_HAS_TOC in the aix, darwin, system
> V, and Linux 64-bit headers. Then in rs6000.h, TARGET_TOC is defined in terms
> of TARGET_HAS_TOC and not pc-relative referencing.
Cool, thanks. Good name, too.
> I discovered that TARGET_NO_TOC must not be set to be just !TARGET_TOC, since
> TARGET_NO_TOC is used to create the elf_high, elf_low insns in 32-bit.
I don't know if your setting in sysv4.h works. This file is used on so
very many platforms, it is hard to predict if it works everywhere :-/
> I did rename the static variable 'set' that contained the alias set to
> I did not move the initialization of the TOC_alias_set
> elsewhere, because in order to call TOC_alias_set, the code has already called
> force_const_mem, create_TOC_reference, and gen_const_mem, so I didn't see the
> point of adding a micro-optimization for this.
It gets rid of a call, but also of the conditional, and that makes this
eminently inlinable. You could remove the getter function completely
even, access the variable directly.
But, sure, that's existing code only now.
> Index: gcc/config/rs6000/linux64.h
> --- gcc/config/rs6000/linux64.h (revision 273457)
> +++ gcc/config/rs6000/linux64.h (working copy)
> @@ -277,8 +277,8 @@ extern int dot_symbols;
> #ifndef RS6000_BI_ARCH
> /* 64-bit PowerPC Linux always has a TOC. */
> -#undef TARGET_TOC
> -#define TARGET_TOC 1
> +#undef TARGET_HAS_TOC
> +#define TARGET_HAS_TOC 1
Fix the tab while your at it? Not that it is consistent at all in this
file, but having the undef and the define in different style... :-)
So, what does TARGET_NO_TOC mean now? Maybe a better name would help,
or some documentation if not?
Looks good otherwise, okay for trunk. Thanks!
(And watch out if it works on AIX and Darwin, please).