[PATCH] ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ (part1)

Måns Rullgård mans at mansr.com
Tue Jul 1 13:04:15 PDT 2014


Will Deacon <will.deacon at arm.com> writes:

> Hi Mans,
>
> On Tue, Jul 01, 2014 at 06:24:43PM +0100, Måns Rullgård wrote:
>> Russell King - ARM Linux <linux at arm.linux.org.uk> writes:
>> > As you point out, "bx lr" /may/ be treated specially (I've actually been
>> 
>> Most, if not all, Cortex-A cores do this according the public TRMs.
>> They also do the same thing for "mov pc, lr" so there will probably be
>> no performance gain from this change.  It's still a good idea though,
>> since we don't know what future cores will do.
>
> Funnily enough, that's not actually true (and is more or less what prompted
> this patch after discussion with Russell). There are cores out there that
> don't predict mov pc, lr at all (let alone do anything with the return
> stack).

Even ones where the TRM says they do?  I suppose the only way to know
for sure is to measure it.

>> > discussing this with Will Deacon over the last couple of days, who has
>> > also been talking to the hardware people in ARM, and Will is happy with
>> > this patch as in its current form.)  This is why I've changed all
>> > "mov pc, reg" instructions which return in some way to use this macro,
>> > and left others (those which are used to call some function and return
>> > back to the same point) alone.
>> 
>> In that case the patch should be fine.  Your patch description didn't
>> make it clear that only actual returns were being changed.
>
> I'm led to believe that some predictors require lr in order to update the
> return stack, whilst others don't. That part is all horribly
> micro-architectural, so the current patch is doing the right thing by
> sticking to the ARM ARM but enabling us to hook into other registers later
> on if we choose.

Agreed.

-- 
Måns Rullgård
mans at mansr.com



More information about the linux-arm-kernel mailing list