From: Segher Boessenkool <segher@kernel.crashing.org>
To: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Boqun Feng <boqun.feng@gmail.com>,
linuxppc-dev <linuxppc-dev@lists.ozlabs.org>,
Michael Jeanson <mjeanson@efficios.com>
Subject: Re: Failure to build librseq on ppc
Date: Thu, 9 Jul 2020 15:46:09 -0500 [thread overview]
Message-ID: <20200709204609.GQ3598@gate.crashing.org> (raw)
In-Reply-To: <1682947575.7422.1594317379612.JavaMail.zimbra@efficios.com>
On Thu, Jul 09, 2020 at 01:56:19PM -0400, Mathieu Desnoyers wrote:
> > Just to make sure I understand your recommendation. So rather than
> > hard coding r17 as the temporary registers, we could explicitly
> > declare the temporary register as a C variable, pass it as an
> > input operand to the inline asm, and then refer to it by operand
> > name in the macros using it. This way the compiler would be free
> > to perform its own register allocation.
> >
> > If that is what you have in mind, then yes, I think it makes a
> > lot of sense.
>
> Except that asm goto have this limitation with gcc: those cannot
> have any output operand, only inputs, clobbers and target labels.
> We cannot modify a temporary register received as input operand. So I don't
> see how to get a temporary register allocated by the compiler considering
> this limitation.
Heh, yet another reason not to obfuscate your inline asm: it didn't
register this is asm goto.
A clobber is one way, yes (those *are* allowed in asm goto). Another
way is to not actually change that register: move the original value
back into there at the end of the asm! (That isn't always easy to do,
it depends on your code). So something like
long start = ...;
long tmp = start;
asm("stuff that modifies %0; ...; mr %0,%1" : : "r"(tmp), "r"(start));
is just fine: %0 isn't actually modified at all, as far as GCC is
concerned, and this isn't lying to it!
Segher
next prev parent reply other threads:[~2020-07-09 20:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-07 19:17 Failure to build librseq on ppc Mathieu Desnoyers
2020-07-08 0:59 ` Segher Boessenkool
2020-07-08 12:27 ` Michael Ellerman
2020-07-08 23:53 ` Segher Boessenkool
2020-07-09 0:01 ` Mathieu Desnoyers
2020-07-09 0:18 ` Segher Boessenkool
2020-07-09 13:43 ` Mathieu Desnoyers
2020-07-09 17:37 ` Segher Boessenkool
2020-07-09 17:42 ` Mathieu Desnoyers
2020-07-09 17:56 ` Mathieu Desnoyers
2020-07-09 20:46 ` Segher Boessenkool [this message]
2020-07-09 20:57 ` Mathieu Desnoyers
2020-07-09 20:31 ` Segher Boessenkool
2020-07-08 12:33 ` Mathieu Desnoyers
2020-07-08 14:00 ` Mathieu Desnoyers
2020-07-08 14:21 ` Christophe Leroy
2020-07-08 14:32 ` Mathieu Desnoyers
2020-07-08 16:11 ` Christophe Leroy
2020-07-09 0:15 ` Segher Boessenkool
2020-07-09 0:10 ` Segher Boessenkool
2020-07-09 13:33 ` Mathieu Desnoyers
2020-07-09 17:31 ` Segher Boessenkool
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=20200709204609.GQ3598@gate.crashing.org \
--to=segher@kernel.crashing.org \
--cc=boqun.feng@gmail.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mjeanson@efficios.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.