[PATCH v2] Remove duplicate inline implementation of issignalingf

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH v2] Remove duplicate inline implementation of issignalingf

Paul Clarke
From: "Paul A. Clarke" <[hidden email]>

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 <[hidden email]>
---
v2: Use type-generic issignaling instead of __issignalingf, as suggested
    by Joseph Myers.

 sysdeps/ieee754/flt-32/e_powf.c      | 4 ++--
 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);
--
1.8.3.1

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH v2] Remove duplicate inline implementation of issignalingf

Joseph Myers
On Thu, 21 Nov 2019, Paul A. Clarke wrote:

> From: "Paul A. Clarke" <[hidden email]>
>
> 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.

This version is OK.

--
Joseph S. Myers
[hidden email]