inline assembly & r0 SOS
Kevin Diggs
kevdig at hypersurf.com
Wed Aug 6 10:20:48 EST 2008
Hi,
If I have:
inline unsigned int get_PLL_range(unsigned int range, unsigned int
config)
{
unsigned int ret;
/*
* Turn r3 (range) into a rotate count for the selected range.
* 0 -> 23, 1 -> 31
*/
__asm__ __volatile__ ( "slwi %0,%0,3\n"
"addi %0,%0,23\n"
"rlwnm %0,%1,%0,30,31\n":
"=r"(ret):
"r"(config),"0"(range)
);
return ret;
}
in a header and the resultant code generated is:
.L58:
li 0,1 # ratio,
mr 29,0 # ret, ratio
#APP
slwi 29,29,3 # ret
addi 29,29,21 # ret
rlwnm 29,28,29,27,31 # ret, ret
slwi 0,0,3 # ret
addi 0,0,23 # ret
rlwnm 0,28,0,30,31 # ret, ret
#NO_APP
thats bad right? Because the "addi 0, 0, 23" will not work as expected
because of the "special property" of r0. FYI: The first three lines
after the "#APP" are from a similar function get_PLL_ratio().
Is there a way to blacklist r0?
kevin
More information about the Linuxppc-dev
mailing list