SSE/AVX:整数関連

アンパック (128bit 中の下位64bit)
PUNPCKLBW
VPUNPCKLBW
アンパック8bit→16bit (下位) [SSE2]
PUNPCKLWD
VPUNPCKLWD
アンパック16bit→32bit (下位) [SSE2]
PUNPCKLDQ
VPUNPCKLDQ
アンパック32bit→64bit (下位) [SSE2]
PUNPCKLQDQ
VPUNPCKLQDQ
アンパック64bit→128bit (下位) [SSE2]
アンパック (128bit 中の上位64bit)
PUNPCKHBW
VPUNPCKHBW
アンパック8bit→16bit (上位) [SSE2]
PUNPCKHWD
VPUNPCKHWD
アンパック16bit→32bit (上位) [SSE2]
PUNPCKHDQ
VPUNPCKHDQ
アンパック32bit→64bit (上位) [SSE2]
PUNPCKHQDQ
VPUNPCKHQDQ
アンパック64bit→128bit (上位) [SSE2]
パック
PACKSSWB
VPACKSSWB
パック符号付き16bit整数→符号付き8bit整数 (飽和) [SSE2]
PACKUSWB
VPACKUSWB
パック符号付き16bit整数→符号なし8bit整数 (飽和) [SSE2]
PACKSSDW
VPACKSSDW
パック符号付き32bit整数→符号付き16bit整数 (飽和) [SSE2]
PACKUSDW
VPACKUSDW
パック符号付き32bit整数→符号なし16bit整数 (飽和) [SSE4.1]
ブレンドコピー
PBLENDVB
VPBLENDVB
パック8bitのブレンドコピー [SSE4.1]
PBLENDW
VPBLENDW
パック16bitのブレンドコピー [SSE4.1]
VPBLENDDパック32bitのブレンドコピー [AVX2]
シャッフルコピー
PSHUFB
VPSHUFB
パック8bitのシャッフルコピー [SSSE3]
PSHUFLW
VPSHUFLW
パック16bitのシャッフルコピー (下位64bit) [SSE2]
PSHUFHW
VPSHUFHW
パック16bitのシャッフルコピー (上位64bit) [SSE2]
PSHUFD
VPSHUFD
パック32bitのシャッフルコピー [SSE2]
パック抽出
PEXTRB
VPEXTRB
パック8bitから抽出 [SSE4.1]
PEXTRW
VPEXTRW
パック16bitから抽出 [SSE2/SSE4.1]
PEXTRD
VPEXTRD
パック32bitから抽出 [SSE4.1]
PEXTRQ
VPEXTRQ
パック64bitから抽出 [SSE4.1]
パック挿入
PINSRB
VPINSRB
パック8bit挿入 [SSE4.1]
PINSRW
VPINSRW
パック16bit挿入 [SSE2]
PINSRD
VPINSRD
パック32bit挿入 [SSE4.1]
PINSRQ
VPINSRQ
パック64bit挿入 [SSE4.1]
ゼロ拡張
PMOVZXBW
VPMOVZXBW
パック符号なし8bit整数を16bitにゼロ拡張 [SSE4.1]
PMOVZXBD
VPMOVZXBD
パック符号なし8bit整数を32bitにゼロ拡張 [SSE4.1]
PMOVZXBQ
VPMOVZXBQ
パック符号なし8bit整数を64bitにゼロ拡張 [SSE4.1]
PMOVZXWD
VPMOVZXWD
パック符号なし16bit整数を32bitにゼロ拡張 [SSE4.1]
PMOVZXWQ
VPMOVZXWQ
パック符号なし16bit整数を64bitにゼロ拡張 [SSE4.1]
PMOVZXDQ
VPMOVZXDQ
パック符号なし32bit整数を64bitにゼロ拡張 [SSE4.1]
符号拡張
PMOVSXBW
VPMOVSXBW
パック符号付き8bit整数を16bitに符号拡張 [SSE4.1]
PMOVSXBD
VPMOVSXBD
パック符号付き8bit整数を32bitに符号拡張 [SSE4.1]
PMOVSXBQ
VPMOVSXBQ
パック符号付き8bit整数を64bitに符号拡張 [SSE4.1]
PMOVSXWD
VPMOVSXWD
パック符号付き16bit整数を32bitに符号拡張 [SSE4.1]
PMOVSXWQ
VPMOVSXWQ
パック符号付き16bit整数を64bitに符号拡張 [SSE4.1]
PMOVSXDQ
VPMOVSXDQ
パック符号付き32bit整数を64bitに符号拡張 [SSE4.1]
符号抽出
PMOVMSKB
VPMOVMSKB
パック8bit整数の符号抽出 [SSE2]
符号評価
PSIGNB
VPSIGNB
パック符号付き8bitの符号評価 [SSSE3]
PSIGNW
VPSIGNW
パック符号付き16bitの符号評価 [SSSE3]
PSIGND
VPSIGND
パック符号付き32bitの符号評価 [SSSE3]
アンパック (128bit 中の下位64bit)
PUNPCKLBW xmm1, xmm2/mem128 | 66 0F 60 /r | SSE2
VPUNPCKLBW xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 60 /r | AVX
VPUNPCKLBW ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 60 /r | AVX2
128bit 単位で行い、128bit 中の下位 64bit の8つの各 8bit 整数を、2つのソースから順に取り出して、交互に並べます。

