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

その他の組込み関数

次の表に、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) のその他の組込み関数のリストを示します。表の後に、各組込み関数の説明を示します。

インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。

組込み関数

演算

対応するインテル® SSE2 命令

_mm_packs_epi16

パックド飽和

PACKSSWB

_mm_packs_epi32

パックド飽和

PACKSSDW

_mm_packus_epi16

パックド飽和

PACKUSWB

_mm_extract_epi16

抽出

PEXTRW

_mm_insert_epi16

挿入

PINSRW

_mm_movemask_epi8

マスクの作成

PMOVMSKB

_mm_shuffle_epi32

シャッフル

PSHUFD

_mm_shufflehi_epi16

シャッフル

PSHUFHW

_mm_shufflelo_epi16

シャッフル

PSHUFLW

_mm_unpackhi_epi8

インターリーブ

PUNPCKHBW

_mm_unpackhi_epi16

インターリーブ

PUNPCKHWD

_mm_unpackhi_epi32

インターリーブ

PUNPCKHDQ

_mm_unpackhi_epi64

インターリーブ

PUNPCKHQDQ

_mm_unpacklo_epi8

インターリーブ

PUNPCKLBW

_mm_unpacklo_epi16

インターリーブ

PUNPCKLWD

_mm_unpacklo_epi32

インターリーブ

PUNPCKLDQ

_mm_unpacklo_epi64

インターリーブ

PUNPCKLQDQ

_mm_movepi64_pi64

移動

MOVDQ2Q

_mm_movpi64_epi64

移動

MOVDQ2Q

_mm_move_epi64

移動

MOVQ

_mm_unpackhi_pd

インターリーブ

UNPCKHPD

_mm_unpacklo_pd

インターリーブ

UNPCKLPD

_mm_movemask_pd

マスクの作成

MOVMSKPD

_mm_shuffle_pd

値の選択

SHUFPD

_mm_packs_epi16

__m128i _mm_packs_epi16(__m128i a, __m128i b);

ab の 16 の符号付き 16 ビット整数を 8 ビット整数にパックして、飽和処理します。

R0

...

R7

R8

...

R15

Signed Saturate(a0)

...

Signed Saturate(a7)

Signed Saturate(b0)

...

Signed Saturate(b7)

_mm_packs_epi32

__m128i _mm_packs_epi32(__m128i a, __m128i b);

ab の 8 つの符号付き 32 ビット整数を符号付き 16 ビット整数にパックして、飽和処理します。

R0

...

R3

R4

...

R7

Signed Saturate(a0)

...

Signed Saturate(a3)

Signed Saturate(b0)

...

Signed Saturate(b3)

_mm_packus_epi16

__m128i _mm_packus_epi16(__m128i a, __m128i b);

ab の 16 の符号付き 16 ビット整数を符号なし 8 ビット整数にパックして、飽和処理します。

R0

...

R7

R8

...

R15

Unsigned Saturate(a0)

...

Unsigned Saturate(a7)

Unsigned Saturate(b0)

...

Unsigned Saturate(b15)

_mm_extract_epi16

int _mm_extract_epi16(__m128i a, int imm);

選択された符号付きまたは符号なし 16 ビット整数を a から抽出して、0 で拡張します。セレクター imm は、即値でなければなりません。

R0

(imm == 0) ? a0: ( (imm == 1) ? a1: ...(imm==7) ? a7)

_mm_insert_epi16

__m128i _mm_insert_epi16(__m128i a, int b, int imm);

b の最下位 16 ビットを、a の選択された 16 ビット整数に挿入します。セレクター imm は、即値でなければなりません。

R0

R1

...

R7

(imm == 0) ? b : a0;

(imm == 1) ? b : a1;

...

(imm == 7) ? b : a7;

_mm_movemask_epi8

int _mm_movemask_epi8(__m128i a);

a の 16 の符号付きまたは符号なし 8 ビット整数の最上位ビットを使用して 16 ビット・マスクを作成し、上位ビットを 0 で拡張します。

R0

a15[7] << 15 | a14[7] << 14 | ... a1[7] << 1 | a0[7]

_mm_shuffle_epi32

__m128i _mm_shuffle_epi32(__m128i a, int imm);

imm の指定に従って、a の 4 つの符号付きまたは符号なし 32 ビット整数をシャッフルします。シャッフル値 imm は、即値でなければなりません。シャッフルのセマンティクスについては、このセクションの最後の「シャッフルを行うマクロ関数」を参照してください。

_mm_shufflehi_epi16

__m128i _mm_shufflehi_epi16(__m128i a, int imm);

imm の指定に従って、a の上位 4 つの符号付きまたは符号なし 16 ビット整数をシャッフルします。シャッフル値 imm は、即値でなければなりません。シャッフルのセマンティクスについては、このセクションの最後の「シャッフルを行うマクロ関数」を参照してください。

