1#include <clc/clc.h> 2#include "relational.h" 3 4#define _CLC_DEFINE_ISORDERED(RET_TYPE, FUNCTION, ARG1_TYPE, ARG2_TYPE) \ 5_CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) { \ 6 return isequal(x, x) && isequal(y, y); \ 7} \ 8 9_CLC_DEFINE_ISORDERED(int, isordered, float, float) 10_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(int, isordered, float, float) 11 12#ifdef cl_khr_fp64 13#pragma OPENCL EXTENSION cl_khr_fp64 : enable 14 15// The scalar version of isordered(double, double) returns an int, but the vector versions 16// return long. 17 18_CLC_DEFINE_ISORDERED(int, isordered, double, double) 19_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(long, isordered, double, double) 20 21#endif 22#ifdef cl_khr_fp16 23#pragma OPENCL EXTENSION cl_khr_fp16 : enable 24 25// The scalar version of isordered(half, half) returns an int, but the vector versions 26// return short. 27 28_CLC_DEFINE_ISORDERED(int, isordered, half, half) 29_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(short, isordered, half, half) 30 31#endif 32 33#undef _CLC_DEFINE_ISORDERED 34