src1 = x, src2 = y

* 128bit
dst |y7|x7|..|y1|x1|y0|x0|

* 256bit
dst |y31|x31|..|y16|x16|y7|x7|..|y0|x0|
PUNPCKLWD xmm1, xmm2/mem128 | 66 0F 61 /r | SSE2
VPUNPCKLWD xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 61 /r | AVX
VPUNPCKLWD ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 61 /r | AVX2
128bit 単位で行い、128bit 中の下位 64bit の4つの 16bit 整数を、2つのソースから順に取り出して、交互に並べます。
PUNPCKLDQ xmm1, xmm2/mem128 | 66 0F 62 /r | SSE2
VPUNPCKLDQ xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 62 /r | AVX
VPUNPCKLDQ ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 62 /r | AVX2
128bit 単位で行い、128bit 中の下位 64bit の2つの各 32bit 整数を、2つのソースから順に取り出して、交互に並べます。
PUNPCKLQDQ xmm1, xmm2/mem128 | 66 0F 6C /r | SSE2
VPUNPCKLQDQ xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 6C /r | AVX
VPUNPCKLQDQ ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 6C /r | AVX2
128bit 単位で行い、128bit 中の下位 64bit 整数を、2つのソースから順に取り出して、交互に並べます。
アンパック (128bit 中の上位64bit)
PUNPCKHBW xmm1, xmm2/mem128 | 66 0F 68 /r | SSE2
VPUNPCKHBW xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 68 /r | AVX
VPUNPCKHBW ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 68 /r | AVX2
128bit 単位で行い、128bit 中の上位 64bit の8つの各 8bit 整数を、2つのソースから順に取り出して、交互に並べます。
PUNPCKHWD xmm1, xmm2/mem128 | 66 0F 69 /r | SSE2
VPUNPCKHWD xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 69 /r | AVX
VPUNPCKHWD ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 69 /r | AVX
128bit 単位で行い、128bit 中の上位 64bit の4つの各 16bit 整数を、2つのソースから順に取り出して、交互に並べます。
PUNPCKHDQ xmm1, xmm2/mem128 | 66 0F 6A /r | SSE2
VPUNPCKHDQ xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 6A /r | AVX
VPUNPCKHDQ ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 6A /r | AVX2
128bit 単位で行い、128bit 中の上位 64bit の2つの各 32bit 整数を、2つのソースから順に取り出して、交互に並べます。
PUNPCKHQDQ xmm1, xmm2/mem128 | 66 0F 6D /r | SSE2
VPUNPCKHQDQ xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 6D /r | AVX
VPUNPCKHQDQ ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 6D /r | AVX
128bit 単位で行い、128bit 中の上位 64bit 整数を、2つのソースから順に取り出して、交互に並べます。
パック
PACKSSWB xmm1, xmm2/mem128 | 66 0F 63 /r | SSE2
VPACKSSWB xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 63 /r | AVX
VPACKSSWB ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 63 /r | AVX2
2つのソースの、パックされた符号付き 16bit 整数を、それぞれ符号付き 8bit 整数に飽和付きで変換し、結果をパックして宛先に格納します。
変換後のソースは、64bit を一単位として、下位から順に交互に並びます。

