5

SSE2 を使用して 16 x 8 ビットの符号なし整数をロードする次のコード行があるとします。

// ptr is a pointer to uint8_t array
__m128i b = _mm_load_si128((const __m128i*) ptr);

b各 8 ビットの符号なし整数(合計 16 個) を 4 ビットの上位部分と 4 ビットの下位部分に分割したいと思います。どうやってやるの?

4

1 に答える 1

3

下部をマスクし、上部を正しい位置に移動する必要があります。バイトシフト SSE 命令がないため、シフト後に上位部分もマスクする必要があります。

__m128i b =  _mm_load_si128((const __m128i*) ptr);
__m128i mask = _mm_set1_epi8(0xf);
__m128i lower = _mm_and_si128(b, mask);
__m128i upper = _mm_and_si128(_mm_srli_epi16(b, 4), mask);
于 2012-10-09T09:58:06.920 に答える