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-242-ga78bc65
- From: davem at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 27 Feb 2012 22:51:55 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.15-242-ga78bc65
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 a78bc6549cfedeea0828b718aca00593d8164c2b (commit)
from 36c8acb4f8383a52ba0f25a99276ebec31f8c281 (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=a78bc6549cfedeea0828b718aca00593d8164c2b
commit a78bc6549cfedeea0828b718aca00593d8164c2b
Author: David S. Miller <davem@davemloft.net>
Date: Mon Feb 27 14:51:45 2012 -0800
Fix ldbl-128 rintl/nearbyintl just like flt-32 variants.
* sysdeps/ieee754/ldbl-128/s_nearbyintl.c (__nearbyintl): Do not
manipulate bits before adding and subtracting TWO112[sx].
* sysdeps/ieee754/ldbl-128/s_rintl.c (__rintl): Likewise.
diff --git a/ChangeLog b/ChangeLog
index e4e48b5..5ac7ec7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-02-27 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/ieee754/ldbl-128/s_nearbyintl.c (__nearbyintl): Do not
+ manipulate bits before adding and subtracting TWO112[sx].
+ * sysdeps/ieee754/ldbl-128/s_rintl.c (__rintl): Likewise.
+
2012-02-27 Roland McGrath <roland@hack.frob.com>
[BZ #13775]
diff --git a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
index b97c1ac..2d9f834 100644
--- a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
@@ -37,18 +37,13 @@ long double __nearbyintl(long double x)
{
fenv_t env;
int64_t i0,j0,sx;
- u_int64_t i,i1;
+ u_int64_t i1;
long double w,t;
GET_LDOUBLE_WORDS64(i0,i1,x);
sx = (((u_int64_t)i0)>>63);
j0 = ((i0>>48)&0x7fff)-0x3fff;
- if(j0<48) {
+ if(j0<112) {
if(j0<0) {
- if(((i0&0x7fffffffffffffffLL)|i1)==0) return x;
- i1 |= (i0&0x0000ffffffffffffLL);
- i0 &= 0xffffe00000000000ULL;
- i0 |= ((i1|-i1)>>16)&0x0000800000000000LL;
- SET_LDOUBLE_MSW64(x,i0);
feholdexcept (&env);
w = TWO112[sx]+x;
t = w-TWO112[sx];
@@ -56,25 +51,11 @@ long double __nearbyintl(long double x)
GET_LDOUBLE_MSW64(i0,t);
SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63));
return t;
- } else {
- i = (0x0000ffffffffffffLL)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if(j0==47) i1 = 0x4000000000000000ULL; else
- i0 = (i0&(~i))|((0x0000200000000000LL)>>j0);
- }
}
- } else if (j0>111) {
+ } else {
if(j0==0x4000) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = -1ULL>>(j0-48);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x4000000000000000LL)>>(j0-48));
}
- SET_LDOUBLE_WORDS64(x,i0,i1);
feholdexcept (&env);
w = TWO112[sx]+x;
t = w-TWO112[sx];
diff --git a/sysdeps/ieee754/ldbl-128/s_rintl.c b/sysdeps/ieee754/ldbl-128/s_rintl.c
index 833ad42..563b207 100644
--- a/sysdeps/ieee754/ldbl-128/s_rintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_rintl.c
@@ -39,42 +39,23 @@ TWO112[2]={
long double __rintl(long double x)
{
int64_t i0,j0,sx;
- u_int64_t i,i1;
+ u_int64_t i1;
long double w,t;
GET_LDOUBLE_WORDS64(i0,i1,x);
sx = (((u_int64_t)i0)>>63);
j0 = ((i0>>48)&0x7fff)-0x3fff;
- if(j0<48) {
+ if(j0<112) {
if(j0<0) {
- if(((i0&0x7fffffffffffffffLL)|i1)==0) return x;
- i1 |= (i0&0x0000ffffffffffffLL);
- i0 &= 0xffffe00000000000ULL;
- i0 |= ((i1|-i1)>>16)&0x0000800000000000LL;
- SET_LDOUBLE_MSW64(x,i0);
w = TWO112[sx]+x;
t = w-TWO112[sx];
GET_LDOUBLE_MSW64(i0,t);
SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63));
return t;
- } else {
- i = (0x0000ffffffffffffLL)>>j0;
- if(((i0&i)|i1)==0) return x; /* x is integral */
- i>>=1;
- if(((i0&i)|i1)!=0) {
- if(j0==47) i1 = 0x4000000000000000ULL; else
- i0 = (i0&(~i))|((0x0000200000000000LL)>>j0);
- }
}
- } else if (j0>111) {
+ } else {
if(j0==0x4000) return x+x; /* inf or NaN */
else return x; /* x is integral */
- } else {
- i = -1ULL>>(j0-48);
- if((i1&i)==0) return x; /* x is integral */
- i>>=1;
- if((i1&i)!=0) i1 = (i1&(~i))|((0x4000000000000000LL)>>(j0-48));
}
- SET_LDOUBLE_WORDS64(x,i0,i1);
w = TWO112[sx]+x;
return w-TWO112[sx];
}
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 6 ++++++
sysdeps/ieee754/ldbl-128/s_nearbyintl.c | 25 +++----------------------
sysdeps/ieee754/ldbl-128/s_rintl.c | 25 +++----------------------
3 files changed, 12 insertions(+), 44 deletions(-)
hooks/post-receive
--
GNU C Library master sources