summaryrefslogtreecommitdiffstats
path: root/libclc/generic/lib/math/copysign.cl
diff options
context:
space:
mode:
Diffstat (limited to 'libclc/generic/lib/math/copysign.cl')
-rw-r--r--libclc/generic/lib/math/copysign.cl15
1 files changed, 15 insertions, 0 deletions
diff --git a/libclc/generic/lib/math/copysign.cl b/libclc/generic/lib/math/copysign.cl
index 4e0c51b0937..df65e9d7fec 100644
--- a/libclc/generic/lib/math/copysign.cl
+++ b/libclc/generic/lib/math/copysign.cl
@@ -10,3 +10,18 @@ _CLC_DEFINE_BINARY_BUILTIN(float, copysign, __builtin_copysignf, float, float)
_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
OpenPOWER on IntegriCloud