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.22-285-g54142c4


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  54142c44e963f410262fa868c159b6df858f3c53 (commit)
      from  5df386a5492e00348c0ba4c6520d27783c253816 (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://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=54142c44e963f410262fa868c159b6df858f3c53

commit 54142c44e963f410262fa868c159b6df858f3c53
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Sep 23 18:14:57 2015 +0000

    Use math_narrow_eval more consistently.
    
    Where glibc code needs to avoid excess range and precision in
    floating-point arithmetic, code variously uses either asms or volatile
    to force the results of that arithmetic to memory; mostly this is
    conditional on FLT_EVAL_METHOD, but in the case of lrint / llrint
    functions some use of volatile is unconditional (and is present
    unnecessarily in versions for long double).  This patch make such code
    use the recently-added math_narrow_eval macro consistently, removing
    the unnecessary uses of volatile in long double lrint / llrint
    implementations completely.
    
    Tested for x86_64, x86, mips64 and powerpc.
    
    	* math/s_nexttowardf.c (__nexttowardf): Use math_narrow_eval.
    	* stdlib/strtod_l.c: Include <math_private.h>.
    	(overflow_value): Use math_narrow_eval.
    	(underflow_value): Likewise.
    	* sysdeps/i386/fpu/s_nexttoward.c (__nexttoward): Likewise.
    	* sysdeps/i386/fpu/s_nexttowardf.c (__nexttowardf): Likewise.
    	* sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Likewise.
    	(__ieee754_gamma_r): Likewise.
    	* sysdeps/ieee754/dbl-64/gamma_productf.c (__gamma_productf):
    	Likewise.
    	* sysdeps/ieee754/dbl-64/k_rem_pio2.c (__kernel_rem_pio2):
    	Likewise.
    	* sysdeps/ieee754/dbl-64/lgamma_neg.c (__lgamma_neg): Likewise.
    	* sysdeps/ieee754/dbl-64/s_erf.c (__erfc): Likewise.
    	* sysdeps/ieee754/dbl-64/s_llrint.c (__llrint): Likewise.
    	* sysdeps/ieee754/dbl-64/s_lrint.c (__lrint): Likewise.
    	* sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Likewise.
    	(__ieee754_gammaf_r): Likewise.
    	* sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
    	Likewise.
    	* sysdeps/ieee754/flt-32/lgamma_negf.c (__lgamma_negf): Likewise.
    	* sysdeps/ieee754/flt-32/s_erff.c (__erfcf): Likewise.
    	* sysdeps/ieee754/flt-32/s_llrintf.c (__llrintf): Likewise.
    	* sysdeps/ieee754/flt-32/s_lrintf.c (__lrintf): Likewise.
    	* sysdeps/ieee754/ldbl-128/s_llrintl.c (__llrintl): Do not use
    	volatile.
    	* sysdeps/ieee754/ldbl-128/s_lrintl.c (__lrintl): Likewise.
    	* sysdeps/ieee754/ldbl-128/s_nexttoward.c (__nexttoward): Use
    	math_narrow_eval.
    	* sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c (__nexttoward):
    	Likewise.
    	* sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c (__nexttowardf):
    	Likewise.
    	* sysdeps/ieee754/ldbl-96/gamma_product.c (__gamma_product):
    	Likewise.
    	* sysdeps/ieee754/ldbl-96/s_llrintl.c (__llrintl): Do not use
    	volatile.
    	* sysdeps/ieee754/ldbl-96/s_lrintl.c (__lrintl): Likewise.
    	* sysdeps/ieee754/ldbl-96/s_nexttoward.c (__nexttoward): Use
    	math_narrow_eval.
    	* sysdeps/ieee754/ldbl-96/s_nexttowardf.c (__nexttowardf):
    	Likewise.
    	* sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c (__nldbl_nexttowardf):
    	Likewise.

diff --git a/ChangeLog b/ChangeLog
index 0ae05c8..3a5f03d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+2015-09-23  Joseph Myers  <joseph@codesourcery.com>
+
+	* math/s_nexttowardf.c (__nexttowardf): Use math_narrow_eval.
+	* stdlib/strtod_l.c: Include <math_private.h>.
+	(overflow_value): Use math_narrow_eval.
+	(underflow_value): Likewise.
+	* sysdeps/i386/fpu/s_nexttoward.c (__nexttoward): Likewise.
+	* sysdeps/i386/fpu/s_nexttowardf.c (__nexttowardf): Likewise.
+	* sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Likewise.
+	(__ieee754_gamma_r): Likewise.
+	* sysdeps/ieee754/dbl-64/gamma_productf.c (__gamma_productf):
+	Likewise.
+	* sysdeps/ieee754/dbl-64/k_rem_pio2.c (__kernel_rem_pio2):
+	Likewise.
+	* sysdeps/ieee754/dbl-64/lgamma_neg.c (__lgamma_neg): Likewise.
+	* sysdeps/ieee754/dbl-64/s_erf.c (__erfc): Likewise.
+	* sysdeps/ieee754/dbl-64/s_llrint.c (__llrint): Likewise.
+	* sysdeps/ieee754/dbl-64/s_lrint.c (__lrint): Likewise.
+	* sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Likewise.
+	(__ieee754_gammaf_r): Likewise.
+	* sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+	Likewise.
+	* sysdeps/ieee754/flt-32/lgamma_negf.c (__lgamma_negf): Likewise.
+	* sysdeps/ieee754/flt-32/s_erff.c (__erfcf): Likewise.
+	* sysdeps/ieee754/flt-32/s_llrintf.c (__llrintf): Likewise.
+	* sysdeps/ieee754/flt-32/s_lrintf.c (__lrintf): Likewise.
+	* sysdeps/ieee754/ldbl-128/s_llrintl.c (__llrintl): Do not use
+	volatile.
+	* sysdeps/ieee754/ldbl-128/s_lrintl.c (__lrintl): Likewise.
+	* sysdeps/ieee754/ldbl-128/s_nexttoward.c (__nexttoward): Use
+	math_narrow_eval.
+	* sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c (__nexttoward):
+	Likewise.
+	* sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c (__nexttowardf):
+	Likewise.
+	* sysdeps/ieee754/ldbl-96/gamma_product.c (__gamma_product):
+	Likewise.
+	* sysdeps/ieee754/ldbl-96/s_llrintl.c (__llrintl): Do not use
+	volatile.
+	* sysdeps/ieee754/ldbl-96/s_lrintl.c (__lrintl): Likewise.
+	* sysdeps/ieee754/ldbl-96/s_nexttoward.c (__nexttoward): Use
+	math_narrow_eval.
+	* sysdeps/ieee754/ldbl-96/s_nexttowardf.c (__nexttowardf):
+	Likewise.
+	* sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c (__nldbl_nexttowardf):
+	Likewise.
+
 2015-09-22  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* nptl/Versions: Remove ignored symbols.
diff --git a/math/s_nexttowardf.c b/math/s_nexttowardf.c
index e8c4dd1..06e1bb1 100644
--- a/math/s_nexttowardf.c
+++ b/math/s_nexttowardf.c
@@ -59,10 +59,7 @@ float __nexttowardf(float x, long double y)
 	}
 	hy = hx&0x7f800000;
 	if(hy>=0x7f800000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0)