_mm_shufflelo_epi16

__m128i _mm_shufflelo_epi16(__m128i a, int imm);

imm の指定に従って、a の下位 4 つの符号付きまたは符号なし 16 ビット整数をシャッフルします。シャッフル値 imm は、即値でなければなりません。シャッフルのセマンティクスについては、このセクションの最後の「シャッフルを行うマクロ関数」を参照してください。

_mm_unpackhi_epi8

__m128i _mm_unpackhi_epi8(__m128i a, __m128i b);

a の上位 8 つの符号付きまたは符号なし 8 ビット整数と、b の上位 8 つの符号付きまたは符号なし 8 ビット整数をインターリーブ (交互に配置) します。

R0

R1

R2

R3

...

R14

R15

a8

b8

a9

b9

...

a15

b15

_mm_unpackhi_epi16

__m128i _mm_unpackhi_epi16(__m128i a, __m128i b);

a の上位 4 つの符号付きまたは符号なし 16 ビット整数と、b の上位 4 つの符号付きまたは符号なし 16 ビット整数をインターリーブします。

R0

R1

R2

R3

R4

R5

R6

R7

a4

b4

a5

b5

a6

b6

a7

b7

_mm_unpackhi_epi32

__m128i _mm_unpackhi_epi32(__m128i a, __m128i b);

a の上位 2 つの符号付きまたは符号なし 32 ビット整数と、b の上位 2 つの符号付きまたは符号なし 32 ビット整数をインターリーブします。

R0

R1

R2

R3

a2

b2

a3

b3

_mm_unpackhi_epi64

__m128i _mm_unpackhi_epi64(__m128i a, __m128i b);

a の上位の符号付きまたは符号なし 64 ビット整数と、b の上位の符号付きまたは符号なし 64 ビット整数をインターリーブします。

R0

R1

a1

b1

_mm_unpacklo_epi8

__m128i _mm_unpacklo_epi8(__m128i a, __m128i b);

a の下位 8 つの符号付きまたは符号なし 8 ビット整数と、b の下位 8 つの符号付きまたは符号なし 8 ビット整数をインターリーブします。

R0

R1

R2

R3

...

R14

R15

a0

b0

a1

b1

...

a7

b7

_mm_unpacklo_epi16

__m128i _mm_unpacklo_epi16(__m128i a, __m128i b);

a の下位 4 つの符号付きまたは符号なし 16 ビット整数と、b の下位 4 つの符号付きまたは符号なし 16 ビット整数をインターリーブします。

R0

R1

R2

R3

R4

R5

R6

R7

a0

b0

a1

b1

a2

b2

a3

b3

_mm_unpacklo_epi32

__m128i _mm_unpacklo_epi32(__m128i a, __m128i b);

a の下位 2 つの符号付きまたは符号なし 32 ビット整数と、b の下位 2 つの符号付きまたは符号なし 32 ビット整数をインターリーブします。

R0

R1

R2

R3

a0

b0

a1

b1

_mm_unpacklo_epi64

__m128i _mm_unpacklo_epi64(__m128i a, __m128i b);

a の下位の符号付きまたは符号なし 64 ビット整数と、b の下位の符号付きまたは符号なし 64 ビット整数をインターリーブします。

R0

R1

a0

b0

_mm_movepi64_pi64

__m64 _mm_movepi64_pi64(__m128i a);

a の下位 64 ビットを、__m64 型として返します。

R0

a0

_mm_movpi64_pi64

__m128i _mm_movpi64_pi64(__m64 a);

a の 64 ビットを結果の下位 64 ビットに移動し、上位ビットを 0 に設定します。

R0

R1

a0

0X0

_mm_move_epi64

__m128i _mm_move_epi64(__m128i a);

a の 64 ビットを結果の下位 64 ビットに移動し、上位ビットを 0 に設定します。

R0

R1

a0

0X0

_mm_unpackhi_pd

__m128d _mm_unpackhi_pd(__m128d a, __m128d b);

ab の上位の倍精度浮動小数点値をインターリーブ (交互に配置) します。

R0

R1

a1

b1

_mm_unpacklo_pd

__m128d _mm_unpacklo_pd(__m128d a, __m128d b);

ab の下位の倍精度浮動小数点値をインターリーブ (交互に配置) します。

R0

R1

a0

b0

_mm_movemask_pd

int _mm_movemask_pd(__m128d a);

a の 2 つの倍精度浮動小数点値の符号ビットから、2 ビット・マスクを作成します。

R

sign(a1) << 1 | sign(a0)

_mm_shuffle_pd

__m128d _mm_shuffle_pd(__m128d a, __m128d b, int i)

マスク i に基づいて、ab から 2 つの倍精度浮動小数点値を選択します。マスクは即値でなければなりません。シャッフルのセマンティクスについては、「シャッフルを行うマクロ関数」を参照してください。