src1 = x, src2 = y

* 128bit
dst |y7..y0|x7..x0|

* 256bit
dst |y15..y8|x15..x8|y7..y0|x7..x0|
PACKUSWB xmm1, xmm2/mem128 | 66 0F 67 /r | SSE2
VPACKUSWB xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 67 /r | AVX
VPACKUSWB ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 67 /r | AVX2
2つのソースの、パックされた符号付き 16bit 整数を、それぞれ符号なし 8bit 整数に飽和付きで変換し、結果をパックして宛先に格納します。
変換後のソースは、64bit を一単位として、下位から順に交互に並びます。
PACKSSDW xmm1, xmm2/mem128 | 66 0F 6B /r | SSE2
VPACKSSDW xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 6B /r | AVX
VPACKSSDW ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 6B /r | AVX2
2つのソースの、パックされた符号付き 32bit 整数を、符号付き 16bit 整数に飽和付きで変換し、結果をパックして宛先に格納します。
変換後のソースは、64bit を一単位として、下位から順に交互に並びます。

src1 = x, src2 = y

* 128bit
dst |y3..y0|x3..x0|

* 256bit
dst |y7..y4|x7..x4|y3..y0|x3..x0|
PACKUSDW xmm1, xmm2/mem128 | 66 0F 38 2B /r | SSE4.1
VPACKUSDW xmm1, xmm2, xmm3/mem128 | C4 RXB.02 X.src1.0.01 2B /r | AVX
VPACKUSDW ymm1, ymm2, ymm3/mem256 | C4 RXB.02 X.src1.0.01 2B /r | AVX2
2つのソースの、パックされた符号付き 32bit 整数を、符号なし 16bit 整数に飽和付きで変換し、結果をパックして宛先に格納します。
変換後のソースは、64bit を一単位として、下位から順に交互に並びます。
ブレンドコピー
PBLENDVB xmm1, xmm2/mem128 | 66 0F 38 10 /r | SSE4.1
VPBLENDVB xmm1, xmm2, xmm3/mem128, xmm4 | C4 RXB.03 0.src1.0.01 4C /r is4 | AVX
VPBLENDVB ymm1, ymm2, ymm3/mem256, ymm4 | C4 RXB.03 0.src1.1.01 4C /r is4 | AVX2
2つのソースの、パックされた 8bit 整数のうち、要素ごとにいずれかの値を宛先にコピーします。

マスクは、最後のオペランド (PBLENDVB の場合は XMM0 レジスタで固定) で指定します。
8bit 単位で、宛先の各位置に対応し、それぞれの最上位ビットよって、どちらをコピーするかを指定します。
ビットが 0 の場合、第1ソースの値、ビットが 1 の場合、第2ソースの値がコピーされます。
PBLENDW xmm1, xmm2/mem128, imm8 | 66 0F 3A 0E /r ib | SSE4.1
VPBLENDW xmm1, xmm2, xmm3/mem128, imm8 | C4 RXB.03 X.src1.0.01 0E /r /ib | AVX
VPBLENDW ymm1, ymm2, ymm3/mem256, imm8 | C4 RXB.03 X.src1.1.01 0E /r /ib | AVX2
2つのソースの、パックされた 16bit 整数のうち、要素ごとにいずれかの値を宛先にコピーします。

マスクは、8bit 即値で指定し、1bit 単位で、宛先の各位置に対応します。
ビットが 0 の場合、第1ソースの値、ビットが 1 の場合、第2ソースの値がコピーされます。
VPBLENDD xmm1, xmm2, xmm3/mem128, imm8 | C4 RXB.03 0.src1.0.01 02 /r /ib | AVX2
VPBLENDD ymm1, ymm2, ymm3/mem256, imm8 | C4 RXB.03 0.src1.1.01 02 /r /ib | AVX2
2つのソースの、パックされた 32bit 整数のうち、要素ごとにいずれかの値を宛先にコピーします。

マスクは、8bit 即値で指定し、1bit 単位で、宛先の各位置に対応します。
ビットが 0 の場合、第1ソースの値、ビットが 1 の場合、第2ソースの値がコピーされます。
シャッフルコピー
PSHUFB xmm1, xmm2/mem128 | 66 0F 38 00 /r | SSSE3
VPSHUFB xmm1, xmm2, xmm3/mem128 | C4 RXB.02 X.src1.0.01 00 /r | AVX
VPSHUFB ymm1, ymm2, ymm3/mem256 | C4 RXB.02 X.src1.1.01 00 /r | AVX2
最後のオペランドの制御値に従って、宛先の各 8bit 整数を、ソースの任意の位置からコピーするか、0 にします。
PSHUFB の場合、ソースと宛先は同じレジスタです。

制御値は、8bit 単位で宛先の各位置に対応します。
それぞれの最上位ビットは、値をクリアするかのフラグで、それ以下のビットは、コピーする値のインデックス位置です。
最上位ビットが 1 の場合、宛先の 8bit 値を 0 にします。ビットが 0 の場合、指定位置のソースから値をコピーします。

256bit の場合、128bit 単位で処理されます。インデックス値は、上位 128bit と下位 128bit のそれぞれの位置に対応します。
PSHUFLW xmm1, xmm2/mem128, imm8  | F2 0F 70 /r ib | SSE2
VPSHUFLW xmm1, xmm2/mem128, imm8 | C4 RXB.01 X.1111.0.11 70 /r ib | AVX
VPSHUFLW ymm1, ymm2/mem256, imm8 | C4 RXB.01 X.1111.1.11 70 /r ib | AVX2
即値バイトの値に従って、宛先の下位 64bit 中の各 16bit 整数を、第2オペランドの下位 64bit 中の任意の位置からコピーします。

即値バイトは、2bit x 4 で、それぞれ宛先の各位置に対応し、コピーするソースの位置 (0〜3) を指定します。

128bit の場合、ソースの上位 64bit は、宛先の上位 64bit にコピーされます。
256bit の場合、上位 128bit 中の下位 64 bit は、同じ即値バイトを使って、同じように処理されます。
PSHUFHW xmm1, xmm2/mem128, imm8  | F3 0F 70 /r ib | SSE2
VPSHUFHW xmm1, xmm2/mem128, imm8 | C4 RXB.01 X.1111.0.10 70 /r ib | AVX
VPSHUFHW ymm1, ymm2/mem256, imm8 | C4 RXB.01 X.1111.1.10 70 /r ib | AVX2
即値バイトの値に従って、宛先の上位 64bit の各 16bit 整数を、第2オペランドの上位 64bit 中の任意の位置からコピーします。

即値バイトは、2bit x 4 で、それぞれ宛先の各位置に対応し、コピーするソースの位置 (0〜3) を指定します。
※実際は、64bit 分の位置が加算され、上位 64bit の位置を指定することになります。

128bit の場合、ソースの下位 64bit は、宛先の下位 64bit にコピーされます。
256bit の場合、上位 128bit 中の上位 64 bit は、同じ即値バイトを使って、同じように処理されます。
PSHUFD xmm1, xmm2/mem128, imm8  | 66 0F 70 /r ib | SSE2
VPSHUFD xmm1, xmm2/mem128, imm8 | C4 RXB.01 X.1111.0.01 70 /r ib | AVX
VPSHUFD ymm1, ymm2/mem256, imm8 | C4 RXB.01 X.1111.1.01 70 /r ib | AVX2
即値バイトの値に従って、宛先の各 32bit 整数を、第2オペランドの任意の位置からコピーします。

