diff options
author | Paul A. Clarke <pc@us.ibm.com> | 2019-11-21 11:57:41 -0600 |
---|---|---|
committer | Paul A. Clarke <pc@us.ibm.com> | 2019-11-22 11:37:40 -0600 |
commit | 102b5b0cafaf09758a62f62a53fafb6db2f71136 (patch) | |
tree | f44f58a29c8d9fa49c725971209f33c9f30014b7 | |
parent | bfa864e1645e140da2e1aae3cf0d0ba0674f6eb5 (diff) | |
download | glibc-102b5b0cafaf09758a62f62a53fafb6db2f71136.zip glibc-102b5b0cafaf09758a62f62a53fafb6db2f71136.tar.gz glibc-102b5b0cafaf09758a62f62a53fafb6db2f71136.tar.bz2 |
Remove duplicate inline implementation of issignalingf
Very recent commit 854e91bf6b4221f424ffa13b9ef50f35623b7b74 enabled
inline of issignalingf() in general (__issignalingf in include/math.h).
There is another implementation for an inline use of issignalingf
(issignalingf_inline in sysdeps/ieee754/flt-32/math_config.h)
which could instead make use of the new enablement.
Replace the use of issignalingf_inline with __issignaling. Using
issignaling (instead of __issignalingf) will allow future enhancements
to the type-generic implementation, issignaling, to be automatically
adopted.
The implementations are slightly different, and compile to slightly
different code, but I measured no significant performance difference.
The second implementation was brought to my attention by:
Suggested-by: Joseph Myers <joseph@codesourcery.com>
Reviewed-by: Joseph Myers <joseph@codesourcery.com>
-rw-r--r-- | sysdeps/ieee754/flt-32/e_powf.c | 4 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/math_config.h | 9 |
2 files changed, 2 insertions, 11 deletions
diff --git a/sysdeps/ieee754/flt-32/e_powf.c b/sysdeps/ieee754/flt-32/e_powf.c index 4947ae2..9c1902f 100644 --- a/sysdeps/ieee754/flt-32/e_powf.c +++ b/sysdeps/ieee754/flt-32/e_powf.c @@ -158,9 +158,9 @@ __powf (float x, float y) if (__glibc_unlikely (zeroinfnan (iy))) { if (2 * iy == 0) - return issignalingf_inline (x) ? x + y : 1.0f; + return issignaling (x) ? x + y : 1.0f; if (ix == 0x3f800000) - return issignalingf_inline (y) ? x + y : 1.0f; + return issignaling (y) ? x + y : 1.0f; if (2 * ix > 2u * 0x7f800000 || 2 * iy > 2u * 0x7f800000) return x + y; if (2 * ix == 2 * 0x3f800000) diff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h index c5e9299..57cf441 100644 --- a/sysdeps/ieee754/flt-32/math_config.h +++ b/sysdeps/ieee754/flt-32/math_config.h @@ -101,15 +101,6 @@ asdouble (uint64_t i) return u.f; } -static inline int -issignalingf_inline (float x) -{ - uint32_t ix = asuint (x); - if (HIGH_ORDER_BIT_IS_SET_FOR_SNAN) - return (ix & 0x7fc00000) == 0x7fc00000; - return 2 * (ix ^ 0x00400000) > 2u * 0x7fc00000; -} - #define NOINLINE __attribute__ ((noinline)) attribute_hidden float __math_oflowf (uint32_t); |