インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ここでは、整数シフト演算用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数について説明します。インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
各組込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。R、R0、R1、... R7 は、結果が配置されるレジスターを表します。
引数 count は、シフトするオペランドのすべての要素に適用されます。要素ごとに異なる量をシフトするベクトル・シフト・カウントではありません。
組込み関数 |
演算 |
シフトの種類 |
対応するインテル® SSE2 命令 |
---|---|---|---|
_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) |