2

假设我有一个__m128i包含 4 个 32 位整数值。

有什么方法可以将它存储在 a中,其中每个值char[4]的较低字符存储在一个值中?intchar

期望的结果:

           r1          r2          r3          r4
__m128i    0x00000012  0x00000034  0x00000056  0x00000078

  |
  V

char[4]    0x12        0x34        0x56        0x78     

首选 SSE2 及以下。在 MSVC++ 上编译。

4

2 回答 2

4

使用 SSE2,您可以使用以下代码:

char[4] array;
x = _mm_packs_epi32(x, x);
x = _mm_packus_epi16(x, x);
*((int*)array) = _mm_cvtsi128_si32(x);
于 2013-10-06T20:10:21.273 回答
2

为了完整起见,使用 SSSE3,您只需使用_mm_shuffle_epi8. 见这里。不过,您确实会多消耗一个寄存器,这取决于对您来说更重要的是什么。

于 2015-03-20T13:32:04.417 回答