各条件付き関数は、単精度浮動小数点値であるAとBを比較します。パラメータC、Dは戻り値に使用されます。Fvecクラスのオブジェクト同士を比較したときの戻り値のデータ型は、比較したオブジェクトと同じデータ型になります。
条件付き選択の条件 | 演算子 | 構文 |
---|---|---|
等しい |
select_eq |
R = select_eq(A, B) |
等しくない |
select_neq |
R = select_neq(A, B) |
より大きい |
select_gt |
R = select_gt(A, B) |
≧ |
select_ge |
R = select_ge(A, B) |
より大きくない |
select_gt |
R = select_gt(A, B) |
≧ではない |
select_ge |
R = select_ge(A, B) |
より小さい |
select_lt |
R = select_lt(A, B) |
≦ |
select_le |
R = select_le(A, B) |
より小さくない |
select_nlt |
R = select_nlt(A, B) |
≦ではない |
select_nle |
R = select_nle(A, B) |
条件付き選択演算子では、比較結果が真の場合は戻り値がCに格納され、偽の場合はDに格納されます。次の表は、条件付き選択演算子のクラスごとの戻り値を列挙したものです。 各戻り値は、先に説明した「戻り値の表記法」に従っています。
R | A0 | 演算子 | B | C | D | F32vec4 | F64vec2 | F32vec1 |
---|---|---|---|---|---|---|---|---|
R0:= |
(A1 !(A1 |
select_[eq | lt | le | gt | ge] |
B0) |
C0 |
D0 |
X |
X |
X |
R1:= |
(A2 !(A2 |
select_[eq | lt | le | gt | ge] |
B1) |
C1 |
D1 |
X |
X |
非対応 |
R2:= |
(A2 !(A2 |
select_[eq | lt | le | gt | ge] |
B2) |
C2 |
D2 |
X |
非対応 |
非対応 |
R3:= |
(A3 !(A3 |
select_[eq | lt | le | gt | ge] |
B3) |
C3 |
D3 |
X |
非対応 |
非対応 |
次の表に、条件付き選択演算および対応する組込み関数の例をいくつか示します。
戻り値 | 構文の使用例 | 組込み関数 |
---|---|---|
「=」かどうかの比較 | ||
floatが4個 |
F32vec4 R = select_eq(F32vec4 A); |
_mm_cmpeq_ps |
doubleが2個 |
F64vec2 R = select_eq(F64vec2 A); |
_mm_cmpeq_pd |
floatが1個 |
F32vec1 R = select_eq(F32vec1 A); |
_mm_cmpeq_ss |
「≠」かどうかの比較 | ||
floatが4個 |
F32vec4 R = select_neq(F32vec4 A); |
_mm_cmpneq_ps |
doubleが2個 |
F64vec2 R = select_neq(F64vec2 A); |
_mm_cmpneq_pd |
floatが1個 |
F32vec1 R = select_neq(F32vec1 A); |
_mm_cmpneq_ss |
「<」かどうかの比較 | ||
floatが4個 |
F32vec4 R = select_lt(F32vec4 A); |
_mm_cmplt_ps |
doubleが2個 |
F64vec2 R = select_lt(F64vec2 A); |
_mm_cmplt_pd |
floatが1個 |
F32vec1 R = select_lt(F32vec1 A); |
_mm_cmplt_ss |
「≦」かどうかの比較 | ||
floatが4個 |
F32vec4 R = select_le(F32vec4 A); |
_mm_cmple_ps |
doubleが2個 |
F64vec2 R = select_le(F64vec2 A); |
_mm_cmple_pd |
floatが1個 |
F32vec1 R = select_le(F32vec1 A); |
_mm_cmple_ps |
「>」かどうかの比較 | ||
floatが4個 |
F32vec4 R = select_gt(F32vec4 A); |
_mm_cmpgt_ps |
doubleが2個 |
F64vec2 R = select_gt(F64vec2 A); |
_mm_cmpgt_pd |
floatが1個 |
F32vec1 R = select_gt(F32vec1 A); |
_mm_cmpgt_ss |
「≧」かどうかの比較 | ||
floatが4個 |
F32vec1 R = select_ge(F32vec4 A); |
_mm_cmpge_ps |
doubleが2個 |
F64vec2 R = select_ge(F64vec2 A); |
_mm_cmpge_pd |
floatが1個 |
F32vec1 R = select_ge(F32vec1 A); |
_mm_cmpge_ss |
「<ではない」かどうかの比較 | ||
floatが4個 |
F32vec1 R = select_nlt(F32vec4 A); |
_mm_cmpnlt_ps |
doubleが2個 |
F64vec2 R = select_nlt(F64vec2 A); |
_mm_cmpnlt_pd |
floatが1個 |
F32vec1 R = select_nlt(F32vec1 A); |
_mm_cmpnlt_ss |
「≦ではない」かどうかの比較 | ||
floatが4個 |
F32vec1 R = select_nle(F32vec4 A); |
_mm_cmpnle_ps |
doubleが2個 |
F64vec2 R = select_nle(F64vec2 A); |
_mm_cmpnle_pd |
floatが1個 |
F32vec1 R = select_nle(F32vec1 A); |
_mm_cmpnle_ss |
「>ではない」かどうかの比較 | ||
floatが4個 |
F32vec1 R = select_ngt(F32vec4 A); |
_mm_cmpngt_ps |
doubleが2個 |
F64vec2 R = select_ngt(F64vec2 A); |
_mm_cmpngt_pd |
floatが1個 |
F32vec1 R = select_ngt(F32vec1 A); |
_mm_cmpngt_ss |
「≧ではない」かどうかの比較 | ||
floatが4個 |
F32vec1 R = select_nge(F32vec4 A); |
_mm_cmpnge_ps |
doubleが2個 |
F64vec2 R = select_nge(F64vec2 A); |
_mm_cmpnge_pd |
floatが1個 |
F32vec1 R = select_nge(F32vec1 A); |
_mm_cmpnge_ss |