This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.21-85-gce8fc78
- From: jsm28 at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 17 Feb 2015 00:42:25 -0000
- Subject: 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