SSE/AVX 比較

整数
PCMPEQB
VPCMPEQB
パック8bit整数比較 (等しい) [SSE2]
PCMPEQW
VPCMPEQW
パック16bit整数比較 (等しい) [SSE2]
PCMPEQD
VPCMPEQD
パック32bit整数比較 (等しい) [SSE2]
PCMPEQQ
VPCMPEQQ
パック64bit整数比較 (等しい) [SSE4.1]
PCMPGTB
VPCMPGTB
パック8bit整数比較 (大きい) [SSE2]
PCMPGTW
VPCMPGTW
パック16bit整数比較 (大きい) [SSE2]
PCMPGTD
VPCMPGTD
パック32bit整数比較 (大きい) [SSE2]
PCMPGTQ
VPCMPGTQ
パック64bit整数比較 (大きい) [SSE4.2]
AND テスト
PTEST
VPTEST
AND テスト (整数) [SSE4.1]
VTESTPSAND テスト (単精度の符号) [AVX]
VTESTPDAND テスト (倍精度の符号) [AVX]
単精度
浮動小数点比較の即値オペランド浮動小数点比較の即値オペランド
CMPSS
VCMPSS
単一単精度比較 [SSE]
CMPPS
VCMPPS
バック単精度比較 [SSE]
COMISS
VCOMISS
単一単精度比較 (rFLAGS) [SSE]
UCOMISS
VUCOMISS
単一単精度の順序なし比較 (rFLAGS) [SSE]
倍精度
CMPSD
VCMPSD
単一倍精度比較 [SSE2]
CMPPD
VCMPPD
パック倍精度比較 [SSE2]
COMISD
VCOMISD
単一倍精度の比較 (rFLAGS) [SSE2]
UCOMISD
VUCOMISD
単一倍精度の順序なし比較 (rFLAGS) [SSE2]
文字列比較
文字列比較の即値オペランド文字列比較の即値オペランド
文字列比較の rFLAGS文字列比較の rFLAGS
PCMPESTRI
VPCMPESTRI
文字列比較 (長さ指定、インデックス) [SSE4.2]
PCMPESTRM
VPCMPESTRM
文字列比較 (長さ指定、マスク) [SSE4.2]
PCMPISTRI
VPCMPISTRI
文字列比較 (NULL終わり、インデックス) [SSE4.2]
PCMPISTRM
VPCMPISTRM
文字列比較 (NULL終わり、マスク) [SSE4.2]
整数
PCMPEQB xmm1, xmm2/mem128 | 66 0F 74 /r | SSE2
VPCMPEQB xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 74 /r | AVX
VPCMPEQB ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 74 /r | AVX2
パックされた 8bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
値が等しい場合、結果は FFh になります。値が等しくない場合、結果は 00h になります。
PCMPEQW xmm1, xmm2/mem128 | 66 0F 75 /r | SSE2
VPCMPEQW xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 75 /r | AVX
VPCMPEQW ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 75 /r | AVX2
パックされた 16bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
値が等しい場合、ビットはすべて 1。等しくない場合、ビットはすべて 0 になります。
PCMPEQD xmm1, xmm2/mem128 | 66 0F 76 /r | SSE2
VPCMPEQD xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 76 /r | AVX
VPCMPEQD ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 76 /r | AVX2
パックされた 32bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
値が等しい場合、ビットはすべて 1。等しくない場合、ビットはすべて 0 になります。
PCMPEQQ xmm1, xmm2/mem128 | 66 0F 38 29 /r | SSE4.1
VPCMPEQQ xmm1, xmm2, xmm3/mem128 | C4 RXB.02 X.src1.0.01 29 /r | AVX
VPCMPEQQ ymm1, ymm2, ymm3/mem256 | C4 RXB.02 X.src1.1.01 29 /r | AVX2
パックされた 64bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
値が等しい場合、ビットはすべて 1。等しくない場合、ビットはすべて 0 になります。
PCMPGTB xmm1, xmm2/mem128 | 66 0F 64 /r | SSE2
VPCMPGTB xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 64 /r | AVX
VPCMPGTB ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 64 /r | AVX2
パックされた 8bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
src1 > src2 の場合、ビットはすべて 1。等しくない場合、ビットはすべて 0 になります。
PCMPGTW xmm1, xmm2/mem128 | 66 0F 65 /r | SSE2
VPCMPGTW xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 65 /r | AVX
VPCMPGTW ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 65 /r | AVX2
パックされた 16bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
src1 > src2 の場合、ビットはすべて 1。等しくない場合、ビットはすべて 0 になります。
PCMPGTD xmm1, xmm2/mem128 | 66 0F 66 /r | SSE2
VPCMPGTD xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 66 /r | AVX
VPCMPGTD ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 66 /r | AVX2
パックされた 32bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
src1 > src2 の場合、ビットはすべて 1。等しくない場合、ビットはすべて 0 になります。
PCMPGTQ xmm1, xmm2/mem128 | 66 0F 38 37 /r | SSE4.2
VPCMPGTQ xmm1, xmm2, xmm3/mem128 | C4 RXB.02 X.src1.0.01 37 /r | AVX
VPCMPGTQ ymm1, ymm2, ymm3/mem256 | C4 RXB.02 X.src1.1.01 37 /r | AVX2
パックされた 64bit 整数の2つのソース値を比較し、結果を宛先の対応する位置に書き込みます。
src1 > src2 の場合、ビットはすべて 1。等しくない場合、ビットはすべて 0 になります。
AND テスト
PTEST xmm1, xmm2/mem128  | 66 0F 38 17 /r | SSE4.1
VPTEST xmm1, xmm2/mem128 | C4 RXB.00010 X.1111.0.01 17 /r | AVX
VPTEST ymm1, ymm2/mem256 | C4 RXB.00010 X.1111.1.01 17 /r | AVX
整数の AND テストを行い、rFLAGS の ZF と CF のビットを設定します。

まず、2つのソースの AND を実行し、結果が 0 の場合、ZF を 1 にします。それ以外は ZF = 0 にします。

次に、第1ソースをビット反転して、第2ソースと AND します。
その結果が 0 の場合、CF を 1 にします。それ以外は CF = 0 にします。
VTESTPS xmm1, xmm2/mem128 | C4 RXB.02 0.1111.0.01 0E /r | AVX
VTESTPS ymm1, ymm2/mem256 | C4 RXB.02 0.1111.1.01 0E /r | AVX
パック単精度の符号ビットで AND テストを行い、rFLAGS の ZF と CF のビットを設定します。

まず、2つのソースのパック単精度の、各符号ビットを AND を実行し、結果が 0 の場合、ZF を 1 にします。それ以外は ZF = 0 にします。

次に、第1ソースの符号ビットを反転して、第2ソースの符号ビットと AND します。
その結果が 0 の場合、CF を 1 にします。それ以外は CF = 0 にします。
VTESTPD xmm1, xmm2/mem128 | C4 RXB.02 0.1111.0.01 0F /r | AVX
VTESTPD ymm1, ymm2/mem256 | C4 RXB.02 0.1111.1.01 0F /r | AVX
パック倍精度の符号ビットで AND テストを行い、rFLAGS の ZF と CF のビットを設定します。

まず、2つのソースのパック倍精度の、各符号ビットを AND を実行し、結果が 0 の場合、ZF を 1 にします。それ以外は ZF = 0 にします。

次に、第1ソースの符号ビットを反転して、第2ソースの符号ビットと AND します。
その結果が 0 の場合、CF を 1 にします。それ以外は CF = 0 にします。
単精度
浮動小数点比較の即値オペランド
レガシー SSE 命令の場合、下位 3bit (0〜7) のみ使用されます。
拡張 SSE 命令の場合、下位 5bit が使用されます。
* 順序なしは、どちらかの値が NaN の場合。

-タイプ説明A>BA<BA=B順序なし*QNaN例外
EQ_OQ (EQ)0h等しいFalseFalseTrueFalseNo
LT_OS (LT)1h小さいFalseTrueFalseFalseYes
LE_OS (LE)2h<=FalseTrueTrueFalseYes
UNORD_Q (UNORD)3h順序なしFalseFalseFalseTrueNo
NEQ_UQ (NEQ)4h等しくないTrueTrueFalseTrueNo
NLT_US (NLT)5h>=TrueFalseTrueTrueYes
NLE_US (NLE)6h大きいTrueFalseFalseTrueYes
ORD_Q (ORD)7h順序ありTrueTrueTrueFalseNo
EQ_UQ8H等しいFalseFalseTrueTrueNo
NGE_US (NGE)9h小さいFalseTrueFalseTrueYes
NGT_US (NGT)Ah<=FalseTrueTrueTrueYes
FALSE_OQ(FALSE)BhFalseFalseFalseFalseFalseNo
NEQ_OQCh等しくないTrueTrueFalseFalseNo
GE_OS (GE)Dh>=TrueFalseTrueFalseYes
GT_OS (GT)Eh大きいTrueFalseFalseFalseYes
TRUE_UQ(TRUE)FhTrueTrueTrueTrueTrueNo
EQ_OS10h等しいFalseFalseTrueFalseYes
LT_OQ11h小さいFalseTrueFalseFalseNo
LE_OQ12h<=FalseTrueTrueFalseNo
UNORD_S13h順序なしFalseFalseFalseTrueYes
NEQ_US14h等しくないTrueTrueFalseTrueYes
NLT_UQ15h>=TrueFalseTrueTrueNo
NLE_UQ16h大きいTrueFalseFalseTrueNo
ORD_S17h順序ありTrueTrueTrueFalseYes
EQ_US18h等しいFalseFalseTrueTrueYes
NGE_UQ19h小さいFalseTrueFalseTrueNo
NGT_UQ1Ah<=FalseTrueTrueTrueNo
FALSE_OS1BhFalseFalseFalseFalseFalseYes
NEQ_OS1Ch等しくないTrueTrueFalseFalseYes
GE_OQ1Dh>=TrueFalseTrueFalseNo
GT_OQ1Eh大きいTrueFalseFalseFalseNo
TRUE_US1FhTrueTrueTrueTrueTrueYes
CMPSS xmm1, xmm2/mem32, imm8 | F3 0F C2 /r ib | SSE
VCMPSS xmm1, xmm2, xmm3/mem32, imm8 | C4 RXB.00001 X.src.X.10 C2 /r ib | AVX
第1ソースの下位 32bit 単精度浮動小数点値と、第2ソースの対応する値を比較し、結果を宛先の下位 32bit に書き込みます。

TRUE の場合、すべてのビットが 1 になり、FALSE では、すべてのビットが 0 になります。
比較のタイプは、即値オペランドによって指定されます。

タイプ値を指定した、以下のエイリアス命令があります。(AVX では先頭に V を付ける)

CMPEQSS xmm1, xmm2    | CMPSS xmm1, xmm2, 0
CMPLTSS xmm1, xmm2    | CMPSS xmm1, xmm2, 1
CMPLESS xmm1, xmm2    | CMPSS xmm1, xmm2, 2
CMPUNORDSS xmm1, xmm2 | CMPSS xmm1, xmm2, 3
CMPNEQSS xmm1, xmm2   | CMPSS xmm1, xmm2, 4
CMPNLTSS xmm1, xmm2   | CMPSS xmm1, xmm2, 5
CMPNLESS xmm1, xmm2   | CMPSS xmm1, xmm2, 6
CMPORDSS xmm1, xmm2   | CMPSS xmm1, xmm2, 7
CMPPS xmm1, xmm2/mem128, imm8 | 0F C2 /r ib | SSE
VCMPPS xmm1, xmm2, xmm3/mem128, imm8 | C4 RXB.00001 X.src.0.00 C2 /r ib | AVX
VCMPPS ymm1, ymm2, ymm3/mem256, imm8 | C4 RXB.00001 X.src.1.00 C2 /r ib | AVX
第1ソースのパック単精度浮動小数点値と、第2ソースの対応する値を比較し、結果を宛先の対応する 32bit 位置に書き込みます。

TRUE の場合、すべてのビットが 1 になり、FALSE では、すべてのビットが 0 になります。
比較のタイプは、即値オペランドによって指定されます。

タイプ値を指定した、以下のエイリアス命令があります。(AVX では先頭に V を付ける)

