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.21-85-gce8fc78


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  ce8fc784e619ada624dc41ed7603211131e66573 (commit)
      from  0d7036bdb189a1ecb4232101ff83c6dd72439545 (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=ce8fc784e619ada624dc41ed7603211131e66573

commit ce8fc784e619ada624dc41ed7603211131e66573
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Feb 17 00:41:50 2015 +0000

    Fix sign of remquo zero remainder in round-downward mode (bug 17987).
    
    Various remquo implementations produce a zero remainder with the wrong
    sign (a zero remainder should always have the sign of the first
    argument, as specified in IEEE 754) in round-downward mode, resulting
    from the sign of 0 - 0.  This patch checks for zero results and fixes
    their sign accordingly.
    
    Tested for x86_64, x86, mips64 and powerpc.
    
    	[BZ #17987]
    	* sysdeps/ieee754/dbl-64/s_remquo.c (__remquo): Ensure sign of
    	zero result does not depend on the sign resulting from
    	subtraction.
    	* sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c (__remquo):
    	Likewise.
    	* sysdeps/ieee754/flt-32/s_remquof.c (__remquof): Likewise.
    	* sysdeps/ieee754/ldbl-128/s_remquol.c (__remquol): Likewise.
    	* sysdeps/ieee754/ldbl-128ibm/s_remquol.c (__remquol): Likewise.
    	* sysdeps/ieee754/ldbl-96/s_remquol.c (__remquol): Likewise.
    	* math/libm-test.inc (remquo_test_data): Add more tests.

diff --git a/ChangeLog b/ChangeLog
index 540e997..f74ef23 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2015-02-16  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #17987]
+	* sysdeps/ieee754/dbl-64/s_remquo.c (__remquo): Ensure sign of
+	zero result does not depend on the sign resulting from
+	subtraction.
+	* sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c (__remquo):
+	Likewise.
+	* sysdeps/ieee754/flt-32/s_remquof.c (__remquof): Likewise.
+	* sysdeps/ieee754/ldbl-128/s_remquol.c (__remquol): Likewise.
+	* sysdeps/ieee754/ldbl-128ibm/s_remquol.c (__remquol): Likewise.
+	* sysdeps/ieee754/ldbl-96/s_remquol.c (__remquol): Likewise.
+	* math/libm-test.inc (remquo_test_data): Add more tests.
+
 2015-02-16  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* manual/time.texi (TZ Variable): glibc no longer comes with tzdata.
diff --git a/NEWS b/NEWS
index 4f4f740..1c5e590 100644
--- a/NEWS
+++ b/NEWS
@@ -10,7 +10,7 @@ Version 2.22
 * The following bugs are resolved with this release:
 
   4719, 15467, 15790, 16560, 17569, 17792, 17912, 17932, 17944, 17949,
-  17964, 17965, 17967, 17969, 17978.
+  17964, 17965, 17967, 17969, 17978, 17987.
 
 Version 2.21
 
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 1cf80e3..85d8b67 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -8818,6 +8818,16 @@ static const struct test_ffI_f1_data remquo_test_data[] =
     TEST_ffI_f1 (remquo, -1, -max_value / 4, -1, 0, NO_INEXACT_EXCEPTION),
     TEST_ffI_f1 (remquo, -1, max_value / 8, -1, 0, NO_INEXACT_EXCEPTION),
     TEST_ffI_f1 (remquo, -1, -max_value / 8, -1, 0, NO_INEXACT_EXCEPTION),
+
+    TEST_ffI_f1 (remquo, max_value, max_value / 2, plus_zero, 2, NO_INEXACT_EXCEPTION),
+    TEST_ffI_f1 (remquo, max_value, -max_value / 2, plus_zero, -2, NO_INEXACT_EXCEPTION),
+    TEST_ffI_f1 (remquo, -max_value, max_value / 2, minus_zero, -2, NO_INEXACT_EXCEPTION),
+    TEST_ffI_f1 (remquo, -max_value, -max_value / 2, minus_zero, 2, NO_INEXACT_EXCEPTION),
+
+    TEST_ffI_f1 (remquo, 2, 1, plus_zero, 2, NO_INEXACT_EXCEPTION),
+    TEST_ffI_f1 (remquo, 2, -1, plus_zero, -2, NO_INEXACT_EXCEPTION),
+    TEST_ffI_f1 (remquo, -2, 1, minus_zero, -2, NO_INEXACT_EXCEPTION),
+    TEST_ffI_f1 (remquo, -2, -1, minus_zero, 2, NO_INEXACT_EXCEPTION),
   };
 
 static void
diff --git a/sysdeps/ieee754/dbl-64/s_remquo.c b/sysdeps/ieee754/dbl-64/s_remquo.c
index e07efa8..b081d26 100644
--- a/sysdeps/ieee754/dbl-64/s_remquo.c
+++ b/sysdeps/ieee754/dbl-64/s_remquo.c
@@ -101,6 +101,9 @@ __remquo (double x, double y, int *quo)
 
   *quo = qs ? -cquo : cquo;
 
+  /* Ensure correct sign of zero result in round-downward mode.  */
+  if (x == 0.0)
+    x = 0.0;
   if (sx)
     x = -x;
   return x;
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c
index ab56178..304e9d0 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c
@@ -100,6 +100,9 @@ __remquo (double x, double y, int *quo)
 
   *quo = qs ? -cquo : cquo;
 
+  /* Ensure correct sign of zero result in round-downward mode.  */
+  if (x == 0.0)
+    x = 0.0;
   if (sx)
     x = -x;
   return x;
diff --git a/sysdeps/ieee754/flt-32/s_remquof.c b/sysdeps/ieee754/flt-32/s_remquof.c
index 04944fd..36cf359 100644
--- a/sysdeps/ieee754/flt-32/s_remquof.c
+++ b/sysdeps/ieee754/flt-32/s_remquof.c
@@ -100,6 +100,9 @@ __remquof (float x, float y, int *quo)
 
   *quo = qs ? -cquo : cquo;
 
+  /* Ensure correct sign of zero result in round-downward mode.  */
+  if (x == 0.0f)
+    x = 0.0f;
   if (sx)
     x = -x;
   return x;
diff --git a/sysdeps/ieee754/ldbl-128/s_remquol.c b/sysdeps/ieee754/ldbl-128/s_remquol.c
index da175a1..82cdf1a 100644
--- a/sysdeps/ieee754/ldbl-128/s_remquol.c
+++ b/sysdeps/ieee754/ldbl-128/s_remquol.c
@@ -102,6 +102,9 @@ __remquol (long double x, long double y, int *quo)
 
   *quo = qs ? -cquo : cquo;
 
+  /* Ensure correct sign of zero result in round-downward mode.  */
+  if (x == 0.0L)
+    x = 0.0L;
   if (sx)
     x = -x;
   return x;
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c b/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
index ac22879..57c5059 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
@@ -107,6 +107,9 @@ __remquol (long double x, long double y, int *quo)
 
   *quo = qs ? -cquo : cquo;
 
+  /* Ensure correct sign of zero result in round-downward mode.  */
+  if (x == 0.0L)
+    x = 0.0L;
   if (sx)
     x = -x;
   return x;
diff --git a/sysdeps/ieee754/ldbl-96/s_remquol.c b/sysdeps/ieee754/ldbl-96/s_remquol.c
index 1462b54..8d6b10e 100644
--- a/sysdeps/ieee754/ldbl-96/s_remquol.c
+++ b/sysdeps/ieee754/ldbl-96/s_remquol.c
@@ -101,6 +101,9 @@ __remquol (long double x, long double p, int *quo)
 
   *quo = qs ? -cquo : cquo;
 
+  /* Ensure correct sign of zero result in round-downward mode.  */
+  if (x == 0.0L)
+    x = 0.0L;
   if (sx)
     x = -x;
   return x;

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

Summary of changes:
 ChangeLog                                     |   14 ++++++++++++++
 NEWS                                          |    2 +-
 math/libm-test.inc                            |   10 ++++++++++
 sysdeps/ieee754/dbl-64/s_remquo.c             |    3 +++
 sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c |    3 +++
 sysdeps/ieee754/flt-32/s_remquof.c            |    3 +++
 sysdeps/ieee754/ldbl-128/s_remquol.c          |    3 +++
 sysdeps/ieee754/ldbl-128ibm/s_remquol.c       |    3 +++
 sysdeps/ieee754/ldbl-96/s_remquol.c           |    3 +++
 9 files changed, 43 insertions(+), 1 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]