This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]