ということに最近気づきました
_m128 m = _mm_set_ps(0,1,2,3);
float 配列にキャストするときに、4 つの float を逆の順序にします。
(float*) p = (float*)(&m);
// p[0] == 3
// p[1] == 2
// p[2] == 1
// p[3] == 0
また、同じことが起こりunion { _m128 m; float[4] a; }
ます。
SSE 操作がこの順序付けを使用するのはなぜですか? 大したことではありませんが、少し混乱します。
そして、フォローアップの質問:
インデックスによって配列内の要素にアクセスする場合、順序0..3
または順序でアクセスする必要があり3..0
ますか?