about summary refs log tree commit diff
path: root/sysdeps/ieee754/dbl-64/wordsize-64
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-10-25 10:52:45 -0400
committerUlrich Drepper <drepper@gmail.com>2011-10-25 10:52:45 -0400
commitd7826aa149d2e85128a7ecf8fadc950ab9fe7a22 (patch)
tree9aff1638197c1f9b2ed99c8d666bd1a0b42517cb /sysdeps/ieee754/dbl-64/wordsize-64
parent31ea014d8b09e6aa4f07cdb86c94ce50f1b92c2a (diff)
downloadglibc-d7826aa149d2e85128a7ecf8fadc950ab9fe7a22.tar.gz
glibc-d7826aa149d2e85128a7ecf8fadc950ab9fe7a22.tar.xz
glibc-d7826aa149d2e85128a7ecf8fadc950ab9fe7a22.zip
Use math_force_eval in more places
Diffstat (limited to 'sysdeps/ieee754/dbl-64/wordsize-64')
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c16
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c16
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/s_round.c24
3 files changed, 25 insertions, 31 deletions
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c
index e0e71558f8..346dab7995 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c
@@ -32,18 +32,16 @@ __ceil(double x)
 	EXTRACT_WORDS64(i0,x);
 	j0 = ((i0>>52)&0x7ff)-0x3ff;
 	if(j0<=51) {
-	    if(j0<0) { 	/* raise inexact if x != 0 */
-		if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
-		    if(i0<0) {i0=INT64_C(0x8000000000000000);}
-		    else if(i0!=0) { i0=INT64_C(0x3ff0000000000000);}
-		}
+	    if(j0<0) {	/* raise inexact if x != 0 */
+	      math_force_eval(huge+x);/* return 0*sign(x) if |x|<1 */
+	      if(i0<0) {i0=INT64_C(0x8000000000000000);}
+	      else if(i0!=0) { i0=INT64_C(0x3ff0000000000000);}
 	    } else {
 		i = INT64_C(0x000fffffffffffff)>>j0;
 		if((i0&i)==0) return x; /* x is integral */
-		if(huge+x>0.0) {	/* raise inexact flag */
-		    if(i0>0) i0 += UINT64_C(0x0010000000000000)>>j0;
-		    i0 &= (~i);
-		}
+		math_force_eval(huge+x);	/* raise inexact flag */
+		if(i0>0) i0 += UINT64_C(0x0010000000000000)>>j0;
+		i0 &= (~i);
 	    }
 	} else {
 	    if(j0==0x400) return x+x;	/* inf or NaN */
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c
index 8b7300bb93..5df4ab52fa 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c
@@ -54,18 +54,16 @@ __floor (double x)
 	int32_t j0 = ((i0>>52)&0x7ff)-0x3ff;
 	if(__builtin_expect(j0<52, 1)) {
 	    if(j0<0) {	/* raise inexact if x != 0 */
-		if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
-		    if(i0>=0) {i0=0;}
-		    else if((i0&0x7fffffffffffffffl)!=0)
-			{ i0=0xbff0000000000000l;}
-		}
+		math_force_eval(huge+x);/* return 0*sign(x) if |x|<1 */
+		if(i0>=0) {i0=0;}
+		else if((i0&0x7fffffffffffffffl)!=0)
+		  { i0=0xbff0000000000000l;}
 	    } else {
 		uint64_t i = (0x000fffffffffffffl)>>j0;
 		if((i0&i)==0) return x; /* x is integral */
-		if(huge+x>0.0) {	/* raise inexact flag */
-		    if(i0<0) i0 += (0x0010000000000000l)>>j0;
-		    i0 &= (~i);
-		}
+		math_force_eval(huge+x);	/* raise inexact flag */
+		if(i0<0) i0 += (0x0010000000000000l)>>j0;
+		i0 &= (~i);
 	    }
 	    INSERT_WORDS64(x,i0);
 	} else if (j0==0x400)
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c
index 5bd857910c..25ff859283 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c
@@ -1,5 +1,5 @@
 /* Round double to integer away from zero.
-   Copyright (C) 1997, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2009, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -37,12 +37,11 @@ __round (double x)
     {
       if (j0 < 0)
 	{
-	  if (huge + x > 0.0)
-	    {
-	      i0 &= UINT64_C(0x8000000000000000);
-	      if (j0 == -1)
-		i0 |= UINT64_C(0x3ff0000000000000);
-	    }
+	  math_force_eval (huge + x);
+
+	  i0 &= UINT64_C(0x8000000000000000);
+	  if (j0 == -1)
+	    i0 |= UINT64_C(0x3ff0000000000000);
 	}
       else
 	{
@@ -50,12 +49,11 @@ __round (double x)
 	  if ((i0 & i) == 0)
 	    /* X is integral.  */
 	    return x;
-	  if (huge + x > 0.0)
-	    {
-	      /* Raise inexact if x != 0.  */
-	      i0 += UINT64_C(0x0008000000000000) >> j0;
-	      i0 &= ~i;
-	    }
+	  math_force_eval (huge + x);
+
+	  /* Raise inexact if x != 0.  */
+	  i0 += UINT64_C(0x0008000000000000) >> j0;
+	  i0 &= ~i;
 	}
     }
   else