2

__m128i4 つの 32 ビット整数値を含むがあるとします。

char[4]各値の下位文字がint値に格納される 内に格納する方法はありcharますか?

望ましい結果:

           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 を使用すると、 を使用して 1 回のシャッフル操作だけで実行できます_mm_shuffle_epi8ここを参照してください。ただし、1 つのレジスターをさらに消費しますが、それはあなたにとってより重要なものに依存します。

于 2015-03-20T13:32:04.417 に答える