即値バイトは、2bit x 4 で、それぞれ宛先の各位置に対応し、コピーするソースの位置 (0〜3) を指定します。
パック抽出
PEXTRB reg/m8, xmm, imm8    | 66 0F 3A 14 /r ib
VPEXTRB reg/mem8, xmm, imm8 | C4 RXB.03 X.1111.0.01 14 /r ib
第2オペランド内の指定位置から 8bit 整数を抽出し、宛先にゼロ拡張して格納します。
位置は、即値オペランドで指定します。
PEXTRW reg, xmm, imm8        | 66 0F C5 /r ib | SSE2
PEXTRW reg/m16, xmm, imm8    | 66 0F 3A 15 /r ib | SSE4.1
VPEXTRW reg, xmm, imm8       | C4 RXB.01 X.1111.0.01 C5 /r ib | AVX
VPEXTRW reg/mem16, xmm, imm8 | C4 RXB.03 X.1111.0.01 15 /r ib | AVX
第2オペランド内の指定位置から 16bit 整数を抽出し、宛先にゼロ拡張して格納します。
位置は、即値オペランドで指定します。
PEXTRD reg32/mem32, xmm, imm8  | 66 (W0) 0F 3A 16 /r ib | SSE4.1
VPEXTRD reg32/mem32, xmm, imm8 | C4 RXB.03 0.1111.0.01 16 /r ib | AVX
第2オペランド内の指定位置から 32bit 整数を抽出し、宛先に格納します。
位置は、即値オペランドで指定します。
PEXTRQ reg64/mem64, xmm, imm8  | 66 (W1) 0F 3A 16 /r ib | SSE4.1
VPEXTRQ reg64/mem64, xmm, imm8 | C4 RXB.03 1.1111.0.01 16 /r ib | AVX
第2オペランド内の指定位置から 64bit 整数を抽出し、宛先に格納します。
位置は、即値オペランドで指定します。
パック挿入
PINSRB xmm, reg32/mem8, imm8 | 66 0F 3A 20 /r ib | SSE4.1
VPINSRB xmm1, xmm2, reg32/mem8, imm8 | C4 RXB.03 X.1111.0.01 20 /r ib | AVX
宛先の、即値オペランドで指定された位置に、8bit メモリまたは 32bit 汎用レジスタの下位 8bit の値を挿入します。
PINSRW xmm, reg32/mem16, imm8 | 66 0F C4 /r ib | SSE2
VPINSRW xmm, reg32/mem16, xmm, imm8 | C4 RXB.01 X.1111.0.01 C4 /r ib | AVX
宛先の、即値オペランドで指定された位置に、16bit メモリまたは 32bit 汎用レジスタの下位 16bit の値を挿入します。
PINSRD xmm, reg32/mem32, imm8 | 66 (W0) 0F 3A 22 /r ib | SSE4.1
VPINSRD xmm1, xmm2, reg32/mem32, imm8 | C4 RXB.03 0.1111.0.01 22 /r ib | AVX
宛先の、即値オペランドで指定された位置に、32bit メモリまたは 32bit 汎用レジスタの値を挿入します。
PINSRQ xmm, reg64/mem64, imm8 | 66 (W1) 0F 3A 22 /r ib | SSE4.1
VPINSRQ xmm1, xmm2, reg64/mem64, imm8 | C4 RXB.03 1.1111.0.01 22 /r ib | AVX
宛先の、即値オペランドで指定された位置に、64bit メモリまたは 64bit 汎用レジスタの値を挿入します。
ゼロ拡張
PMOVZXBW xmm1, xmm2/mem64   | 66 0F 38 30 /r | SSE4.1
VPMOVZXBW xmm1, xmm2/mem64  | C4 RXB.02 X.1111.0.01 30 /r | AVX
VPMOVZXBW ymm1, xmm2/mem128 | C4 RXB.02 X.1111.1.01 30 /r | AVX2
第2オペランドの、パックされた符号なし 8bit 整数を、それぞれ 16bit にゼロ拡張し、結果を宛先にパックして格納します。
PMOVZXBD xmm1, xmm2/mem32  | 66 0F 38 31 /r | SSE4.1
VPMOVZXBD xmm1, xmm2/mem32 | C4 RXB.02 X.1111.0.01 31 /r | AVX
VPMOVZXBD ymm1, xmm2/mem64 | C4 RXB.02 X.1111.1.01 31 /r | AVX2
第2オペランドの、パックされた符号なし 8bit 整数を、それぞれ 32bit にゼロ拡張し、結果を宛先にパックして格納します。
PMOVZXBQ xmm1, xmm2/mem16  | 66 0F 38 32 /r | SSE4.1
VPMOVZXBQ xmm1, xmm2/mem16 | C4 RXB.02 X.1111.0.01 32 /r | AVX
VPMOVZXBQ ymm1, xmm2/mem32 | C4 RXB.02 X.1111.1.01 32 /r | AVX2
第2オペランドの、パックされた符号なし 8bit 整数を、それぞれ 64bit にゼロ拡張し、結果を宛先にパックして格納します。
PMOVZXWD xmm1, xmm2/mem64   | 66 0F 38 33 /r | SSE4.1
VPMOVZXWD xmm1, xmm2/mem64  | C4 RXB.02 X.1111.0.01 33 /r | AVX
VPMOVZXWD ymm1, xmm2/mem128 | C4 RXB.02 X.1111.1.01 33 /r | AVX2
第2オペランドの、パックされた符号なし 16bit 整数を、それぞれ 32bit にゼロ拡張し、結果を宛先にパックして格納します。
PMOVZXWQ xmm1, xmm2/mem32  | 66 0F 38 34 /r | SSE4.1
VPMOVZXWQ xmm1, xmm2/mem32 | C4 RXB.02 X.1111.0.01 34 /r | AVX
VPMOVZXWQ ymm1, xmm2/mem64 | C4 RXB.02 X.1111.1.01 34 /r | AVX2
第2オペランドの、パックされた符号なし 16bit 整数を、それぞれ 64bit にゼロ拡張し、結果を宛先にパックして格納します。
PMOVZXDQ xmm1, xmm2/mem64   | 66 0F 38 35 /r | SSE4.1
VPMOVZXDQ xmm1, xmm2/mem64  | C4 RXB.02 X.1111.0.01 35 /r | AVX
VPMOVZXDQ ymm1, xmm2/mem128 | C4 RXB.02 X.1111.1.01 35 /r | AVX2
第2オペランドの、パックされた符号なし 32bit 整数を、それぞれ 64bit にゼロ拡張し、結果を宛先にパックして格納します。
符号拡張
PMOVSXBW xmm1, xmm2/mem64   | 66 0F 38 20 /r | SSE4.1
VPMOVSXBW xmm1, xmm2/mem64  | C4 RXB.02 X.1111.0.01 20 /r | AVX
VPMOVSXBW ymm1, xmm2/mem128 | C4 RXB.02 X.1111.1.01 20 /r | AVX2
第2オペランドの、パックされた符号付き 8bit 整数を、それぞれ 16bit に符号拡張し、結果を宛先にパックして格納します。
PMOVSXBD xmm1, xmm2/mem32  | 66 0F 38 21 /r | SSE4.1
VPMOVSXBD xmm1, xmm2/mem32 | C4 RXB.02 X.1111.0.01 21 /r | AVX
VPMOVSXBD ymm1, xmm2/mem64 | C4 RXB.02 X.1111.1.01 21 /r | AVX2
第2オペランドの、パックされた符号付き 8bit 整数を、それぞれ 32bit に符号拡張し、結果を宛先にパックして格納します。
PMOVSXBQ xmm1, xmm2/mem16  | 66 0F 38 22 /r | SSE4.1
VPMOVSXBQ xmm1, xmm2/mem16 | C4 RXB.02 X.1111.0.01 22 /r | AVX
VPMOVSXBQ ymm1, xmm2/mem32 | C4 RXB.02 X.1111.1.01 22 /r | AVX2
第2オペランドの、パックされた符号付き 8bit 整数を、それぞれ 64bit に符号拡張し、結果を宛先にパックして格納します。
PMOVSXWD xmm1, xmm2/mem64   | 66 0F 38 23 /r | SSE4.1
VPMOVSXWD xmm1, xmm2/mem64  | C4 RXB.02 X.1111.0.01 23 /r | AVX
VPMOVSXWD ymm1, xmm2/mem128 | C4 RXB.02 X.1111.1.01 23 /r | AVX2
第2オペランドの、パックされた符号付き 16bit 整数を、それぞれ 32bit に符号拡張し、結果を宛先にパックして格納します。
PMOVSXWQ xmm1, xmm2/mem32  | 66 0F 38 24 /r | SSE4.1
VPMOVSXWQ xmm1, xmm2/mem32 | C4 RXB.02 X.1111.0.01 24 /r | AVX
VPMOVSXWQ ymm1, xmm2/mem64 | C4 RXB.02 X.1111.1.01 24 /r | AVX2
第2オペランドの、パックされた符号付き 16bit 整数を、それぞれ 64bit に符号拡張し、結果を宛先にパックして格納します。
PMOVSXDQ xmm1, xmm2/mem64   | 66 0F 38 25 /r | SSE4.1
VPMOVSXDQ xmm1, xmm2/mem64  | C4 RXB.02 X.1111.0.01 25 /r | AVX
VPMOVSXDQ ymm1, xmm2/mem128 | C4 RXB.02 X.1111.1.01 25 /r | AVX2
第2オペランドの、パックされた符号付き 32bit 整数を、それぞれ 64bit に符号拡張し、結果を宛先にパックして格納します。
符号抽出
PMOVMSKB reg32, xmm1 | 66 0F D7 /r | SSE2
VMOVMSKB reg64, xmm1 | C4 RXB.01 X.1111.0.01 D7 /r | AVX
VMOVMSKB reg64, ymm1 | C4 RXB.01 X.1111.1.01 D7 /r | AVX2
第2オペランドの各 8bit 整数の最上位ビットから、16bit または 32bit のマスクを作成し、値をゼロ拡張して宛先に書き込みます。
符号評価
PSIGNB xmm1, xmm2/mem128 | 66 0F 38 08 /r | SSSE3
VPSIGNB xmm1, xmm2, xmm2/mem128 | C4 RXB.02 X.src1.0.01 08 /r | AVX
VPSIGNB ymm1, ymm2, ymm2/mem256 | C4 RXB.02 X.src1.1.01 08 /r | AVX2
第2ソースのパックされた符号付き 8bit 整数値を評価して、以下のように処理します。

  • 負の場合、第1ソースの対応するバイトのビットを反転して、宛先に書き込みます。
  • 正の場合、第1ソースの対応するバイトを、宛先にコピーします。
  • 0 の場合、宛先の対応するバイトを 0 にします。
