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