diff options
22 files changed, 96 insertions, 34 deletions
diff --git a/libc/ChangeLog b/libc/ChangeLog index 7ee459ba4..0c7a24b99 100644 --- a/libc/ChangeLog +++ b/libc/ChangeLog @@ -1,3 +1,22 @@ +2012-05-26 Andreas Schwab <schwab@linux-m68k.org> + + * sysdeps/ieee754/dbl-64/s_logb.c (__logb): Optimize + handling of denormals. + * sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c (__logb): Likewise. + * sysdeps/ieee754/flt-32/s_logbf.c (__logbf): Likewise. + * sysdeps/ieee754/ldbl-96/s_logbl.c (__logbl): Likewise. + * sysdeps/ieee754/ldbl-128/s_logbl.c (__logbl): Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_logbl.c (__logbl): Likewise. + * sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c (_logb): Likewise. + * sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c (_logbl): + Likewise. + +2012-05-26 Marek Polacek <polacek@redhat.com> + + [BZ #14152] + * math/libm-test.inc (fma_test): Don't always expect underflow + exception. + 2012-05-26 Siddhesh Poyarekar <siddhesh@redhat.com> [BZ #12416] diff --git a/libc/math/libm-test.inc b/libc/math/libm-test.inc index 04ee0067a..c2176929b 100644 --- a/libc/math/libm-test.inc +++ b/libc/math/libm-test.inc @@ -3983,7 +3983,8 @@ fma_test (void) TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION); TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION); TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION); - TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION); + /* Sometimes the FE_UNDERFLOW is not set, so be prepared. See Bug 14152. */ + TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION_OK); TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION); TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983); #endif diff --git a/libc/sysdeps/ieee754/dbl-64/s_logb.c b/libc/sysdeps/ieee754/dbl-64/s_logb.c index baa35e14d..17aa94b75 100644 --- a/libc/sysdeps/ieee754/dbl-64/s_logb.c +++ b/libc/sysdeps/ieee754/dbl-64/s_logb.c @@ -34,10 +34,12 @@ __logb (double x) { /* POSIX specifies that denormal number is treated as though it were normalized. */ - int m1 = (ix == 0) ? 0 : __builtin_clz (ix); - int m2 = (lx == 0) ? 0 : __builtin_clz (lx); - int ma = (m1 == 0) ? m2 + 32 : m1; - return -1022.0 + (double)(11 - ma); + int ma; + if (ix == 0) + ma = __builtin_clz (lx) + 32; + else + ma = __builtin_clz (ix); + rix -= ma - 12; } return (double) (rix - 1023); } diff --git a/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c b/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c index 185dd05be..40b888813 100644 --- a/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c +++ b/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c @@ -36,8 +36,8 @@ __logb (double x) return x * x; if (__builtin_expect (ex == 0, 0)) { - int m = (ix == 0) ? 0 : __builtin_clzll (ix); - return -1022.0 + (double)(11 -m); + int m = __builtin_clzll (ix); + ex -= m - 12; } return (double) (ex - 1023); } diff --git a/libc/sysdeps/ieee754/flt-32/s_logbf.c b/libc/sysdeps/ieee754/flt-32/s_logbf.c index 025c70de7..e2b3aaa62 100644 --- a/libc/sysdeps/ieee754/flt-32/s_logbf.c +++ b/libc/sysdeps/ieee754/flt-32/s_logbf.c @@ -31,8 +31,7 @@ __logbf (float x) { /* POSIX specifies that denormal number is treated as though it were normalized. */ - int m = (ix == 0) ? 0 : __builtin_clz (ix); - return -126.0 + (float)(8 - m); + rix -= __builtin_clz (ix) - 9; } return (float) (rix - 127); } diff --git a/libc/sysdeps/ieee754/ldbl-128/s_logbl.c b/libc/sysdeps/ieee754/ldbl-128/s_logbl.c index cf6003e05..3ba67b7bd 100644 --- a/libc/sysdeps/ieee754/ldbl-128/s_logbl.c +++ b/libc/sysdeps/ieee754/ldbl-128/s_logbl.c @@ -41,10 +41,12 @@ __logbl (long double x) { /* POSIX specifies that denormal number is treated as though it were normalized. */ - int m1 = (hx == 0) ? 0 : __builtin_clzll (hx); - int m2 = (lx == 0) ? 0 : __builtin_clzll (lx); - int ma = (m1 == 0) ? m2 + 64 : m1; - return -16382.0 + (long double)(15 - ma); + int ma; + if (hx == 0) + ma = __builtin_clzll (lx) + 64; + else + ma = __builtin_clzll (hx); + ex -= ma - 16; } return (long double) (ex - 16383); } diff --git a/libc/sysdeps/ieee754/ldbl-128ibm/s_logbl.c b/libc/sysdeps/ieee754/ldbl-128ibm/s_logbl.c index 678b6cad5..92ce2c189 100644 --- a/libc/sysdeps/ieee754/ldbl-128ibm/s_logbl.c +++ b/libc/sysdeps/ieee754/ldbl-128ibm/s_logbl.c @@ -30,7 +30,7 @@ __logbl (long double x) GET_LDOUBLE_WORDS64 (hx, lx, x); hx &= 0x7fffffffffffffffLL; /* high |x| */ - if ((hx | (lx & 0x7fffffffffffffffLL)) == 0) + if (hx == 0) return -1.0 / fabs (x); if (hx >= 0x7ff0000000000000LL) return x * x; @@ -38,10 +38,7 @@ __logbl (long double x) { /* POSIX specifies that denormal number is treated as though it were normalized. */ - int m1 = (hx == 0) ? 0 : __builtin_clzll (hx); - int m2 = (lx == 0) ? 0 : __builtin_clzll (lx); - int ma = (m1 == 0) ? m2 + 64 : m1; - return -1022.0 + (long double)(11 - ma); + rhx -= __builtin_clzll (hx) - 12; } return (long double) (rhx - 1023); } diff --git a/libc/sysdeps/ieee754/ldbl-96/s_logbl.c b/libc/sysdeps/ieee754/ldbl-96/s_logbl.c index d8ad4bcfc..4289be193 100644 --- a/libc/sysdeps/ieee754/ldbl-96/s_logbl.c +++ b/libc/sysdeps/ieee754/ldbl-96/s_logbl.c @@ -38,10 +38,12 @@ __logbl (long double x) { /* POSIX specifies that denormal number is treated as though it were normalized. */ - int m1 = (ix == 0) ? 0 : __builtin_clz (ix); - int m2 = (lx == 0) ? 0 : __builtin_clz (lx); - int ma = (m1 == 0) ? m2 + 32 : m1; - return -16382.0 - (long double)(ma); + int ma; + if (ix == 0) + ma = __builtin_clz (lx) + 32; + else + ma = __builtin_clz (ix); + es -= ma - 1; } return (long double) (es - 16383); } diff --git a/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c b/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c index fba482290..87176c34c 100644 --- a/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c +++ b/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logb.c @@ -55,13 +55,14 @@ __logb (double x) /* POSIX specifies that denormal numbers are treated as though they were normalized. */ int32_t lx, ix; - int m1, m2, ma; + int ma; - EXTRACT_WORDS (ix , lx, x); - m1 = (ix == 0) ? 0 : __builtin_clz (ix); - m2 = (lx == 0) ? 0 : __builtin_clz (lx); - ma = (m1 == 0) ? m2 + 32 : m1; - return -1022.0 + (double)(11 - ma); + EXTRACT_WORDS (ix, lx, x); + if (ix == 0) + ma = __builtin_clz (lx) + 32; + else + ma = __builtin_clz (ix); + return (double) (-1023 - (ma - 12)); } /* Test to avoid logb_downward (0.0) == -0.0. */ return ret == -0.0 ? 0.0 : ret; diff --git a/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c b/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c index 03942ca53..20c7d4e6e 100644 --- a/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c +++ b/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c @@ -56,14 +56,12 @@ __logbl (long double x) return (xh * xh); else if (__builtin_expect (ret == two10m1, 0)) { + /* POSIX specifies that denormal number is treated as + though it were normalized. */ int64_t lx, hx; - int m1, m2, ma; GET_LDOUBLE_WORDS64 (hx, lx, x); - m1 = (hx == 0) ? 0 : __builtin_clzll (hx); - m2 = (lx == 0) ? 0 : __builtin_clzll (lx); - ma = (m1 == 0) ? m2 + 64 : m1; - return -1022.0 + (double)(11 - ma); + return (long double) (-1023 - (__builtin_clzll (hx) - 12)); } /* Test to avoid logb_downward (0.0) == -0.0. */ return ret == -0.0 ? 0.0 : ret; diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 7b253dbdb..ec63edbfc 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,8 @@ +2012-05-26 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/arm/syscalls.list (chown): New. + * sysdeps/unix/sysv/linux/arm/chown.c: Remove. + 2012-05-25 Joseph Myers <joseph@codesourcery.com> * sysdeps/unix/sysv/linux/arm/kernel-features.h diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index 1fcbce5be..b7c1ff32b 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,3 +1,22 @@ +2012-05-26 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libcidn.abilist: New + file. + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_compat.abilist: + Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_db.abilist: + Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_dns.abilist: + Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_files.abilist: + Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_hesiod.abilist: + Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nis.abilist: + Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nisplus.abilist: + Likewise. + 2012-05-25 Joseph Myers <joseph@codesourcery.com> * sysdeps/unix/sysv/linux/mips/kernel-features.h diff --git a/ports/sysdeps/unix/sysv/linux/arm/chown.c b/ports/sysdeps/unix/sysv/linux/arm/chown.c deleted file mode 100644 index 196162256..000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/chown.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/m68k/chown.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/syscalls.list b/ports/sysdeps/unix/sysv/linux/arm/syscalls.list index b8852d940..c5b1fe725 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/syscalls.list +++ b/ports/sysdeps/unix/sysv/linux/arm/syscalls.list @@ -1,5 +1,7 @@ # File name Caller Syscall name # args Strong name Weak names +chown - chown32 i:sii __chown chown + prlimit64 EXTRA prlimit64 i:iipp prlimit64 fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libcidn.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libcidn.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libcidn.abilist @@ -0,0 +1,2 @@ +_gp_disp + A diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_compat.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_compat.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_compat.abilist @@ -0,0 +1,2 @@ +_gp_disp + A diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_db.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_db.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_db.abilist @@ -0,0 +1,2 @@ +_gp_disp + A diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_dns.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_dns.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_dns.abilist @@ -0,0 +1,2 @@ +_gp_disp + A diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_files.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_files.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_files.abilist @@ -0,0 +1,2 @@ +_gp_disp + A diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_hesiod.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_hesiod.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_hesiod.abilist @@ -0,0 +1,2 @@ +_gp_disp + A diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nis.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nis.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nis.abilist @@ -0,0 +1,2 @@ +_gp_disp + A diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nisplus.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nisplus.abilist new file mode 100644 index 000000000..426f583ba --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libnss_nisplus.abilist @@ -0,0 +1,2 @@ +_gp_disp + A |