-	    /* Force conversion to float.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00800000) {
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
index e13ab1e..7950870 100644
--- a/stdlib/strtod_l.c
+++ b/stdlib/strtod_l.c
@@ -57,6 +57,7 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **,
 #include "../locale/localeinfo.h"
 #include <locale.h>
 #include <math.h>
+#include <math_private.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdint.h>
@@ -181,10 +182,8 @@ static FLOAT
 overflow_value (int negative)
 {
   __set_errno (ERANGE);
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  FLOAT result = (negative ? -MAX_VALUE : MAX_VALUE) * MAX_VALUE;
+  FLOAT result = math_narrow_eval ((negative ? -MAX_VALUE : MAX_VALUE)
+				   * MAX_VALUE);
   return result;
 }
 
@@ -195,10 +194,8 @@ static FLOAT
 underflow_value (int negative)
 {
   __set_errno (ERANGE);
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  FLOAT result = (negative ? -MIN_VALUE : MIN_VALUE) * MIN_VALUE;
+  FLOAT result = math_narrow_eval ((negative ? -MIN_VALUE : MIN_VALUE)
+				   * MIN_VALUE);
   return result;
 }
 
diff --git a/sysdeps/i386/fpu/s_nexttoward.c b/sysdeps/i386/fpu/s_nexttoward.c
index 74147c4..be65b8c 100644
--- a/sysdeps/i386/fpu/s_nexttoward.c
+++ b/sysdeps/i386/fpu/s_nexttoward.c
@@ -73,10 +73,7 @@ double __nexttoward(double x, long double y)
 	}
 	hy = hx&0x7ff00000;
 	if(hy>=0x7ff00000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-	    /* Force conversion to double.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00100000) {
diff --git a/sysdeps/i386/fpu/s_nexttowardf.c b/sysdeps/i386/fpu/s_nexttowardf.c
index 49651be..8379eff 100644
--- a/sysdeps/i386/fpu/s_nexttowardf.c
+++ b/sysdeps/i386/fpu/s_nexttowardf.c
@@ -61,10 +61,7 @@ float __nexttowardf(float x, long double y)
 	}
 	hy = hx&0x7f800000;
 	if(hy>=0x7f800000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0)
-	    /* Force conversion to float.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00800000) {
diff --git a/sysdeps/ieee754/dbl-64/e_gamma_r.c b/sysdeps/ieee754/dbl-64/e_gamma_r.c
index d1acaa6..d3fb8af 100644
--- a/sysdeps/ieee754/dbl-64/e_gamma_r.c
+++ b/sysdeps/ieee754/dbl-64/e_gamma_r.c
@@ -76,11 +76,7 @@ gamma_positive (double x, int *exp2_adj)
 	  /* Adjust into the range for applying Stirling's
 	     approximation.  */
 	  double n = __ceil (12.0 - x);
