[libclc] r332324 - rootn: Use denormal path only

Jan Vesely via cfe-commits cfe-commits at lists.llvm.org
Mon May 14 21:22:43 PDT 2018


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.vesely at rutgers.edu>
Acked-by: Aaron Watry <awatry at gmail.com>
Tested-by: Aaron Watry <awatry at 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;




More information about the cfe-commits mailing list