diff options
author | Joe Ramsay <Joe.Ramsay@arm.com> | 2022-12-13 10:22:26 +0000 |
---|---|---|
committer | Joe Ramsay <joe.ramsay@arm.com> | 2022-12-13 10:22:26 +0000 |
commit | 3c0af1a73df1551a372294d4b05573b2a47f051e (patch) | |
tree | 9781ed7875bc0473b740f3ddf00d2ce9850808a4 | |
parent | 80abd605ee62de59fbfbaba397028326a1148a16 (diff) | |
download | arm-optimized-routines-3c0af1a73df1551a372294d4b05573b2a47f051e.tar.gz |
pl/math: Set fenv flags in Neon log1p
New behaviour is hidden behind WANT_ERRNO config option.
-rwxr-xr-x | pl/math/test/runulp.sh | 8 | ||||
-rw-r--r-- | pl/math/v_log1p_2u5.c | 7 |
2 files changed, 10 insertions, 5 deletions
diff --git a/pl/math/test/runulp.sh b/pl/math/test/runulp.sh index 21d0a8c..a1410b4 100755 --- a/pl/math/test/runulp.sh +++ b/pl/math/test/runulp.sh @@ -763,10 +763,10 @@ tanf __s_tanf $runs fenv tanf __v_tanf $runv fenv tanf __vn_tanf $runvn fenv tanf _ZGVnN4v_tanf $runvn fenv -log1p __s_log1p $runs -log1p __v_log1p $runv -log1p __vn_log1p $runvn -log1p _ZGVnN2v_log1p $runvn +log1p __s_log1p $runs fenv +log1p __v_log1p $runv fenv +log1p __vn_log1p $runvn fenv +log1p _ZGVnN2v_log1p $runvn fenv expm1f __s_expm1f $runs fenv expm1f __v_expm1f $runv fenv expm1f __vn_expm1f $runvn fenv diff --git a/pl/math/v_log1p_2u5.c b/pl/math/v_log1p_2u5.c index d97a622..3781522 100644 --- a/pl/math/v_log1p_2u5.c +++ b/pl/math/v_log1p_2u5.c @@ -49,6 +49,11 @@ VPCS_ATTR v_f64_t V_NAME (log1p) (v_f64_t x) = v_cond_u64 ((ia >= v_u64 (0x7ff0000000000000)) | (ix >= 0xbff0000000000000) | (ix == 0x8000000000000000)); +#if WANT_ERRNO + if (unlikely (v_any_u64 (special))) + x = v_sel_f64 (special, v_f64 (0), x); +#endif + /* With x + 1 = t * 2^k (where t = f + 1 and k is chosen such that f is in [sqrt(2)/2, sqrt(2)]): log1p(x) = k*log(2) + log1p(f). @@ -92,7 +97,7 @@ VPCS_ATTR v_f64_t V_NAME (log1p) (v_f64_t x) v_f64_t y = v_fma_f64 (f * f, p, ylo + yhi); if (unlikely (v_any_u64 (special))) - return specialcase (x, y, special); + return specialcase (v_as_f64_u64 (ix), y, special); return y; } |