diff mbox

Use builtins in signbit implementation

Message ID 001501d0e72b$8da141f0$a8e3c5d0$@com
State New
Headers show

Commit Message

Wilco Sept. 4, 2015, 4:05 p.m. UTC
> Joseph Myers wrote:
> On Fri, 4 Sep 2015, Wilco Dijkstra wrote:
> 
> > Use the GCC builtin functions for the non-inlined signbit implementations.
> > This excludes the 128ibm format as I'm not sure whether the builtins work
> > for that case.
> 
> signbit should work fine for ldbl-128ibm (it's copysign and fabs that have
> issues in some cases).

OK, I added that version as well.
 
> > @@ -19,13 +19,9 @@
> >
> >  #include <math.h>
> >
> > -#include <math_private.h>
> >
> 
> I'd say that when removing this #include, one of the blank lines about it
> should be removed as well.

Done, see below:

ChangeLog: 
2015-08-20  Wilco Dijkstra  <wdijkstr@arm.com>
	
	* sysdeps/ieee754/dbl-64/s_signbit.c (__signbit):
	Use __builtin_signbit. 	
	* sysdeps/ieee754/flt-32/s_signbitf.c (__signbitf):
	Use __builtin_signbitf.
	* sysdeps/ieee754/ldbl-128/s_signbitl.c (__signbitl):
	Use __builtin_signbitl.	
	* sysdeps/ieee754/ldbl-96/s_signbitl.c (__signbitl): Likewise.

---
 sysdeps/ieee754/dbl-64/s_signbit.c       | 7 +------
 sysdeps/ieee754/flt-32/s_signbitf.c      | 7 +------
 sysdeps/ieee754/ldbl-128/s_signbitl.c    | 7 +------
 sysdeps/ieee754/ldbl-128ibm/s_signbitl.c | 8 +-------
 sysdeps/ieee754/ldbl-96/s_signbitl.c     | 7 +------
 5 files changed, 5 insertions(+), 31 deletions(-)

Comments

Joseph Myers Sept. 4, 2015, 4:20 p.m. UTC | #1
On Fri, 4 Sep 2015, Wilco Dijkstra wrote:

> ChangeLog: 
> 2015-08-20  Wilco Dijkstra  <wdijkstr@arm.com>
> 	
> 	* sysdeps/ieee754/dbl-64/s_signbit.c (__signbit):
> 	Use __builtin_signbit. 	
> 	* sysdeps/ieee754/flt-32/s_signbitf.c (__signbitf):
> 	Use __builtin_signbitf.
> 	* sysdeps/ieee754/ldbl-128/s_signbitl.c (__signbitl):
> 	Use __builtin_signbitl.	
> 	* sysdeps/ieee754/ldbl-96/s_signbitl.c (__signbitl): Likewise.

OK with the ChangeLog fixed to include the ldbl-128ibm changes as well.
diff mbox

Patch

diff --git a/sysdeps/ieee754/dbl-64/s_signbit.c b/sysdeps/ieee754/dbl-64/s_signbit.c
index 764f11a..91797ee 100644
--- a/sysdeps/ieee754/dbl-64/s_signbit.c
+++ b/sysdeps/ieee754/dbl-64/s_signbit.c
@@ -19,13 +19,8 @@ 
 
 #include <math.h>
 
-#include <math_private.h>
-
 int
 __signbit (double x)
 {
-  int32_t hx;
-
-  GET_HIGH_WORD (hx, x);
-  return hx & 0x80000000;
+  return __builtin_signbit (x);
 }
diff --git a/sysdeps/ieee754/flt-32/s_signbitf.c b/sysdeps/ieee754/flt-32/s_signbitf.c
index 169820e..034c175 100644
--- a/sysdeps/ieee754/flt-32/s_signbitf.c
+++ b/sysdeps/ieee754/flt-32/s_signbitf.c
@@ -19,13 +19,8 @@ 
 
 #include <math.h>
 
-#include <math_private.h>
-
 int
 __signbitf (float x)
 {
-  int32_t hx;
-
-  GET_FLOAT_WORD (hx, x);
-  return hx & 0x80000000;
+  return __builtin_signbitf (x);
 }
diff --git a/sysdeps/ieee754/ldbl-128/s_signbitl.c b/sysdeps/ieee754/ldbl-128/s_signbitl.c
index acfe859..ea689a6 100644
--- a/sysdeps/ieee754/ldbl-128/s_signbitl.c
+++ b/sysdeps/ieee754/ldbl-128/s_signbitl.c
@@ -19,13 +19,8 @@ 
 
 #include <math.h>
 
-#include <math_private.h>
-
 int
 __signbitl (long double x)
 {
-  int64_t e;
-
-  GET_LDOUBLE_MSW64 (e, x);
-  return e < 0;
+  return __builtin_signbitl (x);
 }
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c b/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c
index e95ad55..5e2bd90 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c
@@ -18,18 +18,12 @@ 
    <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
-#include <math_private.h>
 #include <math_ldbl_opt.h>
 
 int
 ___signbitl (long double x)
 {
-  int64_t e;
-  double xhi;
-
-  xhi = ldbl_high (x);
-  EXTRACT_WORDS64 (e, xhi);
-  return e < 0;
+  return __builtin_signbitl (x);
 }
 #if IS_IN (libm)
 long_double_symbol (libm, ___signbitl, __signbitl);
diff --git a/sysdeps/ieee754/ldbl-96/s_signbitl.c b/sysdeps/ieee754/ldbl-96/s_signbitl.c
index bbe72a6..ea689a6 100644
--- a/sysdeps/ieee754/ldbl-96/s_signbitl.c
+++ b/sysdeps/ieee754/ldbl-96/s_signbitl.c
@@ -19,13 +19,8 @@ 
 
 #include <math.h>
 
-#include <math_private.h>
-
 int
 __signbitl (long double x)
 {
-  int32_t e;
-
-  GET_LDOUBLE_EXP (e, x);
-  return e & 0x8000;
+  return __builtin_signbitl (x);
 }