This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.15-366-gf453b98
- From: jsm28 at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 13 Mar 2012 14:12:59 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.15-366-gf453b98
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via f453b98b6bf698ddb4d49cd3dc0f94d2da2a8968 (commit)
from 8e59da90ce7ef7b4226b9516116353cfceb5bb1c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f453b98b6bf698ddb4d49cd3dc0f94d2da2a8968
commit f453b98b6bf698ddb4d49cd3dc0f94d2da2a8968
Author: Joseph Myers <joseph@codesourcery.com>
Date: Tue Mar 13 14:12:44 2012 +0000
Clean up dbl-64 rint, nearbyint.
diff --git a/ChangeLog b/ChangeLog
index 391bb60..b8f1fe5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-03-13 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/ieee754/dbl-64/s_nearbyint.c (__nearbyint): Do not
+ manipulate bits before adding and subtracting TWO52[sx].
+ * sysdeps/ieee754/dbl-64/s_rint.c (__rint): Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c (__nearbyint):
+ Likewise.
+ * sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c (__rint): Likewise.
+
2012-03-13 David S. Miller <davem@davemloft.net>
* sysdeps/sparc/Makefile: Remove rtld-global-offsets.sym handling.
diff --git a/sysdeps/ieee754/dbl-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/s_nearbyint.c
index d780150..60afafd 100644
--- a/sysdeps/ieee754/dbl-64/s_nearbyint.c
+++ b/sysdeps/ieee754/dbl-64/s_nearbyint.c
@@ -38,18 +38,12 @@ double __nearbyint(double x)
{
fenv_t env;
int32_t i0,j0,sx;
- u_int32_t i,i1;
double w,t;
- EXTRACT_WORDS(i0,i1,x);
+ GET_HIGH_WORD(i0,x);
sx = (i0>>31)&1;
j0 = ((i0>>20)&0x7ff)-0x3ff;
- if(j0<20) {
+ if(j0<52) {
if(j0<0) {
- if(((i0&0x7fffffff)|i1)==0) return x;
- i1 |= (i0&0x0fffff);
- i0 &= 0xfffe0000;
- i0 |= ((i1|-i1)>>12)&0x80000;
- SET_HIGH_WORD(x,i0);
feholdexcept (&env);
w = TWO52[sx]+x;
t = w-TWO52[sx];
@@ -57,32 +51,11 @@ double __nearbyint(double x)
GET_HIGH_WORD(i0,t);
SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
return t;
- } else {
- i = (0x000fffff)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if (j0==19)
- i1 = 0x40000000;
- else if (j0<18)
- i0 = (i0&(~i))|((0x20000)>>j0);
- else
- {
- i0 &= ~i;
- i1 = 0x80000000;
- }
- }
}
- } else if (j0>51) {
+ } else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = ((u_int32_t)(0xffffffff))>>(j0-20);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
}
- INSERT_WORDS(x,i0,i1);
feholdexcept (&env);
w = TWO52[sx]+x;
t = w-TWO52[sx];
diff --git a/sysdeps/ieee754/dbl-64/s_rint.c b/sysdeps/ieee754/dbl-64/s_rint.c
index c45d784..8458909 100644
--- a/sysdeps/ieee754/dbl-64/s_rint.c
+++ b/sysdeps/ieee754/dbl-64/s_rint.c
@@ -33,49 +33,22 @@ double
__rint(double x)
{
int32_t i0,j0,sx;
- u_int32_t i,i1;
double w,t;
- EXTRACT_WORDS(i0,i1,x);
+ GET_HIGH_WORD(i0,x);
sx = (i0>>31)&1;
j0 = ((i0>>20)&0x7ff)-0x3ff;
- if(j0<20) {
+ if(j0<52) {
if(j0<0) {
- if(((i0&0x7fffffff)|i1)==0) return x;
- i1 |= (i0&0x0fffff);
- i0 &= 0xfffe0000;
- i0 |= ((i1|-i1)>>12)&0x80000;
- SET_HIGH_WORD(x,i0);
w = TWO52[sx]+x;
t = w-TWO52[sx];
GET_HIGH_WORD(i0,t);
SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
return t;
- } else {
- i = (0x000fffff)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if (j0==19)
- i1 = 0x40000000;
- else if (j0<18)
- i0 = (i0&(~i))|((0x20000)>>j0);
- else
- {
- i0 &= ~i;
- i1 = 0x80000000;
- }
- }
}
- } else if (j0>51) {
+ } else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = ((u_int32_t)(0xffffffff))>>(j0-20);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
}
- INSERT_WORDS(x,i0,i1);
w = TWO52[sx]+x;
return w-TWO52[sx];
}
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
index a380998..a58a620 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
@@ -41,29 +41,17 @@ __nearbyint(double x)
j0 = ((i0>>52)&0x7ff)-0x3ff;
if(__builtin_expect(j0<52, 1)) {
if(j0<0) {
- if((i0&UINT64_C(0x7fffffffffffffff))==0) return x;
- uint64_t i = i0 & UINT64_C(0xfffffffffffff);
- i0 &= UINT64_C(0xfffe000000000000);
- i0 |= (((i|-i) >> 12) & UINT64_C(0x8000000000000));
- INSERT_WORDS64(x,i0);
libc_feholdexcept (&env);
double w = TWO52[sx]+x;
double t = w-TWO52[sx];
math_opt_barrier(t);
libc_fesetenv (&env);
return copysign(t, x);
- } else {
- uint64_t i = UINT64_C(0x000fffffffffffff)>>j0;
- if((i0&i)==0) return x; /* x is integral */
- i>>=1;
- if((i0&i)!=0)
- i0 = (i0&(~i))|(UINT64_C(0x4000000000000)>>j0);
}
} else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
}
- INSERT_WORDS64(x,i0);
libc_feholdexcept (&env);
double w = TWO52[sx]+x;
double t = w-TWO52[sx];
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c
index 20eef3c..87b2339 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c
@@ -38,28 +38,16 @@ __rint(double x)
j0 = ((i0>>52)&0x7ff)-0x3ff;
if(j0<52) {
if(j0<0) {
- if((i0 & UINT64_C(0x7fffffffffffffff))==0) return x;
- uint64_t i = i0 & UINT64_C(0xfffffffffffff);
- i0 &= UINT64_C(0xfffe000000000000);
- i0 |= (((i|-i) >> 12) & UINT64_C(0x8000000000000));
- INSERT_WORDS64(x,i0);
double w = TWO52[sx]+x;
double t = w-TWO52[sx];
EXTRACT_WORDS64(i0,t);
INSERT_WORDS64(t,(i0&UINT64_C(0x7fffffffffffffff))|(sx<<63));
return t;
- } else {
- uint64_t i = UINT64_C(0x000fffffffffffff)>>j0;
- if((i0&i)==0) return x; /* x is integral */
- i>>=1;
- if((i0&i)!=0)
- i0 = (i0&(~i))|(UINT64_C(0x4000000000000)>>j0);
}
} else {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
}
- INSERT_WORDS64(x,i0);
double w = TWO52[sx]+x;
return w-TWO52[sx];
}
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 9 ++++++
sysdeps/ieee754/dbl-64/s_nearbyint.c | 33 ++--------------------
sysdeps/ieee754/dbl-64/s_rint.c | 33 ++--------------------
sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c | 12 --------
sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c | 12 --------
5 files changed, 15 insertions(+), 84 deletions(-)
hooks/post-receive
--
GNU C Library master sources