copy from 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 3a3e708..611c2e3 100644
--- a/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl
+++ b/backend/src/libocl/tmpl/ocl_math_common.tmpl.cl
@@ -120,6 +120,32 @@ OVERLOADABLE double acospi(double x)
        return acos(x)/M_PI;
 }
 
+OVERLOADABLE double acosh(double x)
+{
+       double one = 1.0,
+       ln2 = 6.93147180559945286227e-01;  /* 0x3FE62E42, 0xFEFA39EF */
+
+       double t;
+       int hx;
+       hx = __HI(x);
+       if(hx<0x3ff00000) {             /* x < 1 */
+               return (x-x)/(x-x);
+       } else if(hx >=0x41b00000) {    /* x > 2**28 */
+               if(hx >=0x7ff00000) {   /* x is inf of NaN */
+                       return x+x;
+               } else
+               return log(x)+ln2;      /* acosh(huge)=log(2x) */
+       } else if(((hx-0x3ff00000)|__LO(x))==0) {
+               return 0.0;                     /* acosh(1) = 0 */
+       } else if (hx > 0x40000000) {   /* 2**28 > x > 2 */
+               t=x*x;
+               return log(2.0*x-one/(x+sqrt(t-one)));
+       } else {                        /* 1<x<2 */
+               t = x-one;
+               return log1p(t+sqrt(2.0*t+t*t));
+       }
+}
+
 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 6d2f678..5bd5b36 100644
--- a/backend/src/libocl/tmpl/ocl_math_common.tmpl.h
+++ b/backend/src/libocl/tmpl/ocl_math_common.tmpl.h
@@ -22,6 +22,7 @@
 
 OVERLOADABLE double acos(double x);
 OVERLOADABLE double acospi(double x);
+OVERLOADABLE double acosh(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