Как загрузить 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.

Другие вопросы по тегам