diff --git a/libclc/clc/include/clc/math/clc_copysign.h b/libclc/clc/include/clc/math/clc_copysign.h new file mode 100644 index 0000000000000..2b08acf73795f --- /dev/null +++ b/libclc/clc/include/clc/math/clc_copysign.h @@ -0,0 +1,12 @@ +#ifndef __CLC_MATH_CLC_COPYSIGN_H__ +#define __CLC_MATH_CLC_COPYSIGN_H__ + +#define __CLC_BODY +#define __CLC_FUNCTION __clc_copysign + +#include + +#undef __CLC_BODY +#undef __CLC_FUNCTION + +#endif // __CLC_MATH_CLC_COPYSIGN_H__ diff --git a/libclc/clc/include/clc/shared/binary_def.inc b/libclc/clc/include/clc/shared/binary_def.inc new file mode 100644 index 0000000000000..e6ef867f12c6b --- /dev/null +++ b/libclc/clc/include/clc/shared/binary_def.inc @@ -0,0 +1,10 @@ +#include + +#ifndef __CLC_FUNCTION +#define __CLC_FUNCTION(x) __CLC_CONCAT(__clc_, x) +#endif + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE FUNCTION(__CLC_GENTYPE a, + __CLC_GENTYPE b) { + return __CLC_FUNCTION(FUNCTION)(a, b); +} diff --git a/libclc/clc/lib/clspv/SOURCES b/libclc/clc/lib/clspv/SOURCES index 81f90a24d00d6..d5f5c68fd7ebf 100644 --- a/libclc/clc/lib/clspv/SOURCES +++ b/libclc/clc/lib/clspv/SOURCES @@ -1,4 +1,5 @@ ../generic/math/clc_ceil.cl +../generic/math/clc_copysign.cl ../generic/math/clc_fabs.cl ../generic/math/clc_floor.cl ../generic/math/clc_mad.cl diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES index 59dad8e860689..9feda65c45f4b 100644 --- a/libclc/clc/lib/generic/SOURCES +++ b/libclc/clc/lib/generic/SOURCES @@ -5,6 +5,7 @@ geometric/clc_dot.cl integer/clc_abs.cl integer/clc_abs_diff.cl math/clc_ceil.cl +math/clc_copysign.cl math/clc_fabs.cl math/clc_floor.cl math/clc_mad.cl diff --git a/libclc/clc/lib/generic/math/clc_copysign.cl b/libclc/clc/lib/generic/math/clc_copysign.cl new file mode 100644 index 0000000000000..e225ec80692fb --- /dev/null +++ b/libclc/clc/lib/generic/math/clc_copysign.cl @@ -0,0 +1,27 @@ +#include +#include + +_CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(float, __clc_copysign, + __builtin_elementwise_copysign, float, + float) + +#ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +_CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(double, __clc_copysign, + __builtin_elementwise_copysign, double, + double) + +#endif + +#ifdef cl_khr_fp16 + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +_CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(half, __clc_copysign, + __builtin_elementwise_copysign, half, + half) + +#endif + diff --git a/libclc/clc/lib/spirv/SOURCES b/libclc/clc/lib/spirv/SOURCES index 813b1e3d69937..509236d587cd0 100644 --- a/libclc/clc/lib/spirv/SOURCES +++ b/libclc/clc/lib/spirv/SOURCES @@ -3,6 +3,7 @@ ../generic/common/clc_smoothstep.cl ../generic/geometric/clc_dot.cl ../generic/math/clc_ceil.cl +../generic/math/clc_copysign.cl ../generic/math/clc_fabs.cl ../generic/math/clc_floor.cl ../generic/math/clc_mad.cl diff --git a/libclc/clc/lib/spirv64/SOURCES b/libclc/clc/lib/spirv64/SOURCES index 813b1e3d69937..509236d587cd0 100644 --- a/libclc/clc/lib/spirv64/SOURCES +++ b/libclc/clc/lib/spirv64/SOURCES @@ -3,6 +3,7 @@ ../generic/common/clc_smoothstep.cl ../generic/geometric/clc_dot.cl ../generic/math/clc_ceil.cl +../generic/math/clc_copysign.cl ../generic/math/clc_fabs.cl ../generic/math/clc_floor.cl ../generic/math/clc_mad.cl diff --git a/libclc/generic/lib/math/copysign.cl b/libclc/generic/lib/math/copysign.cl index 08045bebf88a1..59cd4f6520305 100644 --- a/libclc/generic/lib/math/copysign.cl +++ b/libclc/generic/lib/math/copysign.cl @@ -1,27 +1,7 @@ #include -#include +#include -_CLC_DEFINE_BINARY_BUILTIN(float, copysign, __builtin_copysignf, float, float) +#define FUNCTION copysign +#define __CLC_BODY -#ifdef cl_khr_fp64 - -#pragma OPENCL EXTENSION cl_khr_fp64 : enable - -_CLC_DEFINE_BINARY_BUILTIN(double, copysign, __builtin_copysign, double, double) - -#endif - -#ifdef cl_khr_fp16 - -#pragma OPENCL EXTENSION cl_khr_fp16 : enable - -_CLC_DEF _CLC_OVERLOAD half copysign(half x, half y) -{ - ushort sign_x = as_ushort(x) & 0x8000u; - ushort unsigned_y = as_ushort(y) & 0x7ffffu; - - return as_half((ushort)(sign_x | unsigned_y)); -} -_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, copysign, half, half) - -#endif +#include