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.

Reply via email to