In recent versions of GCC I have seen a transformation of inline assembly that I'd like to confirm is valid.
The code in question can be found in mplayer/mp3lib/dct64_sse.c "movaps %0, %%xmm0\n\t" "shufps $27, %%xmm0, %%xmm0\n\t" "movaps %1, %%xmm5\n\t" "movaps %%xmm5, %%xmm6\n\t" : :"m"(*costab), "m"(*nnnn) where nnnn is static const int nnnn[4] __attribute__((aligned(16))) = { 1 << 31, 1 << 31, 1 << 31, 1 << 31 }; GCC turns this into: "movaps %0, %%xmm0 shufps $27, %%xmm0, %%xmm0 movaps %1, %%xmm5 movaps %%xmm5, %%xmm6 " : : "m" costab_mmx[24], *"m" -2147483648*); The new constant might end up in an unaligned address causing the program to segfault on Intel platforms. Marking nnnn volatile or changing the code to the following avoids the transformation: __asm__( "movaps %a0, %%xmm0\n\t" "shufps $27, %%xmm0, %%xmm0\n\t" "movaps %a1, %%xmm5\n\t" "movaps %%xmm5, %%xmm6\n\t" : :"p"(costab), "p"(nnnn) ); Thanks! Martin