-#if FLT_EVAL_METHOD != 0
-	  volatile
-#endif
-	  double x_tmp = x + n;
-	  x_adj = x_tmp;
+	  x_adj = math_narrow_eval (x + n);
 	  x_eps = (x - (x_adj - n));
 	  prod = __gamma_product (x_adj - n, x_eps, n, &eps);
 	}
@@ -119,9 +115,6 @@ __ieee754_gamma_r (double x, int *signgamp)
 {
   int32_t hx;
   u_int32_t lx;
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
   double ret;
 
   EXTRACT_WORDS (hx, lx, x);
@@ -157,7 +150,7 @@ __ieee754_gamma_r (double x, int *signgamp)
     {
       /* Overflow.  */
       *signgamp = 0;
-      ret = DBL_MAX * DBL_MAX;
+      ret = math_narrow_eval (DBL_MAX * DBL_MAX);
       return ret;
     }
   else
@@ -201,27 +194,28 @@ __ieee754_gamma_r (double x, int *signgamp)
 		}
 	    }
 	}
+      ret = math_narrow_eval (ret);
     }
   if (isinf (ret) && x != 0)
     {
       if (*signgamp < 0)
 	{
-	  ret = -__copysign (DBL_MAX, ret) * DBL_MAX;
+	  ret = math_narrow_eval (-__copysign (DBL_MAX, ret) * DBL_MAX);
 	  ret = -ret;
 	}
       else
-	ret = __copysign (DBL_MAX, ret) * DBL_MAX;
+	ret = math_narrow_eval (__copysign (DBL_MAX, ret) * DBL_MAX);
       return ret;
     }
   else if (ret == 0)
     {
       if (*signgamp < 0)
 	{
-	  ret = -__copysign (DBL_MIN, ret) * DBL_MIN;
+	  ret = math_narrow_eval (-__copysign (DBL_MIN, ret) * DBL_MIN);
 	  ret = -ret;
 	}
       else
-	ret = __copysign (DBL_MIN, ret) * DBL_MIN;
+	ret = math_narrow_eval (__copysign (DBL_MIN, ret) * DBL_MIN);
       return ret;
     }
   else
diff --git a/sysdeps/ieee754/dbl-64/gamma_productf.c b/sysdeps/ieee754/dbl-64/gamma_productf.c
index df59e1b..2d3c734 100644
--- a/sysdeps/ieee754/dbl-64/gamma_productf.c
+++ b/sysdeps/ieee754/dbl-64/gamma_productf.c
@@ -36,10 +36,7 @@ __gamma_productf (float x, float x_eps, int n, float *eps)
   for (int i = 1; i < n; i++)
     ret *= x_full + i;
 
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  float fret = ret;
+  float fret = math_narrow_eval ((float) ret);
   *eps = (ret - fret) / fret;
 
   return fret;
diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
index 047c6c2..e58c9e8 100644
--- a/sysdeps/ieee754/dbl-64/k_rem_pio2.c
+++ b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
@@ -315,34 +315,25 @@ recompute:
       break;
     case 1:
     case 2:;
-#if __FLT_EVAL_METHOD__ != 0
-      volatile
-#endif
       double fv = 0.0;
       for (i = jz; i >= 0; i--)