PSIGNW xmm1, xmm2/mem128 | 66 0F 38 09 /r | SSSE3
VPSIGNW xmm1, xmm2, xmm3/mem128 | C4 RXB.02 X.src1.0.01 09 /r | AVX
VPSIGNW ymm1, ymm2, ymm3/mem256 | C4 RXB.02 X.src1.1.01 09 /r | AVX2
第2ソースのパックされた符号付き 16bit 整数値を評価して、以下のように処理します。

  • 負の場合、第1ソースの対応する 16bit 値のビットを反転して、宛先に書き込みます。
  • 正の場合、第1ソースの対応する 16bit 値を、宛先にコピーします。
  • 0 の場合、宛先の対応する 16bit 値を 0 にします。
PSIGND xmm1, xmm2/mem128 | 66 0F 38 0A /r | SSSE3
VPSIGND xmm1, xmm2, xmm3/mem128 | C4 RXB.02 X.src1.0.01 0A /r | AVX
VPSIGND ymm1, ymm2, ymm3/mem256 | C4 RXB.02 X.src1.1.01 0A /r | AVX
第2ソースのパックされた符号付き 32bit 整数値を評価して、以下のように処理します。

  • 負の場合、第1ソースの対応する 32bit 値のビットを反転して、宛先に書き込みます。
  • 正の場合、第1ソースの対応する 32bit 値を、宛先にコピーします。
  • 0 の場合、宛先の対応する 32bit 値を 0 にします。