CMPEQPS xmm1, xmm2    | CMPPS xmm1, xmm2, 0
CMPLTPS xmm1, xmm2    | CMPPS xmm1, xmm2, 1
CMPLEPS xmm1, xmm2    | CMPPS xmm1, xmm2, 2
CMPUNORDPS xmm1, xmm2 | CMPPS xmm1, xmm2, 3
CMPNEQPS xmm1, xmm2   | CMPPS xmm1, xmm2, 4
CMPNLTPS xmm1, xmm2   | CMPPS xmm1, xmm2, 5
CMPNLEPS xmm1, xmm2   | CMPPS xmm1, xmm2, 6
CMPORDPS xmm1, xmm2   | CMPPS xmm1, xmm2, 7
COMISS xmm1, xmm2/mem32   | 0F 2F /r | SSE
VCOMISS xmm1, xmm2 /mem32 | C4 RXB.00001 X.src.X.00 2F /r | AVX
第1ソースの下位 32bit の単精度浮動小数点値と、第2ソースの対応する値を比較し、rFLAGS の ZF, PF, CF を設定します。

オペランド値の一方または両方が NaN の場合、結果は順序なしとなり、rFLAGS の OF, AF, SF ビットはクリアされます。
#XF SIMD 浮動小数点例外が発生した場合、rFLAGS は更新されません。
rFLAGS
-ZFPFCF
NaN111
operand 1 > operand 2000
operand 1 < operand 2001
operand 1 == operand 2100
UCOMISS xmm1, xmm2/mem32  | 0F 2E /r | SSE
VUCOMISS xmm1, xmm2/mem32 | C4 RXB.01 X.1111.X.00 2E /r | AVX
2つのソースの、下位 32bit の倍精度浮動小数点値で、順序なし比較を行い、rFLAGS の ZF, PF, CF に結果を設定します。

ZF PF OF
 1  1  1 : 順序なし
 0  0  0 : src1 > src1
 0  0  1 : src1 < src2
 1  0  0 : src1 = src2