-	fv += fq[i];
+	fv = math_narrow_eval (fv + fq[i]);
       y[0] = (ih == 0) ? fv : -fv;
-      fv = fq[0] - fv;
+      fv = math_narrow_eval (fq[0] - fv);
       for (i = 1; i <= jz; i++)
-	fv += fq[i];
+	fv = math_narrow_eval (fv + fq[i]);
       y[1] = (ih == 0) ? fv : -fv;
       break;
     case 3:             /* painful */
       for (i = jz; i > 0; i--)
 	{
-#if __FLT_EVAL_METHOD__ != 0
-	  volatile
-#endif
-	  double fv = (double) (fq[i - 1] + fq[i]);
+	  double fv = math_narrow_eval (fq[i - 1] + fq[i]);
 	  fq[i] += fq[i - 1] - fv;
 	  fq[i - 1] = fv;
 	}
       for (i = jz; i > 1; i--)
 	{
-#if __FLT_EVAL_METHOD__ != 0
-	  volatile
-#endif
-	  double fv = (double) (fq[i - 1] + fq[i]);
+	  double fv = math_narrow_eval (fq[i - 1] + fq[i]);
 	  fq[i] += fq[i - 1] - fv;
 	  fq[i - 1] = fv;
 	}
diff --git a/sysdeps/ieee754/dbl-64/lgamma_neg.c b/sysdeps/ieee754/dbl-64/lgamma_neg.c
index 8f54a0f..9544600 100644
--- a/sysdeps/ieee754/dbl-64/lgamma_neg.c
+++ b/sysdeps/ieee754/dbl-64/lgamma_neg.c
@@ -330,17 +330,9 @@ __lgamma_neg (double x, int *signgamp)
     }
 
   double log_gamma_ratio;
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  double y0_tmp = 1 - x0_hi;
-  double y0 = y0_tmp;
+  double y0 = math_narrow_eval (1 - x0_hi);
   double y0_eps = -x0_hi + (1 - y0) - x0_lo;
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  double y_tmp = 1 - x;
-  double y = y_tmp;
+  double y = math_narrow_eval (1 - x);
   double y_eps = -x + (1 - y);
   /* We now wish to compute LOG_GAMMA_RATIO
      = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)).  XDIFF
@@ -353,19 +345,11 @@ __lgamma_neg (double x, int *signgamp)
     {
       int n_up = (7 - i) / 2;
       double ny0, ny0_eps, ny, ny_eps;
-#if FLT_EVAL_METHOD != 0
-      volatile
-#endif
-      double y0_tmp = y0 + n_up;
-      ny0 = y0_tmp;
+      ny0 = math_narrow_eval (y0 + n_up);
       ny0_eps = y0 - (ny0 - n_up) + y0_eps;
       y0 = ny0;
       y0_eps = ny0_eps;
-#if FLT_EVAL_METHOD != 0
-      volatile
-#endif
-      double y_tmp = y + n_up;
-      ny = y_tmp;
+      ny = math_narrow_eval (y + n_up);
       ny_eps = y - (ny - n_up) + y_eps;
       y = ny;
       y_eps = ny_eps;
diff --git a/sysdeps/ieee754/dbl-64/s_erf.c b/sysdeps/ieee754/dbl-64/s_erf.c
index ea0a734..77cd50d 100644
--- a/sysdeps/ieee754/dbl-64/s_erf.c
+++ b/sysdeps/ieee754/dbl-64/s_erf.c
@@ -402,10 +402,7 @@ __erfc (double x)
 	  __ieee754_exp ((z - x) * (z + x) + R / S);
       if (hx > 0)
 	{
-#if FLT_EVAL_METHOD != 0
-	  volatile
-#endif
-	  double ret = r / x;
+	  double ret = math_narrow_eval (r / x);
 	  if (ret == 0)
 	    __set_errno (ERANGE);
 	  return ret;
diff --git a/sysdeps/ieee754/dbl-64/s_llrint.c b/sysdeps/ieee754/dbl-64/s_llrint.c
index 62acb67..048331e 100644
--- a/sysdeps/ieee754/dbl-64/s_llrint.c
+++ b/sysdeps/ieee754/dbl-64/s_llrint.c
@@ -35,7 +35,7 @@ __llrint (double x)
   int32_t j0;
   u_int32_t i1, i0;
   long long int result;
-  volatile double w;
+  double w;
   double t;
   int sx;
 
@@ -47,7 +47,7 @@ __llrint (double x)
 
   if (j0 < 20)
     {
-      w = two52[sx] + x;
+      w = math_narrow_eval (two52[sx] + x);
       t = w - two52[sx];
       EXTRACT_WORDS (i0, i1, t);
       j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
@@ -62,7 +62,7 @@ __llrint (double x)
 	result = (((long long int) i0 << 32) | i1) << (j0 - 52);
       else
 	{
-	  w = two52[sx] + x;
+	  w = math_narrow_eval (two52[sx] + x);
 	  t = w - two52[sx];
 	  EXTRACT_WORDS (i0, i1, t);
 	  j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
diff --git a/sysdeps/ieee754/dbl-64/s_lrint.c b/sysdeps/ieee754/dbl-64/s_lrint.c
index 9cce37f..353d5f5 100644
--- a/sysdeps/ieee754/dbl-64/s_lrint.c
+++ b/sysdeps/ieee754/dbl-64/s_lrint.c
@@ -34,7 +34,7 @@ __lrint (double x)
 {
   int32_t j0;
   u_int32_t i0, i1;
-  volatile double w;
+  double w;
   double t;
   long int result;
   int sx;
@@ -47,7 +47,7 @@ __lrint (double x)
 
   if (j0 < 20)
     {
-      w = two52[sx] + x;
+      w = math_narrow_eval (two52[sx] + x);
       t = w - two52[sx];
       EXTRACT_WORDS (i0, i1, t);
       j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
@@ -62,7 +62,7 @@ __lrint (double x)
 	result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52));
       else
 	{
-	  w = two52[sx] + x;
+	  w = math_narrow_eval (two52[sx] + x);
 	  t = w - two52[sx];
 	  EXTRACT_WORDS (i0, i1, t);
 	  j0 = ((i0 >> 20) & 0x7ff) - 0x3ff;
diff --git a/sysdeps/ieee754/flt-32/e_gammaf_r.c b/sysdeps/ieee754/flt-32/e_gammaf_r.c
index 250e412..183db1e 100644
--- a/sysdeps/ieee754/flt-32/e_gammaf_r.c
+++ b/sysdeps/ieee754/flt-32/e_gammaf_r.c
@@ -69,11 +69,7 @@ gammaf_positive (float x, int *exp2_adj)
 	  /* Adjust into the range for applying Stirling's
 	     approximation.  */
 	  float n = __ceilf (4.0f - x);
