如何加载16个8位数据并将它们连接到4个unsigned int?

时间:2012-02-22 16:26:26

标签: assembly sse intrinsics sse2

有没有任何优雅的方法来加载16个8位数据并将它们连接到4个unsigned int?

如下:

通过_mm_load_si128()将以下数组(16 epi8)加载到__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 个答案:

答案 0 :(得分:1)

是的:什么都不做。加载后,寄存器已处于所需状态。 (假设0xbbaa8899是一个拼写错误,实际上你的意思是0xbbaa9988,无论如何。)

答案 1 :(得分:0)

只需创建4个int指针并将m128存储在这些指针所针对的顺序存储器中。

或者有一个int [4]数组并将m128存储到数组所在的内存中,然后数组[0..3]是你的4个整数。

或者如果你已经有16字节数组,只需将内存转换为索引0,4,8,12的整数。