diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_lrintl.c | 24 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_lroundl.c | 20 |
4 files changed, 30 insertions, 23 deletions
@@ -1,3 +1,10 @@ +2015-10-07 Joseph Myers <joseph@codesourcery.com> + + [BZ #19085] + * sysdeps/ieee754/ldbl-128/s_lrintl.c (__lrintl): Move test for + exponent below 48 inside case for non-overflowing exponent. + * sysdeps/ieee754/ldbl-128/s_lroundl.c (__lroundl): Likewise. + 2015-10-07 Florian Weimer <fweimer@redhat.com> * iconvdata/cp737.h (from_idx): Add const. @@ -18,7 +18,7 @@ Version 2.23 18820, 18823, 18824, 18825, 18857, 18863, 18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, 18956, 18961, 18966, 18967, 18969, 18970, 18977, 18980, 18981, 18985, 19003, 19012, 19016, 19018, 19032, 19046, - 19049, 19050, 19059, 19071, 19076, 19077, 19078, 19079. + 19049, 19050, 19059, 19071, 19076, 19077, 19078, 19079, 19085. * The obsolete header <regexp.h> has been removed. Programs that require this header must be updated to use <regex.h> instead. diff --git a/sysdeps/ieee754/ldbl-128/s_lrintl.c b/sysdeps/ieee754/ldbl-128/s_lrintl.c index b0e0cfc..d0b0aeb 100644 --- a/sysdeps/ieee754/ldbl-128/s_lrintl.c +++ b/sysdeps/ieee754/ldbl-128/s_lrintl.c @@ -45,20 +45,20 @@ __lrintl (long double x) i0 &= 0x0000ffffffffffffLL; i0 |= 0x0001000000000000LL; - if (j0 < 48) + if (j0 < (int32_t) (8 * sizeof (long int)) - 1) { - w = two112[sx] + x; - t = w - two112[sx]; - GET_LDOUBLE_WORDS64 (i0, i1, t); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; + if (j0 < 48) + { + w = two112[sx] + x; + t = w - two112[sx]; + GET_LDOUBLE_WORDS64 (i0, i1, t); + j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; + i0 &= 0x0000ffffffffffffLL; + i0 |= 0x0001000000000000LL; - result = (j0 < 0 ? 0 : i0 >> (48 - j0)); - } - else if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 >= 112) + result = (j0 < 0 ? 0 : i0 >> (48 - j0)); + } + else if (j0 >= 112) result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); else { diff --git a/sysdeps/ieee754/ldbl-128/s_lroundl.c b/sysdeps/ieee754/ldbl-128/s_lroundl.c index 8421609..64b285e 100644 --- a/sysdeps/ieee754/ldbl-128/s_lroundl.c +++ b/sysdeps/ieee754/ldbl-128/s_lroundl.c @@ -37,19 +37,19 @@ __lroundl (long double x) i0 &= 0x0000ffffffffffffLL; i0 |= 0x0001000000000000LL; - if (j0 < 48) + if (j0 < (int32_t) (8 * sizeof (long int)) - 1) { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else + if (j0 < 48) { - i0 += 0x0000800000000000LL >> j0; - result = i0 >> (48 - j0); + if (j0 < 0) + return j0 < -1 ? 0 : sign; + else + { + i0 += 0x0000800000000000LL >> j0; + result = i0 >> (48 - j0); + } } - } - else if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 >= 112) + else if (j0 >= 112) result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); else { |