我最近注意到
_m128 m = _mm_set_ps(0,1,2,3);
当转换为浮点数组时,将 4 个浮点数倒序排列:
(float*) p = (float*)(&m);
// p[0] == 3
// p[1] == 2
// p[2] == 1
// p[3] == 0
同样的情况也发生在 a 上union { _m128 m; float[4] a; }
。
为什么 SSE 操作使用此排序?这没什么大不了的,但有点令人困惑。
还有一个后续问题:
通过索引访问数组中的元素时,应该按顺序访问0..3
还是按顺序访问3..0
?