как загрузить 16 8-битных данных и объединить их в 4 без знака int? - PullRequest
0 голосов
/ 22 февраля 2012

Есть ли какой-нибудь элегантный способ загрузить 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 ]

1 голос
/ 22 февраля 2012

Да: ничего не делать.После загрузки реестр уже находится в нужном вам состоянии.(Предполагая, что 0xbbaa8899 является опечаткой, и вы действительно имели в виду 0xbbaa9988, в любом случае).

0 голосов
/ 23 февраля 2012

Просто создайте 4 int-указателя и сохраните ваш m128 в последовательной памяти, на которую нацелены эти указатели.

Или используйте массив int [4] и сохраните ваш m128 в памяти, где расположен массив, тогда массив [0..3] - это ваши 4 целых числа.

Или, если у вас уже есть 16-байтовый массив, просто приведите память к целым числам с индексами 0, 4, 8, 12.

...