[Beignet] [PATCH 1/3] libocl: flush denorm into zero in ldexp()

Ruiling Song ruiling.song at intel.com
Sun Dec 21 20:27:17 PST 2014


inf and denorm logic in internal_ldexp() is useless, as inf and denorm
is already handled in __gen_ocl_scalbnf() and wrapper function.

It is better to flush denorm to zero in wrapper function,
so we don't have to change the internal implementation.

Signed-off-by: Ruiling Song <ruiling.song at intel.com>
---
 backend/src/libocl/tmpl/ocl_math.tmpl.cl |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/backend/src/libocl/tmpl/ocl_math.tmpl.cl b/backend/src/libocl/tmpl/ocl_math.tmpl.cl
index 248ddd0..5d73c16 100644
--- a/backend/src/libocl/tmpl/ocl_math.tmpl.cl
+++ b/backend/src/libocl/tmpl/ocl_math.tmpl.cl
@@ -2672,7 +2672,6 @@ OVERLOADABLE float __gen_ocl_internal_remainder(float x, float p){
 }
 
 OVERLOADABLE float __gen_ocl_internal_ldexp(float x, int n) {
-  if(!__ocl_finitef(x)||x==(float)0.0) return x;
   x = __gen_ocl_scalbnf(x,n);
   return x;
 }
@@ -2878,6 +2877,7 @@ OVERLOADABLE float ldexp(float x, int n) {
   if (__ocl_math_fastpath_flag)
     return __gen_ocl_internal_fastpath_ldexp(x, n);
 
+  if (x == (float)0.0f) x = 0.0f;
   return __gen_ocl_internal_ldexp(x, n);
 }
 
-- 
1.7.10.4



More information about the Beignet mailing list