FIx ldbl-128ibm frexpl for 32-bit systems (bug 16619, bug 16740)
Joseph Myers
joseph@codesourcery.com
Wed Nov 26 13:55:00 GMT 2014
This patch fixes bugs in ldbl-128ibm frexpl for 32-bit systems shown
up by warnings:
../sysdeps/ieee754/ldbl-128ibm/s_frexpl.c:82:4: warning: left shift count >= width of type
../sysdeps/ieee754/ldbl-128ibm/s_frexpl.c:129:5: warning: left shift count >= width of type
This did in fact show up in test-ldouble.out (alongside all the other
problems there ... maybe we should again consider running the libm
tests at finer granularity from the makefiles) as already covered by
the testsuite after the previous patch that fixed these bugs for
64-bit systems. The fix is simply using 1LL instead of 1L when
shifting by 52.
Tested for powerpc32 (soft float). Committed.
2014-11-26 Joseph Myers <joseph@codesourcery.com>
[BZ #16619]
[BZ #16740]
* sysdeps/ieee754/ldbl-128ibm/s_frexpl.c (__frexpl): Use 1LL << 52
instead of 1L << 52.
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c b/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
index 483c6a8..52d2d3e 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
@@ -79,7 +79,7 @@ long double __frexpl(long double x, int *eptr)
if (ix == 0
&& (int64_t) (hx ^ lx) < 0)
{
- hx += 1L << 52;
+ hx += 1LL << 52;
expon -= 1;
}
@@ -126,7 +126,7 @@ long double __frexpl(long double x, int *eptr)
be wrong since the returned low double will be
zero. This can happen if the input was
something weird like 0x1p1000 - 0x1p-1000. */
- hx -= 1L << 52;
+ hx -= 1LL << 52;
expon += 1;
}
}
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list