-#if FLT_EVAL_METHOD != 0
-	  volatile
-#endif
-	  float x_tmp = x + n;
-	  x_adj = x_tmp;
+	  x_adj = math_narrow_eval (x + n);
 	  x_eps = (x - (x_adj - n));
 	  prod = __gamma_productf (x_adj - n, x_eps, n, &eps);
 	}
@@ -111,9 +107,6 @@ float
 __ieee754_gammaf_r (float x, int *signgamp)
 {
   int32_t hx;
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
   float ret;
 
   GET_FLOAT_WORD (hx, x);
@@ -149,7 +142,7 @@ __ieee754_gammaf_r (float x, int *signgamp)
     {
       /* Overflow.  */
       *signgamp = 0;
-      ret = FLT_MAX * FLT_MAX;
+      ret = math_narrow_eval (FLT_MAX * FLT_MAX);
       return ret;
     }
   else
@@ -193,27 +186,28 @@ __ieee754_gammaf_r (float x, int *signgamp)
 		}
 	    }
 	}
+      ret = math_narrow_eval (ret);
     }
   if (isinf (ret) && x != 0)
     {
       if (*signgamp < 0)
 	{
-	  ret = -__copysignf (FLT_MAX, ret) * FLT_MAX;
+	  ret = math_narrow_eval (-__copysignf (FLT_MAX, ret) * FLT_MAX);
 	  ret = -ret;
 	}
       else
-	ret = __copysignf (FLT_MAX, ret) * FLT_MAX;
+	ret = math_narrow_eval (__copysignf (FLT_MAX, ret) * FLT_MAX);
       return ret;
     }
   else if (ret == 0)
     {
       if (*signgamp < 0)
 	{
-	  ret = -__copysignf (FLT_MIN, ret) * FLT_MIN;
+	  ret = math_narrow_eval (-__copysignf (FLT_MIN, ret) * FLT_MIN);
 	  ret = -ret;
 	}
       else
-	ret = __copysignf (FLT_MIN, ret) * FLT_MIN;
+	ret = math_narrow_eval (__copysignf (FLT_MIN, ret) * FLT_MIN);
       return ret;
     }
   else
diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
index 6f14d5b..0c7685c 100644
--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
@@ -167,30 +167,21 @@ recompute:
 		break;
 	    case 1:
 	    case 2:;
-#if __FLT_EVAL_METHOD__ != 0
-		volatile
-#endif
 		float fv = 0.0;
-		for (i=jz;i>=0;i--) fv += fq[i];
+		for (i=jz;i>=0;i--) fv = math_narrow_eval (fv + fq[i]);
 		y[0] = (ih==0)? fv: -fv;
-		fv = fq[0]-fv;
-		for (i=1;i<=jz;i++) fv += fq[i];
+		fv = math_narrow_eval (fq[0]-fv);
+		for (i=1;i<=jz;i++) fv = math_narrow_eval (fv + fq[i]);
 		y[1] = (ih==0)? fv: -fv;
 		break;
 	    case 3:	/* painful */
 		for (i=jz;i>0;i--) {
-#if __FLT_EVAL_METHOD__ != 0
-		    volatile
-#endif
-		    float fv = fq[i-1]+fq[i];
+		    float fv = math_narrow_eval (fq[i-1]+fq[i]);
 		    fq[i]  += fq[i-1]-fv;
 		    fq[i-1] = fv;
 		}
 		for (i=jz;i>1;i--) {
-#if __FLT_EVAL_METHOD__ != 0
-		    volatile
-#endif
-		    float fv = fq[i-1]+fq[i];
+		    float fv = math_narrow_eval (fq[i-1]+fq[i]);
 		    fq[i]  += fq[i-1]-fv;
 		    fq[i-1] = fv;
 		}
