cp form fdlibm and pass the cft after refined

Signed-off-by: rander <[email protected]>
---
 backend/src/libocl/tmpl/ocl_math_common.tmpl.cl | 26 +++++++++++++++++++++++++
 backend/src/libocl/tmpl/ocl_math_common.tmpl.h  |  1 +
 2 files changed, 27 insertions(+)

diff --git a/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl 
b/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl
index 051eae1..e655955 100644
--- a/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl
+++ b/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl
@@ -210,6 +210,32 @@ OVERLOADABLE double asinpi(double x)
        return asin(x)/M_PI;
 }
 
+OVERLOADABLE double asinh(double x)
+{
+       double one =  1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
+       ln2 =  6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */
+       huge=  1.00000000000000000000e+300;
+       double t,w;
+
+       int hx,ix;
+       hx = __HI(x);
+       ix = hx&0x7fffffff;
+       if(ix>=0x7ff00000) return x+x;  /* x is inf or NaN */
+       if(ix< 0x3e300000) {    /* |x|<2**-28 */
+               if(huge+x>one) return x;        /* return x inexact except 0 */
+       }
+       if(ix>0x41b00000) {     /* |x| > 2**28 */
+               w = log(fabs(x))+ln2;
+       } else if (ix>0x40000000) {     /* 2**28 > |x| > 2.0 */
+               t = fabs(x);
+               w = log(2.0*t+one/(sqrt(x*x+one)+t));
+       } else {                /* 2.0 > |x| > 2**-28 */
+               t = x*x;
+               w =log1p(fabs(x)+t/(one+sqrt(one+t)));
+       }
+       if(hx>0) return w; else return -w;
+}
+
 OVERLOADABLE double ceil(double x)
 {
     double ret;
diff --git a/backend/src/libocl/tmpl/ocl_math_common.tmpl.h 
b/backend/src/libocl/tmpl/ocl_math_common.tmpl.h
index fa4a260..56c9787 100644
--- a/backend/src/libocl/tmpl/ocl_math_common.tmpl.h
+++ b/backend/src/libocl/tmpl/ocl_math_common.tmpl.h
@@ -25,6 +25,7 @@ OVERLOADABLE double acospi(double x);
 OVERLOADABLE double acosh(double x);
 OVERLOADABLE double asin(double x);
 OVERLOADABLE double asinpi(double x);
+OVERLOADABLE double asinh(double x);
 OVERLOADABLE double ceil(double x);
 OVERLOADABLE double copysign(double x, double y);
 OVERLOADABLE double fabs(double x);
-- 
2.7.4

_______________________________________________
Beignet mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to