假设我有__m128i
包含4个32位整数值。
我是否可以通过某种方式将其存储在char[4]
中,其中每个int
值中的较低字符值存储在char
值中?
期望的结果:
r1 r2 r3 r4
__m128i 0x00000012 0x00000034 0x00000056 0x00000078
|
V
char[4] 0x12 0x34 0x56 0x78
SSE2及以下是优选的。 在MSVC ++上编译。
答案 0 :(得分:4)
使用SSE2,您可以使用以下代码:
char[4] array;
x = _mm_packs_epi32(x, x);
x = _mm_packus_epi16(x, x);
*((int*)array) = _mm_cvtsi128_si32(x);
答案 1 :(得分:2)
为了完整起见,使用SSSE3,您只需使用_mm_shuffle_epi8
进行一次重排操作即可。见here。你确实消耗了一个寄存器,这取决于对你来说更重要的东西。