diff --git a/sysdeps/ieee754/flt-32/lgamma_negf.c b/sysdeps/ieee754/flt-32/lgamma_negf.c
index ed96598..68bee85 100644
--- a/sysdeps/ieee754/flt-32/lgamma_negf.c
+++ b/sysdeps/ieee754/flt-32/lgamma_negf.c
@@ -245,17 +245,9 @@ __lgamma_negf (float x, int *signgamp)
     }
 
   float log_gamma_ratio;
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  float y0_tmp = 1 - x0_hi;
-  float y0 = y0_tmp;
+  float y0 = math_narrow_eval (1 - x0_hi);
   float y0_eps = -x0_hi + (1 - y0) - x0_lo;
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  float y_tmp = 1 - x;
-  float y = y_tmp;
+  float y = math_narrow_eval (1 - x);
   float y_eps = -x + (1 - y);
   /* We now wish to compute LOG_GAMMA_RATIO
      = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)).  XDIFF
diff --git a/sysdeps/ieee754/flt-32/s_erff.c b/sysdeps/ieee754/flt-32/s_erff.c
index 2be44cc..1aabce5 100644
--- a/sysdeps/ieee754/flt-32/s_erff.c
+++ b/sysdeps/ieee754/flt-32/s_erff.c
@@ -213,10 +213,7 @@ float __erfcf(float x)
 	    r  =  __ieee754_expf(-z*z-(float)0.5625)*
 			__ieee754_expf((z-x)*(z+x)+R/S);
 	    if(hx>0) {
-#if FLT_EVAL_METHOD != 0
-		volatile
-#endif
-		float ret = r/x;
+		float ret = math_narrow_eval (r/x);
 		if (ret == 0)
 		    __set_errno (ERANGE);
 		return ret;
diff --git a/sysdeps/ieee754/flt-32/s_llrintf.c b/sysdeps/ieee754/flt-32/s_llrintf.c
index ac8c1a2..d7588d0 100644
--- a/sysdeps/ieee754/flt-32/s_llrintf.c
+++ b/sysdeps/ieee754/flt-32/s_llrintf.c
@@ -34,7 +34,7 @@ __llrintf (float x)
 {
   int32_t j0;
   u_int32_t i0;
-  volatile float w;
+  float w;
   float t;
   long long int result;
   int sx;
@@ -52,7 +52,7 @@ __llrintf (float x)
 	result = (long long int) i0 << (j0 - 23);
       else
 	{
-	  w = two23[sx] + x;
+	  w = math_narrow_eval (two23[sx] + x);
 	  t = w - two23[sx];
 	  GET_FLOAT_WORD (i0, t);
 	  j0 = ((i0 >> 23) & 0xff) - 0x7f;
diff --git a/sysdeps/ieee754/flt-32/s_lrintf.c b/sysdeps/ieee754/flt-32/s_lrintf.c
index 7581a8d..bc60fd2 100644
--- a/sysdeps/ieee754/flt-32/s_lrintf.c
+++ b/sysdeps/ieee754/flt-32/s_lrintf.c
@@ -34,7 +34,7 @@ __lrintf (float x)
 {
   int32_t j0;
   u_int32_t i0;
-  volatile float w;
+  float w;
   float t;
   long int result;
   int sx;
@@ -52,7 +52,7 @@ __lrintf (float x)
 	result = (long int) i0 << (j0 - 23);
       else
 	{
-	  w = two23[sx] + x;
+	  w = math_narrow_eval (two23[sx] + x);
 	  t = w - two23[sx];
 	  GET_FLOAT_WORD (i0, t);
 	  j0 = ((i0 >> 23) & 0xff) - 0x7f;
diff --git a/sysdeps/ieee754/ldbl-128/s_llrintl.c b/sysdeps/ieee754/ldbl-128/s_llrintl.c
index 27196c9..77eb2d6 100644
--- a/sysdeps/ieee754/ldbl-128/s_llrintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_llrintl.c
@@ -34,7 +34,7 @@ __llrintl (long double x)
 {
   int32_t j0;
   u_int64_t i0,i1;
-  volatile long double w;
+  long double w;
   long double t;
   long long int result;
   int sx;
diff --git a/sysdeps/ieee754/ldbl-128/s_lrintl.c b/sysdeps/ieee754/ldbl-128/s_lrintl.c
index dc678d5..b0e0cfc 100644
--- a/sysdeps/ieee754/ldbl-128/s_lrintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_lrintl.c
@@ -34,7 +34,7 @@ __lrintl (long double x)
 {
   int32_t j0;
   u_int64_t i0,i1;
-  volatile long double w;
+  long double w;
   long double t;
   long int result;
   int sx;
diff --git a/sysdeps/ieee754/ldbl-128/s_nexttoward.c b/sysdeps/ieee754/ldbl-128/s_nexttoward.c
index 2cd2e58..e62ca3f 100644
--- a/sysdeps/ieee754/ldbl-128/s_nexttoward.c
+++ b/sysdeps/ieee754/ldbl-128/s_nexttoward.c
@@ -73,10 +73,7 @@ double __nexttoward(double x, long double y)
 	}
 	hy = hx&0x7ff00000;
 	if(hy>=0x7ff00000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-	    /* Force conversion to double.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00100000) {
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c b/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
index b40cf16..85140c1 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
@@ -74,10 +74,7 @@ double __nexttoward(double x, long double y)
 	}
 	hy = hx&0x7ff00000;
 	if(hy>=0x7ff00000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-	    /* Force conversion to double.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00100000) {
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c b/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
index 19522f4..b27f0bb 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
@@ -63,10 +63,7 @@ float __nexttowardf(float x, long double y)
 	}
 	hy = hx&0x7f800000;
 	if(hy>=0x7f800000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0)
-	    /* Force conversion to float.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00800000) {		/* underflow */
diff --git a/sysdeps/ieee754/ldbl-96/gamma_product.c b/sysdeps/ieee754/ldbl-96/gamma_product.c
index e113e23..ff95b73 100644
--- a/sysdeps/ieee754/ldbl-96/gamma_product.c
+++ b/sysdeps/ieee754/ldbl-96/gamma_product.c
@@ -36,10 +36,7 @@ __gamma_product (double x, double x_eps, int n, double *eps)
   for (int i = 1; i < n; i++)
     ret *= x_full + i;
 
-#if FLT_EVAL_METHOD != 0
-  volatile
-#endif
-  double fret = ret;
+  double fret = math_narrow_eval ((double) ret);
   *eps = (ret - fret) / fret;
 
   return fret;
diff --git a/sysdeps/ieee754/ldbl-96/s_llrintl.c b/sysdeps/ieee754/ldbl-96/s_llrintl.c
index 070246c..c73741e 100644
--- a/sysdeps/ieee754/ldbl-96/s_llrintl.c
+++ b/sysdeps/ieee754/ldbl-96/s_llrintl.c
@@ -35,7 +35,7 @@ __llrintl (long double x)
   int32_t se,j0;
   u_int32_t i0, i1;
   long long int result;
-  volatile long double w;
+  long double w;
   long double t;
   int sx;
 
