SIMD - _mm_set_epi32 - установка значений наоборот

Извините, подскажите пожалуйста, почему или зачем в функции _mm_set_epi32 установки значений - сделана установка, как бы в обратном порядке ?

__m128i _mm_set_epi32 (int e3, int e2, int e1, int e0)

Устанавливает упакованные 32-битные целые числа в dst с предоставленными значениями.

Operation:
dst[31:0] := e0
dst[63:32] := e1
dst[95:64] := e2
dst[127:96] := e3

То есть как видно из описания, если я сделаю:

__m128i my_m128i =  _mm_set_epi32 (0, 1, 2, 3);

Значения занесутся в вектор, как бы не слева на право, как обычно это делается при инициализации к примеру массива, а наоборот с права на лево.

Зачем такая "путаница" ?


Ответы (1 шт):

Автор решения: mazik7512

Нумерация битов идет с конца, то есть если представить последовательность бит как массив то нулевой индекс в данном случае будет равен 127.

И получается что e3 записывается в старшие биты со 127 по 96, а e0 в младшие с 31 по 0.

То есть такой порядок обусловлен тем, что именно в нем будут храниться значения.

→ Ссылка