Как загрузить 16 8-битных данных и объединить их в 4 без знака int?
Есть ли какой-нибудь элегантный способ загрузить 16 8-битных данных и объединить их в 4 unsigned int?
как следует:
загрузить следующий массив (16 epi8) с помощью _mm_load_si128() в __m128i
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
а затем выполните некоторые манипуляции, чтобы регистр (__m128i) стал 4 epi32,
0x33221100, 0x77665544, 0xbbaa8899, 0xffeeddcc
Спасибо!
2 ответа
Да, ничего не делать. После загрузки реестр уже находится в нужном вам состоянии. (При условии, что 0xbbaa8899
это опечатка, и вы на самом деле имели в виду 0xbbaa9988
, тем не мение).
Просто создайте 4 int-указателя и сохраните ваш m128 в последовательной памяти, на которую нацелены эти указатели.
Или используйте массив int[4] и сохраните ваш m128 в памяти, где расположен массив, тогда массив [0..3] - это ваши 4 целых числа.
Или, если у вас уже есть 16-байтовый массив, просто приведите память к целым числам с индексами 0, 4, 8, 12.