ストリーミングSIMD拡張命令2 のその他の操作

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

ストリーミングSIMD拡張命令2の組込み関数のプロトタイプは、ヘッダ・ファイル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 移動
_m128i_mm_movpi64_epi64 MOVQ2DQ 移動
_mm_move_epi64 MOVQ 移動
 

__m128i _mm_packs_epi16(__m128i a, __m128i b)

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

r0 := SignedSaturate(a0)
r1 := SignedSaturate(a1)
...
r7 := SignedSaturate(a7)
r8 := SignedSaturate(b0)
r9 := SignedSaturate(b1)
...
r15 := SignedSaturate(b7)

__m128i _mm_packs_epi32(__m128i a, __m128i b)

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

r0 := SignedSaturate(a0)
r1 := SignedSaturate(a1)
r2 := SignedSaturate(a2)
r3 := SignedSaturate(a3)
r4 := SignedSaturate(b0)
r5 := SignedSaturate(b1)
r6 := SignedSaturate(b2)
r7 := SignedSaturate(b3)

__m128i _mm_packus_epi16(__m128i a, __m128i b)

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

r0 := UnsignedSaturate(a0)
r1 := UnsignedSaturate(a1)
...
r7 := UnsignedSaturate(a7)
r8 := UnsignedSaturate(b0)
r9 := UnsignedSaturate(b1)
...
r15 := UnsignedSaturate(b7)

int _mm_extract_epi16(__m128i a, int imm)

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

r := (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 := (imm == 0) ? b : a0;
r1 := (imm == 1) ? b : a1;
...
r7 := (imm == 7) ? b : a7;

int _mm_movemask_epi8(__m128i a)

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

r := a15[7] << 15 |
a14[7] << 14 |
r := a1[7] << 1 |

__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 := a8 ; r1 := b8
r2 := a9 ; r3 := b9
...
r14 := a15 ; r15 := b15

__m128i _mm_unpackhi_epi16(__m128i a, __m128i b)

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

r0 := a4 ; r1 := b4
r2 := a5 ; r3 := b5
r4 := a6 ; r5 := b6
r6 := a7 ; r7 := b7

__m128i _mm_unpackhi_epi32(__m128i a, __m128i b)

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

r0 := a2 ; r1 := b2
r2 := a3 ; r3 := b3

__m128i _mm_unpackhi_epi64(__m128i a, __m128i b)

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

r0 := a1 ; r1 := b1

__m128i _mm_unpacklo_epi8(__m128i a, __m128i b)

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

r0 := a0 ; r1 := b0
r2 := a1 ; r3 := b1
...
r14 := a7 ; r15 := b7

__m128i _mm_unpacklo_epi16(__m128i a, __m128i b)

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

r0 := a0 ; r1 := b0
r2 := a1 ; r3 := b1
r4 := a2 ; r5 := b2
r6 := a3 ; r7 := b3

__m128i _mm_unpacklo_epi32(__m128i a, __m128i b)

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

r0 := a0 ; r1 := b0
r2 := a1 ; r3 := b1

__m128i _mm_unpacklo_epi64(__m128i a, __m128i b)

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

r0 := a0 ; r1 := b0

__m64 _mm_movepi64_pi64(__m128i a)

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

r0 := a0 ;

__128i _mm_movpi64_pi64(__m64 a)

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

r0 := a0 ; r1 := 0X0 ;

__128i _mm_move_epi64(__128i a)

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

r0 := a0 ; r1 := 0X0 ;