次の表に、ストリーミング SIMD 拡張命令 2 (SSE2) のその他の組み込み関数のリストを示します。表の後に、各組み込み関数の説明を示します。
SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
組み込み関数 | 操作 | 対応する 命令 |
---|---|---|
_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 |
__m128i _mm_packs_epi16(__m128i a, __m128i b)
a と b の 16 の符号付き 16 ビット整数を 8 ビット整数にパックして、飽和処理します。
R0 | ... | R7 | R8 | ... | R15 |
---|---|---|---|---|---|
Signed Saturate(a0) | ... | Signed Saturate(a7) | Signed Saturate(b0) | ... | Signed Saturate(b7) |
__m128i _mm_packs_epi32(__m128i a, __m128i b)
a と b の 8 つの符号付き 32 ビット整数を符号付き 16 ビット整数にパックして、飽和処理します。
R0 | ... | R3 | R4 | ... | R7 |
---|---|---|---|---|---|
Signed Saturate(a0) | ... | Signed Saturate(a3) | Signed Saturate(b0) | ... | Signed Saturate(b3) |
__m128i _mm_packus_epi16(__m128i a, __m128i b)
a と b の 16 の符号付き 16 ビット整数を符号なし 8 ビット整数にパックして、飽和処理します。
R0 | ... | R7 | R8 | ... | R15 |
---|---|---|---|---|---|
Unsigned Saturate(a0) | ... | Unsigned Saturate(a7) | Unsigned Saturate(b0) | ... | Unsigned Saturate(b15) |
int _mm_extract_epi16(__m128i a, int imm)
選択された符号付きまたは符号なし 16 ビット整数を a から抽出して、0 で拡張します。セレクター imm は、即値でなければなりません。
R0 |
---|
(imm == 0) ?a0: ( (imm == 1) ?a1: ... (imm==7) ?a7) |
__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; |
int _mm_movemask_epi8(__m128i a)
a の 16 の符号付きまたは符号なし 8 ビット整数の最上位ビットを使用して 16 ビット・マスクを作成し、上位ビットを 0 で拡張します。
R0 |
---|
a15[7] << 15 | a14[7] << 14 | ... a1[7] << 1 | a0[7] |
__m128i _mm_shuffle_epi32(__m128i a, int imm)
imm の指定に従って、a の 4 つの符号付きまたは符号なし 32 ビット整数をシャッフルします。シャッフル値 imm は、即値でなければなりません。シャッフルのセマンティクスについては、このセクションの最後の「シャッフルを行うマクロ関数」を参照してください。
__m128i _mm_shufflehi_epi16(__m128i a, int imm)
imm の指定に従って、a の上位 4 つの符号付きまたは符号なし 16 ビット整数をシャッフルします。シャッフル値 imm は、即値でなければなりません。シャッフルのセマンティクスについては、このセクションの最後の「シャッフルを行うマクロ関数」を参照してください。
__m128i _mm_shufflelo_epi16(__m128i a, int imm)
imm の指定に従って、a の下位 4 つの符号付きまたは符号なし 16 ビット整数をシャッフルします。シャッフル値 imm は、即値でなければなりません。シャッフルのセマンティクスについては、このセクションの最後の「シャッフルを行うマクロ関数」を参照してください。
__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 |
__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 |
__m128i _mm_unpackhi_epi32(__m128i a, __m128i b)
a の上位 2 つの符号付きまたは符号なし 32 ビット整数と、b の上位 2 つの符号付きまたは符号なし 32 ビット整数をインターリーブします。
R0 | R1 | R2 | R3 |
---|---|---|---|
a2 | b2 | a3 | b3 |
__m128i _mm_unpackhi_epi64(__m128i a, __m128i b)
a の上位の符号付きまたは符号なし 64 ビット整数と、b の上位の符号付きまたは符号なし 64 ビット整数をインターリーブします。
R0 | R1 |
---|---|
a1 | b1 |
__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 |
__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 |
__m128i _mm_unpacklo_epi32(__m128i a, __m128i b)
a の下位 2 つの符号付きまたは符号なし 32 ビット整数と、b の下位 2 つの符号付きまたは符号なし 32 ビット整数をインターリーブします。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 | b0 | a1 | b1 |
__m128i _mm_unpacklo_epi64(__m128i a, __m128i b)
a の下位の符号付きまたは符号なし 64 ビット整数と、b の下位の符号付きまたは符号なし 64 ビット整数をインターリーブします。
R0 | R1 |
---|---|
a0 | b0 |
__m64 _mm_movepi64_pi64(__m128i a)
a の下位 64 ビットを、__m64 型として返します。
R0 |
---|
a0 |
__128i _mm_movpi64_pi64(__m64 a)
a の 64 ビットを結果の下位 64 ビットに移動し、上位ビットを 0 に設定します。
R0 | R1 |
---|---|
a0 | 0X0 |
__128i _mm_move_epi64(__m128i a)
a の 64 ビットを結果の下位 64 ビットに移動し、上位ビットを 0 に設定します。
R0 | R1 |
---|---|
a0 | 0X0 |
__m128d _mm_unpackhi_pd(__m128d a, __m128d b)
a と b の上位の倍精度浮動小数点値をインターリーブ (交互に配置) します。
R0 | R1 |
---|---|
a1 | b1 |
__m128d _mm_unpacklo_pd(__m128d a, __m128d b)
a と b の下位の倍精度浮動小数点値をインターリーブ (交互に配置) します。
R0 | R1 |
---|---|
a0 | b0 |
int _mm_movemask_pd(__m128d a)
a の 2 つの倍精度浮動小数点値の符号ビットから、2 ビット・マスクを作成します。
R |
---|
sign(a1) << 1 | sign(a0) |
__m128d _mm_shuffle_pd(__m128d a, __m128d b, int i)
マスク i に基づいて、a と b から 2 つの倍精度浮動小数点値を選択します。マスクは即値でなければなりません。シャッフルのセマンティクスについては、「シャッフルを行うマクロ関数」を参照してください。