インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

シフト組込み関数

ここでは、整数シフト演算用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数について説明します。インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。

各組込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。RR0R1、... 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

_mm_slli_si128

__m128i _mm_slli_si128(__m128i a, int imm);

a の 128 ビット値を imm バイトだけ左にシフトし、下位ビットを 0 で埋めます。imm は即値でなければなりません。

R

a << (imm * 8)

_mm_slli_epi16

__m128i _mm_slli_epi16(__m128i a, int count);

a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

...

R7

a0 << count

a1 << count

...

a7 << count

_mm_sll_epi16

__m128i _mm_sll_epi16(__m128i a, __m128i count);

a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

...

R7

a0 << count

a1 << count

...

a7 << count

_mm_slli_epi32

__m128i _mm_slli_epi32(__m128i a, int count);

a に含まれている 4 つの符号付きまたは符号なし 32 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

R2

R3

a0 << count

a1 << count

a2 << count

a3 << count

_mm_sll_epi32

__m128i _mm_sll_epi32(__m128i a, __m128i count);

a に含まれている 4 つの符号付きまたは符号なし 32 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

R2

R3

a0 << count

a1 << count

a2 << count

a3 << count

_mm_slli_epi64

__m128i _mm_slli_epi64(__m128i a, int count);

a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

a0 << count

a1 << count

_mm_sll_epi64

__m128i _mm_sll_epi64(__m128i a, __m128i count);

a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

a0 << count

a1 << count

_mm_srai_epi16

__m128i _mm_srai_epi16(__m128i a, int count);

a に含まれている 8 つの符号付き 16 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。

R0

R1

...

R7

a0 >> count

a1 >> count

...

a7 >> count

_mm_sra_epi16

__m128i _mm_sra_epi16(__m128i a, __m128i count);

a に含まれている 8 つの符号付き 16 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。

R0

R1

...

R7

a0 >> count

a1 >> count

...

a7 >> count

_mm_srai_epi32

__m128i _mm_srai_epi32(__m128i a, int count);

a に含まれている 4 つの符号付き 32 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。

R0

R1

R2

R3

a0 >> count

a1 >> count

a2 >> count

a3 >> count

_mm_sra_epi32

__m128i _mm_sra_epi32(__m128i a, __m128i count);

a に含まれている 4 つの符号付き 32 ビット整数を右に count ビットだけシフトし、その符号ビットをシフトインします。

R0

R1

R2

R3

a0 >> count

a1 >> count

a2 >> count

a3 >> count

_mm_srli_si128

__m128i _mm_srli_si128(__m128i a, int imm);

a に含まれている 128 ビット値を右に imm バイトだけシフトし、ゼロをシフトインします。imm は即値でなければなりません。

R

srl(a, imm*8)

_mm_srli_epi16

__m128i _mm_srli_epi16(__m128i a, int count);

a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

...

R7

srl(a0, count)

srl(a1, count)

...

srl(a7, count)

_mm_srl_epi16

__m128i _mm_srl_epi16(__m128i a, __m128i count);

a に含まれている 8 つの符号付きまたは符号なし 16 ビット整数を左に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

...

R7

srl(a0, count)

srl(a1, count)

...

srl(a7, count)

_mm_srli_epi32

__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)

_mm_srl_epi32

__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)

_mm_srli_epi64

__m128i _mm_srli_epi64(__m128i a, int count)

a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

srl(a0, count)

srl(a1, count)

_mm_srl_epi64

__m128i _mm_srl_epi64(__m128i a, __m128i count)

a に含まれている 2 つの符号付きまたは符号なし 64 ビット整数を右に count ビットだけシフトし、ゼロをシフトインします。

R0

R1

srl(a0, count)

srl(a1, count)