diff options
| author | Jan Vesely <jan.vesely@rutgers.edu> | 2018-05-15 04:22:43 +0000 |
|---|---|---|
| committer | Jan Vesely <jan.vesely@rutgers.edu> | 2018-05-15 04:22:43 +0000 |
| commit | 58fdb3b09aae005c594ea66bfb85b395d7193636 (patch) | |
| tree | 58aa929ff1310988e16010500c503c87c169fe71 /libclc/generic/lib/math | |
| parent | 93bce5108b92f22644957a54f5994ac029da70e8 (diff) | |
| download | bcm5719-llvm-58fdb3b09aae005c594ea66bfb85b395d7193636.tar.gz bcm5719-llvm-58fdb3b09aae005c594ea66bfb85b395d7193636.zip | |
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@rutgers.edu>
Acked-by: Aaron Watry <awatry@gmail.com>
Tested-by: Aaron Watry <awatry@gmail.com>
llvm-svn: 332324
Diffstat (limited to 'libclc/generic/lib/math')
| -rw-r--r-- | libclc/generic/lib/math/clc_rootn.cl | 11 |
1 files changed, 1 insertions, 10 deletions
diff --git a/libclc/generic/lib/math/clc_rootn.cl b/libclc/generic/lib/math/clc_rootn.cl index d7ee1850d4a..0a2c98d3787 100644 --- a/libclc/generic/lib/math/clc_rootn.cl +++ b/libclc/generic/lib/math/clc_rootn.cl @@ -170,16 +170,7 @@ _CLC_DEF _CLC_OVERLOAD float __clc_rootn(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 = __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; |

