From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Erik de Castro Lopo <mle+cl@mega-nerd.com>
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: PowerPC assembler question
Date: Mon, 10 Jun 2013 09:21:35 +1000 [thread overview]
Message-ID: <1370820095.14883.45.camel@pasglop> (raw)
In-Reply-To: <20130610090135.a002eba2401c06eedfa7b7ec@mega-nerd.com>
On Mon, 2013-06-10 at 09:01 +1000, Erik de Castro Lopo wrote:
> Hi all,
>
> I'm trying to fix a problem in the PowerPC backend of the Glasgow
> Haskell Compiler (GHC) and have a problem with the following
> instruction form:
>
> lwz 30, .label - (1b)(31)
>
> Reading the documentation I could find, I have figured out that this
> loads a 16 bit value into register 30. How it calculates that 16 bit
> value has got me somewhat flumoxed.
>
> Anybody care to explain?
No, this loads a 32-bit value (16-bit would be lhz).
Note: It's more readable if you use the register names, ie:
lwz %r30, .label - (1b)(%r31)
The form of lwz is
lwz dest_reg, offset(address_reg)
So it will load a 32-bit value from memory at the address contained in
r31 offset by ".label - 1b" which is itself the difference between
two labels, "label", and the first "1:" label before the instruction
(gcc supports numeric labels that can be referenced with the suffix "b"
for backward and "f" for forward which are handy for small
displacements)
So for example if 1: was the base of the structure and .label a field
in the structure, it would load the 32-bit value of that field for the
structure instance starting at %r31.
In this case, this looks more like some kind of position-independent
code though.
Cheers,
Ben.
next prev parent reply other threads:[~2013-06-09 23:21 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-09 23:01 PowerPC assembler question Erik de Castro Lopo
2013-06-09 23:21 ` Benjamin Herrenschmidt [this message]
2013-06-10 11:14 ` Erik de Castro Lopo
2013-06-10 12:41 ` David Laight
2013-06-16 6:30 ` Erik de Castro Lopo
2013-06-17 2:55 ` Benjamin Herrenschmidt
2013-06-10 21:43 ` Benjamin Herrenschmidt
-- strict thread matches above, loose matches on Subject: below --
2013-06-09 23:01 Erik de Castro Lopo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1370820095.14883.45.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mle+cl@mega-nerd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).