For each component of a vector type, result[i
] = if MSB of c
[i
] is set ? b
[i
] : a
[i
].
For scalar type, result = c
? b
: a
.
gentype select(gentype a,
gentype b,
igentype c)
gentype select(gentype a,
gentype b,
ugentype c)
halfn select (halfn a, halfn b, shortn c) // if half extension enabled halfn select (halfn a, halfn b, ushortn c) // if half extension enabled
Description
For each component of a vector type, result[i
] = if MSB of c
[i
] is set ? b
[i
] : a
[i
].
For scalar type, result = c
? b
: a
.
igentype
and ugentype
must have the same number of elements and bits as gentype
.
Note

The above definition means that the behavior of select and the ternary operator for vector and scalar types is dependent on different interpretations of the bit pattern of c .

Notes
General information about relational functions:
The argment type gentype
can be char
, charn
, uchar
, ucharn
, short
, shortn
, ushort
, ushortn
, int
, intn
, uint
, uintn
, long
, longn
, ulong
, ulongn
, float
, floatn
, double
, and doublen
.
The argument type igentype
refers to the builtin signed integer types, i.e.
char
, charn
, short
, shortn
, int
, intn
, long
, and longn
.
n is 2, 3, 4, 8, or 16.
The argument type ugentype
refers to the builtin unsigned integer types, i.e.
uchar
, ucharn
, ushort
, ushortn
, uint
, uintn
, ulong
, and ulongn
.
n is 2, 3, 4, 8, or 16.
If an implementation extends this specification to support IEEE754 flags or exceptions, then all builtin relational functions shall proceed without raising the invalid
floatingpoint exception when one or more of the operands are NaNs.
The builtin relational functions are extended with cl_khr_fp16
to include versions that take half
, and half{234816}
as arguments.