ストリーミング SIMD 拡張命令 2 (SSE2) に対応したシフト演算組み込み関数とその説明を下表に示します。
次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。
各組み込み関数演算の結果はレジスターに配置されます。ここでは、このレジスターを組み込み関数ごとに R および R0 から R7 までを使用して示します。R および R0 から R7 はそれぞれ、レジスターの 1 つの部分を表します。
SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
引数 count は、シフトするオペランドのすべての要素に適用されます。要素ごとに異なる量をシフトするベクトル・シフト・カウントではありません。
組み込み関数 | 操作 | シフト 種類 |
対応する 命令 |
---|---|---|---|
_mm_slli_si128 | 左シフト | 論理 | PSLLDQ |
_mm_slli_epi16 | 左シフト | 論理 | PSLLW |
_mm_sll_epi16 | 左シフト | 論理 | PSLLW |
_mm_slli_epi32 | 左シフト | 論理 | PSLLD |
_mm_sll_epi32 | 左シフト | 論理 | PSLLD |
_mm_slli_epi64 | 左シフト | 論理 | PSLLQ |
_mm_sll_epi64 | 左シフト | 論理 | PSLLQ |
_mm_srai_epi16 | 右シフト | 算術 | PSRAW |
_mm_sra_epi16 | 右シフト | 算術 | PSRAW |
_mm_srai_epi32 | 右シフト | 算術 | PSRAD |
_mm_sra_epi32 | 右シフト | 算術 | PSRAD |
_mm_srli_si128 | 右シフト | 論理 | PSRLDQ |
_mm_srli_epi16 | 右シフト | 論理 | PSRLW |
_mm_srl_epi16 | 右シフト | 論理 | PSRLW |
_mm_srli_epi32 | 右シフト | 論理 | PSRLD |
_mm_srl_epi32 | 右シフト | 論理 | PSRLD |
_mm_srli_epi64 | 右シフト | 論理 | PSRLQ |
_mm_srl_epi64 | 右シフト | 論理 | PSRLQ |
__m128i _mm_slli_si128(__m128i a, int imm)
a の 128 ビット値を imm バイトだけ左にシフトし、下位ビットを 0 で埋めます。imm は即値でなければなりません。
R |
---|
a << (imm * 8) |
__m128i _mm_slli_epi16(__m128i a, int count)
a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | ... | R7 |
---|---|---|---|
a0 << count | a1 << count | ... | a7 << count |
__m128i _mm_sll_epi16(__m128i a, __m128i count)
a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | ... | R7 |
---|---|---|---|
a0 << count | a1 << count | ... | a7 << count |
__m128i _mm_slli_epi32(__m128i a, int count)
a に含まれている 4 つの符号付きまたは符号なし 32 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 << count | a1 << count | a2 << count | a3 << count |
__m128i _mm_sll_epi32(__m128i a, __m128i count)
a に含まれている 4 つの符号付きまたは符号なし 32 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 << count | a1 << count | a2 << count | a3 << count |
__m128i _mm_slli_epi64(__m128i a, int count)
a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 |
---|---|
a0 << count | a1 << count |
__m128i _mm_sll_epi64(__m128i a, __m128i count)
a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 |
---|---|
a0 << count | a1 << count |
__m128i _mm_srai_epi16(__m128i a, int count)
a に含まれている 8 つの符号付き 16 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。
R0 | R1 | ... | R7 |
---|---|---|---|
a0 >> count | a1 >> count | ... | a7 >> count |
__m128i _mm_sra_epi16(__m128i a, __m128i count)
a に含まれている 8 つの符号付き 16 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。
R0 | R1 | ... | R7 |
---|---|---|---|
a0 >> count | a1 >> count | ... | a7 >> count |
__m128i _mm_srai_epi32(__m128i a, int count)
a に含まれている 4 つの符号付き 32 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 >> count | a1 >> count | a2 >> count | a3 >> count |
__m128i _mm_sra_epi32(__m128i a, __m128i count)
a に含まれている 4 つの符号付き 32 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 >> count | a1 >> count | a2 >> count | a3 >> count |
__m128i _mm_srli_si128(__m128i a, int imm)
a に含まれている 128 ビット値を右に imm バイトだけシフトし、ゼロをシフトインします。imm は即値でなければなりません。
R |
---|
srl(a, imm*8) |
__m128i _mm_srli_epi16(__m128i a, int count)
a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | ... | R7 |
---|---|---|---|
srl(a0, count) | srl(a1, count) | ... | srl(a7, count) |
__m128i _mm_srl_epi16(__m128i a, __m128i count)
a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | ... | R7 |
---|---|---|---|
srl(a0, count) | srl(a1, count) | ... | srl(a7, count) |
__m128i _mm_srli_epi32(__m128i a, int count)
a に含まれている 4 つの符号付きまたは符号なし 32 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | R2 | R3 |
---|---|---|---|
srl(a0, count) | srl(a1, count) | srl(a2, count) | srl(a3, count) |
__m128i _mm_srl_epi32(__m128i a, __m128i count)
a に含まれている 4 つの符号付きまたは符号なし 32 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 | R2 | R3 |
---|---|---|---|
srl(a0, count) | srl(a1, count) | srl(a2, count) | srl(a3, count) |
__m128i _mm_srli_epi64(__m128i a, int count)
a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 |
---|---|
srl(a0, count) | srl(a1, count) |
__m128i _mm_srl_epi64(__m128i a, __m128i count)
a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。
R0 | R1 |
---|---|
srl(a0, count) | srl(a1, count) |