0

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

ありがとう!

4

2 に答える 2

1

はい: 何もしません。ロード後、レジスタはすでに目的の状態になっています。(それがタイプミスであると仮定すると、とにかく、0xbbaa8899実際には を意味していました)。0xbbaa9988

于 2012-02-22T18:07:27.613 に答える
0

4 つの int ポインターを作成し、m128 をそれらのポインターが対象とするシーケンシャル メモリに格納するだけです。

または int[4] 配列を持ち、配列が配置されているメモリに m128 を格納すると、array[0..3] が 4 つの整数になります。

または、すでに 16 バイトの配列がある場合は、メモリをインデックス 0、4、8、12 の整数にキャストするだけです。

于 2012-02-23T13:30:27.730 に答える