From 436bf70519b27589bcc0069b184e5f13b455d1da Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 10 Oct 2013 19:08:56 +0000 Subject: [PATCH] Implement sign() builtin llvm-svn: 192384 --- libclc/generic/include/clc/clc.h | 3 +++ libclc/generic/include/clc/common/sign.h | 5 +++++ libclc/generic/lib/SOURCES | 1 + libclc/generic/lib/common/sign.cl | 27 ++++++++++++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 libclc/generic/include/clc/common/sign.h create mode 100644 libclc/generic/lib/common/sign.cl diff --git a/libclc/generic/include/clc/clc.h b/libclc/generic/include/clc/clc.h index 0e87ec78f09e..7846ff716122 100644 --- a/libclc/generic/include/clc/clc.h +++ b/libclc/generic/include/clc/clc.h @@ -86,6 +86,9 @@ #include #include +/* 6.11.4 Common Functions */ +#include + /* 6.11.5 Geometric Functions */ #include #include diff --git a/libclc/generic/include/clc/common/sign.h b/libclc/generic/include/clc/common/sign.h new file mode 100644 index 000000000000..fa9aa096541f --- /dev/null +++ b/libclc/generic/include/clc/common/sign.h @@ -0,0 +1,5 @@ +#define __CLC_FUNCTION sign +#define __CLC_BODY +#include +#undef __CLC_FUNCTION +#undef __CLC_BODY diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES index e1a297297763..35b073987e98 100644 --- a/libclc/generic/lib/SOURCES +++ b/libclc/generic/lib/SOURCES @@ -1,5 +1,6 @@ atomic/atomic_impl.ll convert.cl +common/sign.cl geometric/cross.cl geometric/dot.cl geometric/length.cl diff --git a/libclc/generic/lib/common/sign.cl b/libclc/generic/lib/common/sign.cl new file mode 100644 index 000000000000..070abd55db66 --- /dev/null +++ b/libclc/generic/lib/common/sign.cl @@ -0,0 +1,27 @@ +#include + +#define SIGN(TYPE, F) \ +_CLC_DEF _CLC_OVERLOAD TYPE sign(TYPE x) { \ + if (isnan(x)) { \ + return 0.0F; \ + } \ + if (x > 0.0F) { \ + return 1.0F; \ + } \ + if (x < 0.0F) { \ + return -1.0F; \ + } \ + return x; /* -0.0 or +0.0 */ \ +} + +SIGN(float, f) +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, sign, float) + +#ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +SIGN(double, ) +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, sign, double) + +#endif