shufpsにはまる
MMX2 命令の pshufw とは挙動が違うのに注意してください.
ぐへ、本当だよ。まさかこんな仕様になっているとは...。
#includeint main () { float a[4] = {1.0, 2.0, 3.0, 4.0}; float b[4] = {5.0, 6.0, 7.0, 8.0}; float c[4]; asm (" \ movups (%1), %%xmm1;\ movups (%2), %%xmm2;\ shufps $4, %%xmm2, %%xmm1;\ movups %%xmm1,%0;\ " : "=g" (c) : "r" (&a), "r" (&b)); printf ("c={%g,%g,%g,%g}\n", c[0], c[1], c[2], c[3]); return 0; }
この結果は"c={1,2,5,5}"になるのでした。がっくし。