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 шт):
Нумерация битов идет с конца, то есть если представить последовательность бит как массив то нулевой индекс в данном случае будет равен 127.
И получается что e3 записывается в старшие биты со 127 по 96, а e0 в младшие с 31 по 0.
То есть такой порядок обусловлен тем, что именно в нем будут храниться значения.