Intel® oneAPI DPC++/C++ Compiler
Developer Guide and Reference
A newer version of this document is available. Customers should click here to go to the newest version.
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 | 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 value mapping for each class of the conditional select operators, using the Return Value Notation.
| R | A0 | Operators | B | C | D | F32vec4 | F64vec2 | F32vec1 | 
|---|---|---|---|---|---|---|---|---|
| R0:= | (A1 | select_[eq | lt | le | gt | ge] | B0) | C0 | D0 | X | X | X | 
| R1:= | (A2 | select_[eq | lt | le | gt | ge] | B1) | C1 | D1 | X | X | N/A | 
| R2:= | (A2 | select_[eq | lt | le | gt | ge] | B2) | C2 | D2 | X | N/A | N/A | 
| R3:= | (A3 | select_[eq | lt | le | gt | ge] | B3) | C3 | D3 | X | N/A | N/A | 
The following table shows examples for conditional select operations and corresponding intrinsics:
| Comparison | Returns | Example Syntax Usage | Intrinsic | 
|---|---|---|---|
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| Not Greater Than or Equal To | 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 | |
| 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 | |
| Less Than or Equal To | 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 | |
| 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 | |
| Not Less Than or Equal To | 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 |