Use builtins in signbit implementation
Commit Message
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.
OK for commit?
ChangeLog:
2015-09-04 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 | 6 +-----
sysdeps/ieee754/flt-32/s_signbitf.c | 6 +-----
sysdeps/ieee754/ldbl-128/s_signbitl.c | 6 +-----
sysdeps/ieee754/ldbl-96/s_signbitl.c | 6 +-----
4 files changed, 4 insertions(+), 20 deletions(-)
Comments
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).
> @@ -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.
@@ -19,13 +19,9 @@
#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);
}
@@ -19,13 +19,9 @@
#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);
}
@@ -19,13 +19,9 @@
#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);
}
@@ -19,13 +19,9 @@
#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);
}