mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 14:20:17 +00:00
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.vesely@rutgers.edu> Reviewer: Aaron Watry <awatry@gmail.com> llvm-svn: 330206
This commit is contained in:
parent
0d92f3047f
commit
4388d2883c
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user