about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--math/libm-test.inc2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_remainderl.c2
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_remquol.c2
4 files changed, 16 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 3e480edb1a..32fae2de24 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-02-19  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #19603]
+	* sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
+	(__ieee754_remainderl): Adjust sign of integer version of low part
+	when taking absolute value of high part.
+	* sysdeps/ieee754/ldbl-128ibm/s_remquol.c (__remquol): Likewise.
+	* math/libm-test.inc (remainder_test_data): Add another test.
+	(remquo_test_data): Likewise.
+
 2016-02-18  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #19602]
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 3f0610d1b4..c9925fddb7 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -10392,6 +10392,7 @@ static const struct test_ff_f_data remainder_test_data[] =
     TEST_ff_f (remainder, 3.0, 2.0, -1.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 56
     TEST_ff_f (remainder, -0x1.80000000000002p1L, 2.0, 0x1.fffffffffffff8p-1L, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_ff_f (remainder, 0x0.ffffffffffffffp0L, -0x1.00000000000001p0L, -0x1p-55L, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 
     TEST_ff_f (remainder, 3419, 360, 179, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -10530,6 +10531,7 @@ static const struct test_ffI_f1_data remquo_test_data[] =
     TEST_ffI_f1 (remquo, 3, 2, -1, 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 56
     TEST_ffI_f1 (remquo, -0x1.80000000000002p1L, 2.0, 0x1.fffffffffffff8p-1L, -2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_ffI_f1 (remquo, 0x0.ffffffffffffffp0L, -0x1.00000000000001p0L, -0x1p-55L, -1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 #endif
 
     TEST_ffI_f1 (remquo, 3419, 360, 179, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
diff --git a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c b/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
index 800416f29a..1dc59a4785 100644
--- a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
@@ -42,7 +42,9 @@ __ieee754_remainderl(long double x, long double p)
 	EXTRACT_WORDS64 (hp, phi);
 	EXTRACT_WORDS64 (lp, plo);
 	sx = hx&0x8000000000000000ULL;
+	lp ^= hp & 0x8000000000000000ULL;
 	hp &= 0x7fffffffffffffffLL;
+	lx ^= sx;
 	hx &= 0x7fffffffffffffffLL;
 
     /* purge off exception values */
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c b/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
index 20e17cc823..14b27ca616 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
@@ -43,7 +43,9 @@ __remquol (long double x, long double y, int *quo)
   EXTRACT_WORDS64 (ly, ylo);
   sx = hx & 0x8000000000000000ULL;
   qs = sx ^ (hy & 0x8000000000000000ULL);
+  ly ^= hy & 0x8000000000000000ULL;
   hy &= 0x7fffffffffffffffLL;
+  lx ^= sx;
   hx &= 0x7fffffffffffffffLL;
 
   /* Purge off exception values.  */