pown: Use denormal path only
authorJan Vesely <jan.vesely@rutgers.edu>
Tue, 17 Apr 2018 19:35:30 +0000 (19:35 +0000)
committerJan Vesely <jan.vesely@rutgers.edu>
Tue, 17 Apr 2018 19:35:30 +0000 (19:35 +0000)
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
Fixes CTS on carrizo and turks.
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Reviewer: Aaron Watry <awatry@gmail.com>

llvm-svn: 330206

libclc/generic/lib/math/clc_pown.cl

index f5b36b3..0b7ac32 100644 (file)
@@ -167,17 +167,7 @@ _CLC_DEF _CLC_OVERLOAD float __clc_pown(float x, int ny)
     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 = expylogx * as_float(0x1 << (m + 149));
     float texpylogx = as_float(as_int(expylogx) + m2);
     expylogx = m < -125 ? sexpylogx : texpylogx;