Subject: Re: Possible bug in arm32 strongarm optimisations.
To: Chris Gilbert <chris@buzzbee.freeserve.co.uk>
From: Reinoud Zandijk <imago@kabel065011.kabel.utwente.nl>
List: port-arm32
Date: 10/25/2000 02:21:09
Hi Chris,
On Wed, 25 Oct 2000, Chris Gilbert wrote:
> I've been trying to build an arm32 kernel with the -mcpu=strongarm
> -mtune=strongarm.
Oh ok
> The problem I've had is that the podulebus doesn't get devices attaching
> properly. Anyway, after doing some rummaging around in the .s files from a
> kernel with and without the above options it seems that it's doing the
> following optimsation:
> turning:
> ldr r3, [r5, #6]
> mov r0, r3, lsr #16
> into
> ldrh r0, [r5, #4]
>
> This occurs at about line 289/290 of sys/arch/arm32/podulebus/podulebus.c
> I believe it should actually produce:
> ldrh r0, [r5, #8]
Well i chalenge that :)
Lets say the memory is represented as follows from r5 :
7 6 5 4 | 3 2 1 0
ldr r3, [r5, #6]
r3 <- [5476] // (in)famous rotating
mov r0, r3, lsr # 16
r0 <- [--54] // with the `-' zero
The optimalisation implemented is :
ldrh r0, [r5, #4]
r0 <- [--54] // the same
Your sequence
ldrh r0, [r5, #8]
would read bytes outside the 8 bytes even....
Cheers !!,
Reinoud