rFLAGS の OF, AF, SF ビットはクリアされます。
マスクされていない SIMD 浮動小数点例外 (#XF) が発生した場合、rFLAGS ビットは更新されません。
ソース値の一方または両方が NaN の場合、結果は順序なしになります。
ソース値が SNaN の場合にのみ、SIMD 浮動小数点無効演算例外 (#I) を通知します。
倍精度
CMPSD xmm1, xmm2/mem64, imm8 | F2 0F C2 /r ib | SSE2
VCMPSD xmm1, xmm2, xmm3/mem64, imm8 | C4 RXB.00001 X.src.X.11 C2 /r ib | AVX
第1ソースの下位 64bit 倍精度浮動小数点値と、第2ソースの対応する値を比較し、結果を宛先の下位 64bit に書き込みます。

TRUE の場合、すべてのビットが 1 になり、FALSE では、すべてのビットが 0 になります。
比較のタイプは、即値オペランドによって指定されます。

タイプ値を指定した、以下のエイリアス命令があります。(AVX では先頭に V を付ける)

CMPEQSD xmm1, xmm2    | CMPSD xmm1, xmm2, 0
CMPLTSD xmm1, xmm2    | CMPSD xmm1, xmm2, 1
CMPLESD xmm1, xmm2    | CMPSD xmm1, xmm2, 2
CMPUNORDSD xmm1, xmm2 | CMPSD xmm1, xmm2, 3
CMPNEQSD xmm1, xmm2   | CMPSD xmm1, xmm2, 4
CMPNLTSD xmm1, xmm2   | CMPSD xmm1, xmm2, 5
CMPNLESD xmm1, xmm2   | CMPSD xmm1, xmm2, 6
CMPORDSD xmm1, xmm2   | CMPSD xmm1, xmm2, 7
CMPPD xmm1, xmm2/mem128, imm8 | 66 0F C2 /r ib | SSE2
VCMPPD xmm1, xmm2, xmm3/mem128, imm8 | C4 RXB.00001 X.src.0.01 C2 /r ib | AVX
VCMPPD ymm1, ymm2, ymm3/mem256, imm8 | C4 RXB.00001 X.src.1.01 C2 /r ib | AVX
第1ソースのパック倍精度浮動小数点値と、第2ソースの対応する値を比較し、結果を宛先の対応する 64bit 位置に書き込みます。

TRUE の場合、すべてのビットが 1 になり、FALSE では、すべてのビットが 0 になります。
比較のタイプは、即値オペランドによって指定されます。

符号付き比較は、両方のオペランドが有効な数値であり、比較タイプで指定された関係を持っている場合にのみ TRUE を返します。
順序付き比較は、両方のオペランドが有効な数値の場合は TRUE を返し、どちらかのオペランドが NaN の場合は FALSE を返します。
順序なし比較は、一方または両方のオペランドが NaN の場合にのみ TRUE を返し、それ以外の場合は FALSE を返します。
QNaN オペランドは、比較タイプが [ 等しい、等しくない、順序あり、順序なし ] でない場合にのみ、無効な操作例外 (IE) を生成します。
SNaN オペランドは、常に IE を生成します。

タイプ値を指定した、以下のエイリアス命令があります。(AVX では先頭に V を付ける)

CMPEQPD xmm1, xmm2    | CMPPD xmm1, xmm2, 0
CMPLTPD xmm1, xmm2    | CMPPD xmm1, xmm2, 1
CMPLEPD xmm1, xmm2    | CMPPD xmm1, xmm2, 2
CMPUNORDPD xmm1, xmm2 | CMPPD xmm1, xmm2, 3
CMPNEQPD xmm1, xmm2   | CMPPD xmm1, xmm2, 4
CMPNLTPD xmm1, xmm2   | CMPPD xmm1, xmm2, 5
CMPNLEPD xmm1, xmm2   | CMPPD xmm1, xmm2, 6
CMPORDPD xmm1, xmm2   | CMPPD xmm1, xmm2, 7
COMISD xmm1, xmm2/mem64   | 66 0F 2F /r | SSE2
VCOMISD xmm1, xmm2 /mem64 | C4 RXB.00001 X.src.X.01 2F /r | AVX
第1ソースの下位 64bit の倍精度浮動小数点値と、第2ソースの対応する値を比較し、rFLAGS の ZF, PF, CF を設定します。

ZF PF CF
 1  1  1 : NaN
 0  0  0 : src1 > src2
 0  0  1 : src1 < src2
 1  0  0 : src1 = src2

オペランド値の一方または両方が NaN の場合、結果は順序なしとなり、rFLAGS の OF, AF, SF ビットはクリアされます。
SIMD 浮動小数点例外 (#XF) が発生した場合、rFLAGS は更新されません。
UCOMISD xmm1, xmm2/mem64  | 66 0F 2E /r | SSE2
VUCOMISD xmm1, xmm2/mem64 | C4 RXB.00001 X.1111.X.01 2E /r | AVX
2つのソースの、下位 64bit の倍精度浮動小数点値で、順序なし比較を行い、rFLAGS の ZF, PF, CF に結果を設定します。

ZF PF OF
 1  1  1 : 順序なし
 0  0  0 : src1 > src1
 0  0  1 : src1 < src2
 1  0  0 : src1 = src2

rFLAGS の OF, AF, SF ビットはクリアされます。
マスクされていない SIMD 浮動小数点例外 (#XF) が発生した場合、rFLAGS ビットは更新されません。
ソース値の一方または両方が NaN の場合、結果は順序なしになります。
UCOMISD は、ソース値が SNaN の場合にのみ、SIMD 浮動小数点無効演算例外 (#I) を通知します。
文字列比較
|7| 6 |5 4|3  2|1 0| bit
|-| i |not|type|src|
文字列比較の即値オペランド
bit1-0
ソースデータ形式
00b符号なし 8bit
01b符号なし 16bit
10b符号あり 8bit
11b符号あり 16bit
bit3-2
比較タイプ
(max は、レジスタに格納できる最大文字数)

00b各文字が、指定されたサブセットの文字列内に含まれているか。
第1ソースはサブセットの文字列、第2ソースは比較する文字列となる。
CmprSumm の各ビットは、サブセットに含まれていれば 1、そうでなければ 0 となる。
CmprSumm のビット [(max-1):len2] はクリアされます。
01b第1ソースで最小値と最大値のペアを指定し、第2ソースの各文字が、その範囲内にあるかをテストする。
CmprSumm のビット [(max-1):len2] はクリアされます。
第1ソースの長さが奇数の場合、最後の値は事実上無視されます。
10b第1ソースと第2ソースの各文字をテストする。
CmprSumm の各ビットは、それぞれの文字が等しければ 1、そうでなければ 0 になる。
CmprSumm のビット [(max-1):max(len1, len2)] はすべて 1 になります (NULL 扱い)。
11b完全一致の部分文字列検索。
第1ソースに部分文字列、第2ソースに比較対象文字列を指定する。
CmprSumm のビット i は、部分文字列が一致した位置 i ごとに 1 になり、それ以外は 0 になる。
(NULL 文字は一致しない)
bit5-4
CmprSumm ビットの後処理。

bit 4 は、CmprSumm でビットの反転が行われるかどうか。
bit 5 は、ビットの反転が、CmprSumm 全体に適用されるか (0)、第2ソースの文字に対応するビットのみに適用されるか (1)。
bit6
ECX にインデックス位置を書き込む命令の場合、CmprSumm の後処理後の値で、1 になっているビットの最下位または最上位のインデックス位置を ECX に書き込みます。
bit6 が 0 で最下位のインデックス、1 で最上位のインデックス位置を書き込みます。
※1 になっているビットがない場合、最大処理文字数の値が格納されます (ソースが 8bit なら 16)。

XMM0 にマスクを書き込む命令の場合、
bit6 = 0 で、CmprSumm の値をそのままマスクとし、128bit にゼロ拡張して書き込みます。
bit6 = 1 で、CmprSumm の各ビットが、それぞれ 8bit または 16bit のマスクとして拡張されます。
文字列比較の rFLAGS
文字列比較の rFLAGS
PF,AF
常に 0
CF
後処理後の CmprSumm が 0 の場合、0。一つ以上のビットが 1 なら、1。
OF
後処理後の CmprSumm の最下位ビットと同じ値。
ZF
第2ソースの長さが、レジスタに格納できる最大数より短い場合、1。
SF
第1ソースの長さが、レジスタに格納できる最大数より短い場合、1。
PCMPESTRI xmm1, xmm2/mem128, imm8  | 66 0F 3A 61 /r ib | SSE4.2
VPCMPESTRI xmm1, xmm2/mem128, imm8 | C4 RXB.00011 X.1111.0.01 61 /r ib | AVX
即値オペランドの値に従って、2つのオペランドの文字列データを比較し、ECX レジスタに結果のインデックスを書き込みます。
また、rFLAGS を設定します。

EAX/RAX レジスタで、第1ソースの文字列の長さを指定します。
EDX/RDX レジスタで、第2ソースの文字列の長さを指定します。
文字列の長さがレジスタのサイズより大きい場合、長さは最大値に設定されます。
PCMPESTRM xmm1, xmm2/mem128, imm8   | 66 0F 3A 60 /r ib | SSE4.2
VPCMPESTRM xmm1, xmm2/mem128, imm8 | C4 RXB.00011 X.1111.0.01 60 /r ib | AVX
即値オペランドの値に従って、2つのオペランドの文字列データを比較し、XMM0 レジスタに結果のマスクを書き込みます。
また、rFLAGS を設定します。

EAX/RAX レジスタで、第1ソースの文字列の長さを指定します。
EDX/RDX レジスタで、第2ソースの文字列の長さを指定します。
文字列の長さがレジスタのサイズより大きい場合、長さは最大値に設定されます。

中間過程で生成され、後処理されたビットは、128bit にゼロ拡張されるか、8bit/16bit にマスクに拡張されて、XMM0 に書き込まれます。
PCMPISTRI xmm1, xmm2/mem128, imm8  | 66 0F 3A 63 /r ib | SSE4.2
VPCMPISTRI xmm1, xmm2/mem128, imm8 | C4 RXB.03 X.1111.0.01 63 /r ib | AVX
即値オペランドの値に従って、2つのオペランドの文字列データを比較し、ECX レジスタに結果のインデックスを書き込みます。
また、rFLAGS を設定します。

文字列は、NULL 文字 (0) で終了します。最大処理数の長さと同じ場合、NULL は必要ありません。
PCMPISTRM xmm1, xmm2/mem128, imm8  | 66 0F 3A 62 /r ib | SSE4.2
VPCMPISTRM xmm1, xmm2/mem128, imm8 | C4 RXB.03 X.1111.0.01 62 /r ib | AVX
即値オペランドの値に従って、2つのオペランドの文字列データを比較し、XMM0 レジスタに結果のマスクを書き込みます。
また、rFLAGS を設定します。

文字列は、NULL 文字 (0) で終了します。最大処理数の長さと同じ場合、NULL は必要ありません。