asm inline

Franz Sirl Franz.Sirl-ppc at lauterbach.com
Tue Dec 3 02:12:27 EST 2002


At 14:11 02.12.2002, Samuel Rydh wrote:
>(unrelated: Does anyone understand why the compiler clears cr4.eq?)

Because you didn't give a prototype for TESTING.

>The compiler does the right thing if -fno-strict-aliasing is used or
>if 'int b' is replaced by 'ulong b'.

Well, the compiler was right before and as Andreas said, you are wrong. In
C *(ulong*)&B and *&B are different unrelated objects and the compiler
optimizes accordingly.

>Adding volatile after asm also fixes things (but I did not see
>this effect in the unsimplified example).

Besides the fact that it's almost always right in low-level inline assembly
to use __asm__ __volatile__ (because without the __volatile__ the __asm__
maybe hoisted out of loops if the compiler thinks it's a loop invariant),
you are just lucky that the __volatile__ fixes it.

So either fixup your code (with unions or char pointers) to be C compliant
or accept the performance penalty of -fno-strict-aliasing.

Franz.


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-dev mailing list