GNU C Library master sources branch, master, updated. glibc-2.15-366-gf453b98

jsm28@sourceware.org jsm28@sourceware.org
Tue Mar 13 14:13:00 GMT 2012


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



More information about the Glibc-cvs mailing list