Implementations for exp(float) and exp(double) v2
authorJeroen Ketema <j.ketema@imperial.ac.uk>
Fri, 13 Jun 2014 09:40:09 +0000 (09:40 +0000)
committerJeroen Ketema <j.ketema@imperial.ac.uk>
Fri, 13 Jun 2014 09:40:09 +0000 (09:40 +0000)
Use separate implementations instead of a macro
to ensure the constant multiplied with is of
higher precision.

v2: Use the correct formula, spotted by Dan Liew <daniel.liew@imperial.ac.uk>

Reviewed-by: Aaron Warty <awatry@gmail.com>
Reviewed-by: Tom Stellard <tom@stellard.net>
llvm-svn: 210891

libclc/generic/include/clc/math/exp.h
libclc/generic/include/clc/math/gentype.inc
libclc/generic/lib/SOURCES

index dbc4b841796e4768a9d945e5073e573fe89de118..9866524762958533724f5bc05b9596b30270e985 100644 (file)
@@ -1,4 +1,9 @@
 #undef exp
 
-// exp(x) = exp2(x * log2(e)
-#define exp(val) (__clc_exp2((val) * 1.44269504f))
+#define __CLC_BODY <clc/math/unary_decl.inc>
+#define __CLC_FUNCTION exp
+
+#include <clc/math/gentype.inc>
+
+#undef __CLC_BODY
+#undef __CLC_FUNCTION
index bff4f56b57cf8f693b6c819ffcb2df765813b655..9f79f6eb037ff466b4038b82bcb58bdbeefb2cc1 100644 (file)
@@ -1,4 +1,5 @@
 #define __CLC_SCALAR_GENTYPE float
+#define __CLC_FPSIZE 32
 
 #define __CLC_GENTYPE float
 #define __CLC_SCALAR
 #include __CLC_BODY
 #undef __CLC_GENTYPE
 
+#undef __CLC_FPSIZE
 #undef __CLC_SCALAR_GENTYPE
 
 #ifdef cl_khr_fp64
 #define __CLC_SCALAR_GENTYPE double
+#define __CLC_FPSIZE 64
 
 #define __CLC_SCALAR
 #define __CLC_GENTYPE double
@@ -57,6 +60,7 @@
 #include __CLC_BODY
 #undef __CLC_GENTYPE
 
+#undef __CLC_FPSIZE
 #undef __CLC_SCALAR_GENTYPE
 #endif
 
index 6ccdf481d30654363d84c0494af573e000fc2833..a35542c7eac52fbe74f6d050d423a799cb0a22d1 100644 (file)
@@ -27,6 +27,7 @@ integer/sub_sat.cl
 integer/sub_sat_if.ll
 integer/sub_sat_impl.ll
 integer/upsample.cl
+math/exp.cl
 math/fmax.cl
 math/fmin.cl
 math/hypot.cl