Conditional Select Operators for Fvec
Classes
Each conditional function compares single-precision
floating-point values of A and B. The C and D parameters are used for return
value. Comparison between objects of any Fvec class returns the same class.
Conditional Select Operators for Fvec
Classes
Conditional Select for:
| Operators
| Syntax
|
---|---|---|
Equality
| select_eq | R
= select_eq(A, B) |
Inequality
| select_neq | R
= select_neq(A, B) |
Greater Than
| select_gt | R
= select_gt(A, B) |
Greater Than or Equal To
| select_ge | R
= select_ge(A, B) |
Not Greater Than
| select_gt | R
= select_gt(A, B) |
Not Greater Than or Equal To
| select_ge | R
= select_ge(A, B) |
Less Than
| select_lt | R
= select_lt(A, B) |
Less Than or Equal To
| select_le | R
= select_le(A, B) |
Not Less Than
| select_nlt | R
= select_nlt(A, B) |
Not Less Than or Equal To
| select_nle | R
= select_nle(A, B) |
Conditional Select Operator Usage
For conditional select operators, the return value
is stored in C if the comparison is true or in D if false. The following table
shows the return values for each class of the conditional select operators,
using the
Return Value Notation described
earlier.
Compare Operator
Return Value Mapping
R
| A0
| Operators
| B
| C
| D
| F32vec4
| F64vec2
| F32vec1
|
---|---|---|---|---|---|---|---|---|
R0:= | (A1 !(A1 | select_[eq | lt | le | gt | ge] select_[ne | nlt | nle | ngt | nge] | B0) B0) | C0 C0 | D0 D0 | X | X | X |
R1:= | (A2 !(A2 | select_[eq | lt | le | gt | ge] select_[ne | nlt | nle | ngt | nge] | B1) B1) | C1 C1 | D1 D1 | X | X | N/A |
R2:= | (A2 !(A2 | select_[eq | lt | le | gt | ge] select_[ne | nlt | nle | ngt | nge] | B2) B2) | C2 C2 | D2 D2 | X | N/A | N/A |
R3:= | (A3 !(A3 | select_[eq | lt | le | gt | ge] select_[ne | nlt | nle | ngt | nge] | B3) B3) | C3 C3 | D3 D3 | X | N/A | N/A |
The following table shows examples for conditional
select operations and corresponding intrinsics.
Conditional Select
Operations for Fvec Classes
Returns
| Example Syntax Usage
| Intrinsic
|
---|---|---|
Compare for Equality
| ||
4 floats
| F32vec4 R = select_eq(F32vec4 A); | _mm_cmpeq_ps |
2 doubles
| F64vec2 R = select_eq(F64vec2 A); | _mm_cmpeq_pd |
1 float
| F32vec1 R = select_eq(F32vec1 A); | _mm_cmpeq_ss |
Compare for Inequality
| ||
---|---|---|
4 floats
| F32vec4 R = select_neq(F32vec4 A); | _mm_cmpneq_ps |
2 doubles
| F64vec2 R = select_neq(F64vec2 A); | _mm_cmpneq_pd |
1 float
| F32vec1 R = select_neq(F32vec1 A); | _mm_cmpneq_ss |
Compare for Less Than
| ||
---|---|---|
4 floats
| F32vec4 R = select_lt(F32vec4 A); | _mm_cmplt_ps |
2 doubles
| F64vec2 R = select_lt(F64vec2 A); | _mm_cmplt_pd |
1 float
| F32vec1 R = select_lt(F32vec1 A); | _mm_cmplt_ss |
Compare for Less Than or Equal
| ||
---|---|---|
4 floats
| F32vec4 R = select_le(F32vec4 A); | _mm_cmple_ps |
2 doubles
| F64vec2 R = select_le(F64vec2 A); | _mm_cmple_pd |
1 float
| F32vec1 R = select_le(F32vec1 A); | _mm_cmple_ps |
Compare for Greater Than
| ||
---|---|---|
4 floats
| F32vec4 R = select_gt(F32vec4 A); | _mm_cmpgt_ps |
2 doubles
| F64vec2 R = select_gt(F64vec2 A); | _mm_cmpgt_pd |
1 float
| F32vec1 R = select_gt(F32vec1 A); | _mm_cmpgt_ss |
Compare for Greater Than or Equal To
| ||
---|---|---|
4 floats
| F32vec1 R = select_ge(F32vec4 A); | _mm_cmpge_ps |
2 doubles
| F64vec2 R = select_ge(F64vec2 A); | _mm_cmpge_pd |
1 float
| F32vec1 R = select_ge(F32vec1 A); | _mm_cmpge_ss |
Compare for Not Less Than
| ||
---|---|---|
4 floats
| F32vec1 R = select_nlt(F32vec4 A); | _mm_cmpnlt_ps |
2 doubles
| F64vec2 R = select_nlt(F64vec2 A); | _mm_cmpnlt_pd |
1 float
| F32vec1 R = select_nlt(F32vec1 A); | _mm_cmpnlt_ss |
Compare for Not Less Than or Equal
| ||
---|---|---|
4 floats
| F32vec1 R = select_nle(F32vec4 A); | _mm_cmpnle_ps |
2 doubles
| F64vec2 R = select_nle(F64vec2 A); | _mm_cmpnle_pd |
1 float
| F32vec1 R = select_nle(F32vec1 A); | _mm_cmpnle_ss |
Compare for Not Greater Than
| ||
---|---|---|
4 floats
| F32vec1 R = select_ngt(F32vec4 A); | _mm_cmpngt_ps |
2 doubles
| F64vec2 R = select_ngt(F64vec2 A); | _mm_cmpngt_pd |
1 float
| F32vec1 R = select_ngt(F32vec1 A); | _mm_cmpngt_ss |
Compare for Not Greater Than or Equal
| ||
---|---|---|
4 floats
| F32vec1 R = select_nge(F32vec4 A); | _mm_cmpnge_ps |
2 doubles
| F64vec2 R = select_nge(F64vec2 A); | _mm_cmpnge_pd |
1 float
| F32vec1 R = select_nge(F32vec1 A); | _mm_cmpnge_ss |