diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2013-10-10 19:08:56 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2013-10-10 19:08:56 +0000 |
commit | 436bf70519b27589bcc0069b184e5f13b455d1da (patch) | |
tree | 7e38cc24e3190daffa8fac3d9df495dc56719d20 /libclc | |
parent | 6c7b86c1061994c07c9a0dc608f979b3a10fa9da (diff) | |
download | bcm5719-llvm-436bf70519b27589bcc0069b184e5f13b455d1da.tar.gz bcm5719-llvm-436bf70519b27589bcc0069b184e5f13b455d1da.zip |
Implement sign() builtin
llvm-svn: 192384
Diffstat (limited to 'libclc')
-rw-r--r-- | libclc/generic/include/clc/clc.h | 3 | ||||
-rw-r--r-- | libclc/generic/include/clc/common/sign.h | 5 | ||||
-rw-r--r-- | libclc/generic/lib/SOURCES | 1 | ||||
-rw-r--r-- | libclc/generic/lib/common/sign.cl | 27 |
4 files changed, 36 insertions, 0 deletions
diff --git a/libclc/generic/include/clc/clc.h b/libclc/generic/include/clc/clc.h index 0e87ec78f09..7846ff71612 100644 --- a/libclc/generic/include/clc/clc.h +++ b/libclc/generic/include/clc/clc.h @@ -86,6 +86,9 @@ #include <clc/shared/vload.h> #include <clc/shared/vstore.h> +/* 6.11.4 Common Functions */ +#include <clc/common/sign.h> + /* 6.11.5 Geometric Functions */ #include <clc/geometric/cross.h> #include <clc/geometric/dot.h> diff --git a/libclc/generic/include/clc/common/sign.h b/libclc/generic/include/clc/common/sign.h new file mode 100644 index 00000000000..fa9aa096541 --- /dev/null +++ b/libclc/generic/include/clc/common/sign.h @@ -0,0 +1,5 @@ +#define __CLC_FUNCTION sign +#define __CLC_BODY <clc/math/unary_decl.inc> +#include <clc/math/gentype.inc> +#undef __CLC_FUNCTION +#undef __CLC_BODY diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES index e1a29729776..35b073987e9 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 00000000000..070abd55db6 --- /dev/null +++ b/libclc/generic/lib/common/sign.cl @@ -0,0 +1,27 @@ +#include <clc/clc.h> + +#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 |