Validity of __asm__ transformation with "m" reference
Michael Matz
matz@suse.de
Mon Jul 4 13:50:00 GMT 2011
Hi,
On Fri, 1 Jul 2011, Jakub Jelinek wrote:
> > 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.
>
> But you said the operand is an int sized memory, while you expect
> 4 times as big data with different alignment.
> So you want "m"(*(__m128d *)nnnn) (or "m"(*(__m128i *)nnnn) ).
Right. But even then the replacement of a memory location with a constant
seems useless in an asm operand whose constraint requires memory. The
only thing that we get out of this is some shuffling between the old and
some temporary memory.
Ciao,
Michael.
More information about the Gcc
mailing list