インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
このセクションでは、A と B の単精度浮動小数点値を比較する演算子について説明します。Fvec クラスのオブジェクト同士を比較した場合は、比較されたオブジェクトと同じクラスで戻り値が返ってきます。
次の表は、Fvec クラスの比較演算子を示したものです。
比較の条件 |
演算子 |
構文 |
---|---|---|
等しい |
cmpeq |
R = cmpeq(A, B) |
等しくない |
cmpneq |
R = cmpneq(A, B) |
より大きい |
cmpgt |
R = cmpgt(A, B) |
以上 |
cmpge |
R = cmpge(A, B) |
より大きくない |
cmpngt |
R = cmpngt(A, B) |
以上でない |
cmpnge |
R = cmpnge(A, B) |
より小さい |
cmplt |
R = cmplt(A, B) |
以下 |
cmple |
R = cmple(A, B) |
より小さくない |
cmpnlt |
R = cmpnlt(A, B) |
以下でない |
cmpnle |
R = cmpnle(A, B) |
比較した結果が真の場合、そのマスクは浮動小数点値ごとに 0xffffffff にセットされます。同様に、偽の場合は 0x00000000 にセットされます。次の表は、比較演算子のクラスごとに戻り値を列挙したものです。「戻り値の表記法」の前半に述べた構文が使われます。
R |
A0 |
任意の演算子 |
B |
真の場合 |
偽の場合 |
F32vec4 |
F64vec2 |
F32vec1 |
---|---|---|---|---|---|---|---|---|
R0:= |
(A1 |
cmp[eq | lt | le | gt | ge] |
B1) |
0xffffffff |
0x0000000 |
〇 |
〇 |
〇 |
R1:= |
(A1 |
cmp[eq | lt | le | gt | ge] |
B2) |
0xffffffff |
0x0000000 |
〇 |
〇 |
× |
R2:= |
(A1 |
cmp[eq | lt | le | gt | ge] |
B3) |
0xffffffff |
0x0000000 |
〇 |
× |
× |
R3:= |
A3 |
cmp[eq | lt | le | gt | ge] |
B3) |
0xffffffff |
0x0000000 |
〇 |
× |
× |
次の表に、比較演算と組込み関数の例をいくつか示します。
戻り値 |
構文の使用例 |
組込み関数 |
---|---|---|
等しいかどうかの比較 | ||
4 float |
F32vec4 R = cmpeq(F32vec4 A); |
_mm_cmpeq_ps |
2 double |
F64vec2 R = cmpeq(F64vec2 A); |
_mm_cmpeq_pd |
1 float |
F32vec1 R = cmpeq(F32vec1 A); |
_mm_cmpeq_ss |
等しくないかどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmpneq(F32vec4 A); |
_mm_cmpneq_ps |
2 double |
F64vec2 R = cmpneq(F64vec2 A); |
_mm_cmpneq_pd |
1 float |
F32vec1 R = cmpneq(F32vec1 A); |
_mm_cmpneq_ss |
より小さいかどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmplt(F32vec4 A); |
_mm_cmplt_ps |
2 double |
F64vec2 R = cmplt(F64vec2 A); |
_mm_cmplt_pd |
1 float |
F32vec1 R = cmplt(F32vec1 A); |
_mm_cmplt_ss |
以下かどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmple(F32vec4 A); |
_mm_cmple_ps |
2 double |
F64vec2 R = cmple(F64vec2 A); |
_mm_cmple_pd |
1 float |
F32vec1 R = cmple(F32vec1 A); |
_mm_cmple_pd |
より大きいかどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmpgt(F32vec4 A); |
_mm_cmpgt_ps |
2 double |
F64vec2 R = cmpgt(F32vec42 A); |
_mm_cmpgt_pd |
1 float |
F32vec1 R = cmpgt(F32vec1 A); |
_mm_cmpgt_ss |
以上かどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmpge(F32vec4 A); |
_mm_cmpge_ps |
2 double |
F64vec2 R = cmpge(F64vec2 A); |
_mm_cmpge_pd |
1 float |
F32vec1 R = cmpge(F32vec1 A); |
_mm_cmpge_ss |
より小さくないかどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmpnlt(F32vec4 A); |
_mm_cmpnlt_ps |
2 double |
F64vec2 R = cmpnlt(F64vec2 A); |
_mm_cmpnlt_pd |
1 float |
F32vec1 R = cmpnlt(F32vec1 A); |
_mm_cmpnlt_ss |
以下でないかどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmpnle(F32vec4 A); |
_mm_cmpnle_ps |
2 double |
F64vec2 R = cmpnle(F64vec2 A); |
_mm_cmpnle_pd |
1 float |
F32vec1 R = cmpnle(F32vec1 A); |
_mm_cmpnle_ss |
より大きくないかどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmpngt(F32vec4 A); |
_mm_cmpngt_ps |
2 double |
F64vec2 R = cmpngt(F64vec2 A); |
_mm_cmpngt_pd |
1 float |
F32vec1 R = cmpngt(F32vec1 A); |
_mm_cmpngt_ss |
以上でないかどうかの比較 | ||
---|---|---|
4 float |
F32vec4 R = cmpnge(F32vec4 A); |
_mm_cmpnge_ps |
2 double |
F64vec2 R = cmpnge(F64vec2 A); |
_mm_cmpnge_pd |
1 float |
F32vec1 R = cmpnge(F32vec1 A); |
_mm_cmpnge_ss |