diff --git a/sysdeps/ieee754/ldbl-96/s_lrintl.c b/sysdeps/ieee754/ldbl-96/s_lrintl.c
index 96c6a5e..598423b 100644
--- a/sysdeps/ieee754/ldbl-96/s_lrintl.c
+++ b/sysdeps/ieee754/ldbl-96/s_lrintl.c
@@ -35,7 +35,7 @@ __lrintl (long double x)
   int32_t se,j0;
   u_int32_t i0, i1;
   long int result;
-  volatile long double w;
+  long double w;
   long double t;
   int sx;
 
diff --git a/sysdeps/ieee754/ldbl-96/s_nexttoward.c b/sysdeps/ieee754/ldbl-96/s_nexttoward.c
index f7a8b21..b972a3e 100644
--- a/sysdeps/ieee754/ldbl-96/s_nexttoward.c
+++ b/sysdeps/ieee754/ldbl-96/s_nexttoward.c
@@ -70,10 +70,7 @@ double __nexttoward(double x, long double y)
 	}
 	hy = hx&0x7ff00000;
 	if(hy>=0x7ff00000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-	    /* Force conversion to double.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00100000) {
diff --git a/sysdeps/ieee754/ldbl-96/s_nexttowardf.c b/sysdeps/ieee754/ldbl-96/s_nexttowardf.c
index a96f9da..f1fe4e7 100644
--- a/sysdeps/ieee754/ldbl-96/s_nexttowardf.c
+++ b/sysdeps/ieee754/ldbl-96/s_nexttowardf.c
@@ -58,10 +58,7 @@ float __nexttowardf(float x, long double y)
 	}
 	hy = hx&0x7f800000;
 	if(hy>=0x7f800000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0)
-	    /* Force conversion to float.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00800000) {
diff --git a/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c b/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c
index 7eca121..782e1a3 100644
--- a/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c
+++ b/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c
@@ -62,10 +62,7 @@ float __nldbl_nexttowardf(float x, double y)
 	}
 	hy = hx&0x7f800000;
 	if(hy>=0x7f800000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0)
-	    /* Force conversion to float.  */
-	    asm ("" : "+m"(x));
+	  x = math_narrow_eval (x+x);	/* overflow  */
 	  return x;
 	}
 	if(hy<0x00800000) {

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                   |   47 +++++++++++++++++++++++++++
 math/s_nexttowardf.c                        |    5 +--
 stdlib/strtod_l.c                           |   13 +++----
 sysdeps/i386/fpu/s_nexttoward.c             |    5 +--
 sysdeps/i386/fpu/s_nexttowardf.c            |    5 +--
 sysdeps/ieee754/dbl-64/e_gamma_r.c          |   20 ++++-------
 sysdeps/ieee754/dbl-64/gamma_productf.c     |    5 +--
 sysdeps/ieee754/dbl-64/k_rem_pio2.c         |   19 +++--------
 sysdeps/ieee754/dbl-64/lgamma_neg.c         |   24 ++-----------
 sysdeps/ieee754/dbl-64/s_erf.c              |    5 +--
 sysdeps/ieee754/dbl-64/s_llrint.c           |    6 ++--
 sysdeps/ieee754/dbl-64/s_lrint.c            |    6 ++--
 sysdeps/ieee754/flt-32/e_gammaf_r.c         |   20 ++++-------
 sysdeps/ieee754/flt-32/k_rem_pio2f.c        |   19 +++--------
 sysdeps/ieee754/flt-32/lgamma_negf.c        |   12 +------
 sysdeps/ieee754/flt-32/s_erff.c             |    5 +--
 sysdeps/ieee754/flt-32/s_llrintf.c          |    4 +-
 sysdeps/ieee754/flt-32/s_lrintf.c           |    4 +-
 sysdeps/ieee754/ldbl-128/s_llrintl.c        |    2 +-
 sysdeps/ieee754/ldbl-128/s_lrintl.c         |    2 +-
 sysdeps/ieee754/ldbl-128/s_nexttoward.c     |    5 +--
 sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c  |    5 +--
 sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c |    5 +--
 sysdeps/ieee754/ldbl-96/gamma_product.c     |    5 +--
 sysdeps/ieee754/ldbl-96/s_llrintl.c         |    2 +-
 sysdeps/ieee754/ldbl-96/s_lrintl.c          |    2 +-
 sysdeps/ieee754/ldbl-96/s_nexttoward.c      |    5 +--
 sysdeps/ieee754/ldbl-96/s_nexttowardf.c     |    5 +--
 sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c   |    5 +--
 29 files changed, 109 insertions(+), 158 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]