This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
RE: [PATCH] Use builtins in signbit implementation
- From: "Wilco Dijkstra" <wdijkstr at arm dot com>
- To: "'Joseph Myers'" <joseph at codesourcery dot com>
- Cc: "'GNU C Library'" <libc-alpha at sourceware dot org>
- Date: Fri, 4 Sep 2015 17:05:43 +0100
- Subject: RE: [PATCH] Use builtins in signbit implementation
- Authentication-results: sourceware.org; auth=none
- References: <001401d0e723$29cdf720$7d69e560$ at com> <alpine dot DEB dot 2 dot 10 dot 1509041530010 dot 3310 at digraph dot polyomino dot org dot uk>
> 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(-)
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);
}
--
1.9.1