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 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) |
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.
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.
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 |