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