整数 | |
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] |
VTESTPS | AND テスト (単精度の符号) [AVX] |
VTESTPD | AND テスト (倍精度の符号) [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 になります。
値が等しい場合、結果は 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 になります。
値が等しい場合、ビットはすべて 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 になります。
値が等しい場合、ビットはすべて 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 になります。
値が等しい場合、ビットはすべて 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 になります。
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 になります。
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 になります。
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 になります。
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 にします。
まず、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 にします。
まず、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 にします。
まず、2つのソースのパック倍精度の、各符号ビットを AND を実行し、結果が 0 の場合、ZF を 1 にします。それ以外は ZF = 0 にします。
次に、第1ソースの符号ビットを反転して、第2ソースの符号ビットと AND します。
その結果が 0 の場合、CF を 1 にします。それ以外は CF = 0 にします。
単精度
浮動小数点比較の即値オペランド
レガシー SSE 命令の場合、下位 3bit (0〜7) のみ使用されます。
拡張 SSE 命令の場合、下位 5bit が使用されます。
* 順序なしは、どちらかの値が NaN の場合。
拡張 SSE 命令の場合、下位 5bit が使用されます。
* 順序なしは、どちらかの値が NaN の場合。
- | タイプ | 説明 | A>B | A<B | A=B | 順序なし* | QNaN例外 |
EQ_OQ (EQ) | 0h | 等しい | False | False | True | False | No |
---|---|---|---|---|---|---|---|
LT_OS (LT) | 1h | 小さい | False | True | False | False | Yes |
LE_OS (LE) | 2h | <= | False | True | True | False | Yes |
UNORD_Q (UNORD) | 3h | 順序なし | False | False | False | True | No |
NEQ_UQ (NEQ) | 4h | 等しくない | True | True | False | True | No |
NLT_US (NLT) | 5h | >= | True | False | True | True | Yes |
NLE_US (NLE) | 6h | 大きい | True | False | False | True | Yes |
ORD_Q (ORD) | 7h | 順序あり | True | True | True | False | No |
EQ_UQ | 8H | 等しい | False | False | True | True | No |
NGE_US (NGE) | 9h | 小さい | False | True | False | True | Yes |
NGT_US (NGT) | Ah | <= | False | True | True | True | Yes |
FALSE_OQ(FALSE) | Bh | False | False | False | False | False | No |
NEQ_OQ | Ch | 等しくない | True | True | False | False | No |
GE_OS (GE) | Dh | >= | True | False | True | False | Yes |
GT_OS (GT) | Eh | 大きい | True | False | False | False | Yes |
TRUE_UQ(TRUE) | Fh | True | True | True | True | True | No |
EQ_OS | 10h | 等しい | False | False | True | False | Yes |
LT_OQ | 11h | 小さい | False | True | False | False | No |
LE_OQ | 12h | <= | False | True | True | False | No |
UNORD_S | 13h | 順序なし | False | False | False | True | Yes |
NEQ_US | 14h | 等しくない | True | True | False | True | Yes |
NLT_UQ | 15h | >= | True | False | True | True | No |
NLE_UQ | 16h | 大きい | True | False | False | True | No |
ORD_S | 17h | 順序あり | True | True | True | False | Yes |
EQ_US | 18h | 等しい | False | False | True | True | Yes |
NGE_UQ | 19h | 小さい | False | True | False | True | No |
NGT_UQ | 1Ah | <= | False | True | True | True | No |
FALSE_OS | 1Bh | False | False | False | False | False | Yes |
NEQ_OS | 1Ch | 等しくない | True | True | False | False | Yes |
GE_OQ | 1Dh | >= | True | False | True | False | No |
GT_OQ | 1Eh | 大きい | True | False | False | False | No |
TRUE_US | 1Fh | True | True | True | True | True | Yes |
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 を付ける)
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 を付ける)
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 は更新されません。
オペランド値の一方または両方が NaN の場合、結果は順序なしとなり、rFLAGS の OF, AF, SF ビットはクリアされます。
#XF SIMD 浮動小数点例外が発生した場合、rFLAGS は更新されません。
rFLAGS
- | ZF | PF | CF |
NaN | 1 | 1 | 1 |
---|---|---|---|
operand 1 > operand 2 | 0 | 0 | 0 |
operand 1 < operand 2 | 0 | 0 | 1 |
operand 1 == operand 2 | 1 | 0 | 0 |
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 に結果を設定します。
rFLAGS の OF, AF, SF ビットはクリアされます。
マスクされていない SIMD 浮動小数点例外 (#XF) が発生した場合、rFLAGS ビットは更新されません。
ソース値の一方または両方が NaN の場合、結果は順序なしになります。
ソース値が SNaN の場合にのみ、SIMD 浮動小数点無効演算例外 (#I) を通知します。
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 を付ける)
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 を付ける)
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 を設定します。
オペランド値の一方または両方が NaN の場合、結果は順序なしとなり、rFLAGS の OF, AF, SF ビットはクリアされます。
SIMD 浮動小数点例外 (#XF) が発生した場合、rFLAGS は更新されません。
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 に結果を設定します。
rFLAGS の OF, AF, SF ビットはクリアされます。
マスクされていない SIMD 浮動小数点例外 (#XF) が発生した場合、rFLAGS ビットは更新されません。
ソース値の一方または両方が NaN の場合、結果は順序なしになります。
UCOMISD は、ソース値が SNaN の場合にのみ、SIMD 浮動小数点無効演算例外 (#I) を通知します。
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 は、レジスタに格納できる最大文字数)
(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)。
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 のマスクとして拡張されます。
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ソースの文字列の長さを指定します。
文字列の長さがレジスタのサイズより大きい場合、長さは最大値に設定されます。
また、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 に書き込まれます。
また、rFLAGS を設定します。
EAX/RAX レジスタで、第1ソースの文字列の長さを指定します。
EDX/RDX レジスタで、第2ソースの文字列の長さを指定します。
文字列の長さがレジスタのサイズより大きい場合、長さは最大値に設定されます。
中間過程で生成され、後処理されたビットは、128bit にゼロ拡張されるか、8bit/16bit にマスクに拡張されて、XMM0 に書き込まれます。