Intel® oneAPI DPC++/C++ Compiler Developer Guide and Reference

ID 767253
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

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
!(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:

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