この節では、単精度浮動小数点値である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 !(A1 |
cmp[eq
| lt | le | gt | ge] |
B1) |
0xffffffff |
0x0000000 |
X |
X |
X |
R1:= |
(A1 !(A1 |
cmp[eq
| lt | le | gt | ge] |
B2) |
0xffffffff |
0x0000000
|
X |
X |
非対応 |
R2:= |
(A1 !(A1 |
cmp[eq
| lt | le | gt | ge] |
B3) |
0xffffffff |
0x0000000
|
X |
非対応 |
非対応 |
R3:= |
A3 |
cmp[eq
| lt | le | gt | ge] |
B3) |
0xffffffff |
0x0000000
|
X |
非対応 |
非対応 |
次の表に、比較演算と組込み関数の例をいくつか示します。
戻り値 | 構文の使用例 | 組込み関数 |
---|---|---|
「=」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpeq(F32vec4 A); |
_mm_cmpeq_ps |
doubleが2個 |
F64vec2 R = cmpeq(F64vec2 A); |
_mm_cmpeq_pd |
floatが1個 |
F32vec1 R = cmpeq(F32vec1 A); |
_mm_cmpeq_ss |
「≠」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpneq(F32vec4 A); |
_mm_cmpneq_ps |
doubleが2個 |
F64vec2 R = cmpneq(F64vec2 A); |
_mm_cmpneq_pd |
floatが1個 |
F32vec1 R = cmpneq(F32vec1 A); |
_mm_cmpneq_ss |
「<」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmplt(F32vec4 A); |
_mm_cmplt_ps |
doubleが2個 |
F64vec2 R = cmplt(F64vec2 A); |
_mm_cmplt_pd |
floatが1個 |
F32vec1 R = cmplt(F32vec1 A); |
_mm_cmplt_ss |
「≦」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmple(F32vec4 A); |
_mm_cmple_ps |
doubleが2個 |
F64vec2 R = cmple(F64vec2 A); |
_mm_cmple_pd |
floatが1個 |
F32vec1 R = cmple(F32vec1 A); |
_mm_cmple_pd |
「>」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpgt(F32vec4 A); |
_mm_cmpgt_ps |
doubleが2個 |
F64vec2 R = cmpgt(F32vec42 A); |
_mm_cmpgt_pd |
floatが1個 |
F32vec1 R = cmpgt(F32vec1 A); |
_mm_cmpgt_ss |
「≧」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpge(F32vec4 A); |
_mm_cmpge_ps |
doubleが2個 |
F64vec2 R = cmpge(F64vec2 A); |
_mm_cmpge_pd |
floatが1個 |
F32vec1 R = cmpge(F32vec1 A); |
_mm_cmpge_ss |
「<ではない」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpnlt(F32vec4 A); |
_mm_cmpnlt_ps |
doubleが2個 |
F64vec2 R = cmpnlt(F64vec2 A); |
_mm_cmpnlt_pd |
floatが1個 |
F32vec1 R = cmpnlt(F32vec1 A); |
_mm_cmpnlt_ss |
「≦ではない」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpnle(F32vec4 A); |
_mm_cmpnle_ps |
doubleが2個 |
F64vec2 R = cmpnle(F64vec2 A); |
_mm_cmpnle_pd |
floatが1個 |
F32vec1 R = cmpnle(F32vec1 A); |
_mm_cmpnle_ss |
「>ではない」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpngt(F32vec4 A); |
_mm_cmpngt_ps |
doubleが2個 |
F64vec2 R = cmpngt(F64vec2 A); |
_mm_cmpngt_pd |
floatが1個 |
F32vec1 R = cmpngt(F32vec1 A); |
_mm_cmpngt_ss |
「≧ではない」かどうかの比較 | ||
floatが4個 |
F32vec4 R = cmpnge(F32vec4 A); |
_mm_cmpnge_ps |
doubleが2個 |
F64vec2 R = cmpnge(F64vec2 A); |
_mm_cmpnge_pd |
floatが1個 |
F32vec1 R = cmpnge(F32vec1 A); |
_mm_cmpnge_ss |