[docs] Update HowToReleaseLLVM documentation.
[llvm-project.git] / libclc / amdgcn / lib / math / fmax.cl
blobcb796161010829b4baab6279ae073dfb02f3b35f
1 #include <clc/clc.h>
3 #include "../../../generic/lib/clcmacro.h"
5 _CLC_DEF _CLC_OVERLOAD float fmax(float x, float y)
7 /* fcanonicalize removes sNaNs and flushes denormals if not enabled.
8 * Otherwise fmax instruction flushes the values for comparison,
9 * but outputs original denormal */
10 x = __builtin_canonicalizef(x);
11 y = __builtin_canonicalizef(y);
12 return __builtin_fmaxf(x, y);
14 _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, fmax, float, float)
16 #ifdef cl_khr_fp64
18 #pragma OPENCL EXTENSION cl_khr_fp64 : enable
20 _CLC_DEF _CLC_OVERLOAD double fmax(double x, double y)
22 x = __builtin_canonicalize(x);
23 y = __builtin_canonicalize(y);
24 return __builtin_fmax(x, y);
26 _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, fmax, double, double)
28 #endif
29 #ifdef cl_khr_fp16
31 #pragma OPENCL EXTENSION cl_khr_fp16 : enable
33 _CLC_DEF _CLC_OVERLOAD half fmax(half x, half y)
35 if (isnan(x))
36 return y;
37 if (isnan(y))
38 return x;
39 return (y < x) ? x : y;
41 _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, fmax, half, half)
43 #endif
45 #define __CLC_BODY <../../../generic/lib/math/fmax.inc>
46 #include <clc/math/gentype.inc>