Author: jvesely
Date: Mon May 14 21:22:43 2018
New Revision: 332324

URL: http://llvm.org/viewvc/llvm-project?rev=332324&view=rev
Log:
rootn: Use denormal path only

It's OK to either flush to 0 or return denormal result if the device
does not support denormals. See sec 7.2 and 7.5.3 of OCL specs
Use 0.0f explicitly intead of relying on GPU to flush it.
Fixes CTS on carrizo and turks

Signed-off-by: Jan Vesely <jan.ves...@rutgers.edu>
Acked-by: Aaron Watry <awa...@gmail.com>
Tested-by: Aaron Watry <awa...@gmail.com>

Modified:
    libclc/trunk/generic/lib/math/clc_rootn.cl

Modified: libclc/trunk/generic/lib/math/clc_rootn.cl
URL: 
http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/math/clc_rootn.cl?rev=332324&r1=332323&r2=332324&view=diff
==============================================================================
--- libclc/trunk/generic/lib/math/clc_rootn.cl (original)
+++ libclc/trunk/generic/lib/math/clc_rootn.cl Mon May 14 21:22:43 2018
@@ -170,16 +170,7 @@ _CLC_DEF _CLC_OVERLOAD float __clc_rootn
     tv = USE_TABLE(exp_tbl_ep, j);
 
     float expylogx = mad(tv.s0, poly, mad(tv.s1, poly, tv.s1)) + tv.s0;
-    float sexpylogx;
-    if (!__clc_fp32_subnormals_supported()) {
-               int explg = ((as_uint(expylogx) & EXPBITS_SP32 >> 23) - 127);
-               m = (23-(m + 149)) == 0 ? 1: m;
-               uint mantissa =  ((as_uint(expylogx) & 
MANTBITS_SP32)|IMPBIT_SP32) >> (23-(m + 149));
-               sexpylogx = as_float(mantissa);
-    } else {
-               sexpylogx = expylogx * as_float(0x1 << (m + 149));
-    }
-
+    float sexpylogx = __clc_fp32_subnormals_supported() ? expylogx * 
as_float(0x1 << (m + 149)) : 0.0f;
 
     float texpylogx = as_float(as_int(expylogx) + m2);
     expylogx = m < -125 ? sexpylogx : texpylogx;


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to