This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Unrevied patches^3
> Date: Mon, 20 Oct 2003 00:31:13 -0700
> From: Richard Henderson <rth@redhat.com>
> On Sun, Oct 19, 2003 at 07:16:58PM -0700, Geoff Keating wrote:
> > I don't understand what you mean by "the high part is a load from the
> > GOT". If you can load the high part from the GOT, why don't you just
> > load the whole address from there?
>
> It's a somewhat clever scheme to reduce the number of got entries
> for local data. Instead of having one entry per referenced local,
> you have one entry per 64k "page". Addresses are formed with
>
> lw r2, %got_page(x)(gp)
> la r3, %got_ofst(x)(r2)
>
> and of course the second insn can also be folded into memory
> operations, so it's often effectively free.
>
> Of course, this *could* be represented just as (HIGH X).
OK, that makes sense. In that case, the right thing to do is to
represent the first instruction as something like:
(set (reg r2) (mem ...)) (REG_EQUIV (high (symbol_ref "x")))
or, as in rth's suggestion, just do:
(set (reg r2) (high (symbol_ref "x")))
--
- Geoffrey Keating <geoffk@geoffk.org>