[Beignet] [VER_2 1/5] Enable cospi, cbrt, tan
Homer Hsing
homer.xing at intel.com
Wed May 8 20:20:36 PDT 2013
also let 'native_exp' use 'M_E_F'
Signed-off-by: Homer Hsing <homer.xing at intel.com>
---
backend/src/ocl_stdlib.h | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/backend/src/ocl_stdlib.h b/backend/src/ocl_stdlib.h
index 4c0d39c..5e9f87a 100644
--- a/backend/src/ocl_stdlib.h
+++ b/backend/src/ocl_stdlib.h
@@ -395,6 +395,9 @@ PURE CONST float __gen_ocl_rnde(float x);
PURE CONST float __gen_ocl_rndu(float x);
PURE CONST float __gen_ocl_rndd(float x);
INLINE OVERLOADABLE float native_cos(float x) { return __gen_ocl_cos(x); }
+INLINE OVERLOADABLE float __gen_ocl_internal_cospi(float x) {
+ return __gen_ocl_cos(x * M_PI_F);
+}
INLINE OVERLOADABLE float native_sin(float x) { return __gen_ocl_sin(x); }
INLINE OVERLOADABLE float native_sqrt(float x) { return __gen_ocl_sqrt(x); }
INLINE OVERLOADABLE float native_rsqrt(float x) { return __gen_ocl_rsqrt(x); }
@@ -410,9 +413,10 @@ INLINE OVERLOADABLE float native_recip(float x) { return __gen_ocl_rcp(x); }
INLINE OVERLOADABLE float native_tan(float x) {
return native_sin(x) / native_cos(x);
}
-#define E 2.71828182845904523536f
-INLINE OVERLOADABLE float native_exp(float x) { return native_powr(E, x); }
-#undef E
+INLINE OVERLOADABLE float native_exp(float x) { return __gen_ocl_pow(M_E_F, x); }
+INLINE OVERLOADABLE float __gen_ocl_internal_cbrt(float x) {
+ return __gen_ocl_pow(x, 0.3333333333f);
+}
// XXX work-around PTX profile
#define sqrt native_sqrt
@@ -431,8 +435,11 @@ INLINE OVERLOADABLE float fmod(float x, float y) { return x-y*__gen_ocl_rndz(x/y
// TODO use llvm intrinsics definitions
#define cos native_cos
+#define cospi __gen_ocl_internal_cospi
#define sin native_sin
+#define tan native_tan
#define pow powr
+#define cbrt __gen_ocl_internal_cbrt
INLINE OVERLOADABLE float mad(float a, float b, float c) {
return a*b+c;
@@ -641,12 +648,14 @@ DECL_UNTYPED_RW_ALL(float)
return dst;\
}
DECL_VECTOR_1OP(native_cos, float);
+DECL_VECTOR_1OP(__gen_ocl_internal_cospi, float);
DECL_VECTOR_1OP(native_sin, float);
DECL_VECTOR_1OP(native_tan, float);
DECL_VECTOR_1OP(native_sqrt, float);
DECL_VECTOR_1OP(native_rsqrt, float);
DECL_VECTOR_1OP(native_log2, float);
DECL_VECTOR_1OP(native_recip, float);
+DECL_VECTOR_1OP(__gen_ocl_internal_cbrt, float);
DECL_VECTOR_1OP(__gen_ocl_internal_fabs, float);
DECL_VECTOR_1OP(__gen_ocl_internal_trunc, float);
DECL_VECTOR_1OP(__gen_ocl_internal_round, float);
--
1.8.1.2
More information about the Beignet
mailing list