Author: jvesely Date: Tue Apr 17 12:35:30 2018 New Revision: 330206 URL: http://llvm.org/viewvc/llvm-project?rev=330206&view=rev Log: pown: 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 Fixes CTS on carrizo and turks. Signed-off-by: Jan Vesely <jan.ves...@rutgers.edu> Reviewer: Aaron Watry <awa...@gmail.com> Modified: libclc/trunk/generic/lib/math/clc_pown.cl Modified: libclc/trunk/generic/lib/math/clc_pown.cl URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/math/clc_pown.cl?rev=330206&r1=330205&r2=330206&view=diff ============================================================================== --- libclc/trunk/generic/lib/math/clc_pown.cl (original) +++ libclc/trunk/generic/lib/math/clc_pown.cl Tue Apr 17 12:35:30 2018 @@ -167,17 +167,7 @@ _CLC_DEF _CLC_OVERLOAD float __clc_pown( 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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits