このセクションでは、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] cmp[ne | nlt | nle | ngt | nge] |
B1) B1) |
0xffffffff | 0x0000000 | X | X | X |
R1:= | (A1
!(A1 |
cmp[eq | lt | le | gt | ge] cmp[ne | nlt | nle | ngt | nge] |
B2) B2) |
0xffffffff | 0x0000000
|
X | X | N/A |
R2:= | (A1
!(A1 |
cmp[eq | lt | le | gt | ge] cmp[ne | nlt | nle | ngt | nge] |
B3) B3) |
0xffffffff | 0x0000000
|
X | N/A | N/A |
R3:= | A3 | cmp[eq | lt | le | gt | ge] cmp[ne | nlt | nle | ngt | nge] |
B3) B3) |
0xffffffff | 0x0000000
|
X | N/A | N/A |
次の表に、比較演算と組み込み関数の例をいくつか示します。
戻り値 | 構文の使用例 | 組み込み関数 |
---|---|---|
等しいかどうかの比較 | ||
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 |