bug in arch/ppc/kernel/misc.S: __ashrdi3?

Andreas Schwab schwab at suse.de
Sun Jul 17 04:02:18 EST 2005


Benjamin Herrenschmidt <benh at kernel.crashing.org> writes:

> On Fri, 2005-07-15 at 18:01 +0200, Frank van Maarseveen wrote:
>> I don't really grok the code but an operand seems to be missing and the
>> assembler makes something out of it I don't trust:
>> 
>> _GLOBAL(__ashrdi3)
>> 	...
>> 	rlwinm  r8,r7,0,32      # t3 = (count < 32) ? 32 : 0
>
> This is equivalent to r8 = r7 & 32. It will definitely not do what the
> comment says though. If (count < 64), however, it will do something
> like r8 = (r7 < 32) ? 0 : 32. Paul, maybe we should dbl check what's
> going in there ?

r7 is count + 32, and ((count + 32) & 32) is equivalent to the expression
above if count < 64.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab at suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



More information about the Linuxppc-dev mailing list