Недавно я заметил, что
_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
То же самое происходит и с union { _m128 m; float[4] a; }
.
Почему SSE-операции используют этот порядок? Это неважно, но немного запутанно.
И следующий вопрос:
При обращении к элементам в массиве по индексу следует получить доступ в порядке 0..3
или в порядке 3..0
?