diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-09-17 16:47:14 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-09-17 16:47:14 +0000 |
commit | b8682397ab2db1aed7f25d0a0c7c81134a97c8c7 (patch) | |
tree | 76b6a9cbc7456f7ee53fe40cc86e0c7fe5e87f7a | |
parent | 46f74e1deee549b41160d353ce0c8f7db555d36c (diff) | |
download | glibc-b8682397ab2db1aed7f25d0a0c7c81134a97c8c7.zip glibc-b8682397ab2db1aed7f25d0a0c7c81134a97c8c7.tar.gz glibc-b8682397ab2db1aed7f25d0a0c7c81134a97c8c7.tar.bz2 |
Reduce number of constants in __finite* (bug 15384).
Bug 15384 notes that in __finite, two different constants are used
that could be the same constant (the result only depends on the
exponent of the floating-point representation), and that using the
same constant is better for architectures where constants need loading
from a constant pool. This patch implements that change.
Tested for x86_64, mips64 and powerpc.
[BZ #15384]
* sysdeps/ieee754/dbl-64/s_finite.c (FINITE): Use same constant as
bit-mask as in subtraction.
* sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c (__finite):
Likewise.
* sysdeps/ieee754/flt-32/s_finitef.c (FINITEF): Likewise.
* sysdeps/ieee754/ldbl-128/s_finitel.c (__finitel): Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_finitel.c (__finitel): Likewise.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | NEWS | 14 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_finite.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/s_finitef.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_finitel.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/s_finitel.c | 2 |
7 files changed, 21 insertions, 12 deletions
@@ -1,5 +1,14 @@ 2015-09-17 Joseph Myers <joseph@codesourcery.com> + [BZ #15384] + * sysdeps/ieee754/dbl-64/s_finite.c (FINITE): Use same constant as + bit-mask as in subtraction. + * sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c (__finite): + Likewise. + * sysdeps/ieee754/flt-32/s_finitef.c (FINITEF): Likewise. + * sysdeps/ieee754/ldbl-128/s_finitel.c (__finitel): Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_finitel.c (__finitel): Likewise. + [BZ #18951] * sysdeps/ieee754/dbl-64/e_gamma_r.c (__ieee754_gamma_r): Force underflow exception for small results. @@ -9,13 +9,13 @@ Version 2.23 * The following bugs are resolved with this release: - 2542, 2543, 2558, 2898, 4404, 6803, 14341, 14912, 15786, 15918, 16141, - 16296, 16415, 16517, 16519, 16520, 16521, 16734, 16973, 16985, 17243, - 17244, 17787, 17905, 18084, 18086, 18240, 18265, 18370, 18421, 18480, - 18525, 18595, 18610, 18618, 18647, 18661, 18674, 18675, 18681, 18757, - 18778, 18781, 18787, 18789, 18790, 18795, 18796, 18820, 18823, 18824, - 18857, 18863, 18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, - 18961, 18966, 18967, 18977. + 2542, 2543, 2558, 2898, 4404, 6803, 14341, 14912, 15384, 15786, 15918, + 16141, 16296, 16415, 16517, 16519, 16520, 16521, 16734, 16973, 16985, + 17243, 17244, 17787, 17905, 18084, 18086, 18240, 18265, 18370, 18421, + 18480, 18525, 18595, 18610, 18618, 18647, 18661, 18674, 18675, 18681, + 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796, 18820, 18823, + 18824, 18857, 18863, 18870, 18872, 18873, 18875, 18887, 18921, 18951, + 18952, 18961, 18966, 18967, 18977. * 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/dbl-64/s_finite.c b/sysdeps/ieee754/dbl-64/s_finite.c index 49986bb..2b0ed50 100644 --- a/sysdeps/ieee754/dbl-64/s_finite.c +++ b/sysdeps/ieee754/dbl-64/s_finite.c @@ -32,7 +32,7 @@ int FINITE(double x) { int32_t hx; GET_HIGH_WORD (hx, x); - return (int) ((u_int32_t) ((hx & 0x7fffffff) - 0x7ff00000) >> 31); + return (int) ((u_int32_t) ((hx & 0x7ff00000) - 0x7ff00000) >> 31); } hidden_def (__finite) weak_alias (__finite, finite) diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c index fcf2e6d..a155a5e 100644 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c +++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c @@ -24,7 +24,7 @@ __finite(double x) { int64_t lx; EXTRACT_WORDS64(lx,x); - return (int)((uint64_t)((lx&INT64_C(0x7fffffffffffffff))-INT64_C(0x7ff0000000000000))>>63); + return (int)((uint64_t)((lx&INT64_C(0x7ff0000000000000))-INT64_C(0x7ff0000000000000))>>63); } hidden_def (__finite) weak_alias (__finite, finite) diff --git a/sysdeps/ieee754/flt-32/s_finitef.c b/sysdeps/ieee754/flt-32/s_finitef.c index 4ea270a..4c5b339 100644 --- a/sysdeps/ieee754/flt-32/s_finitef.c +++ b/sysdeps/ieee754/flt-32/s_finitef.c @@ -35,7 +35,7 @@ int FINITEF(float x) { int32_t ix; GET_FLOAT_WORD(ix,x); - return (int)((u_int32_t)((ix&0x7fffffff)-0x7f800000)>>31); + return (int)((u_int32_t)((ix&0x7f800000)-0x7f800000)>>31); } hidden_def (__finitef) weak_alias (__finitef, finitef) diff --git a/sysdeps/ieee754/ldbl-128/s_finitel.c b/sysdeps/ieee754/ldbl-128/s_finitel.c index f862a44..ea8a9ba 100644 --- a/sysdeps/ieee754/ldbl-128/s_finitel.c +++ b/sysdeps/ieee754/ldbl-128/s_finitel.c @@ -29,7 +29,7 @@ int __finitel(long double x) { int64_t hx; GET_LDOUBLE_MSW64(hx,x); - return (int)((u_int64_t)((hx&0x7fffffffffffffffLL) + return (int)((u_int64_t)((hx&0x7fff000000000000LL) -0x7fff000000000000LL)>>63); } hidden_def (__finitel) diff --git a/sysdeps/ieee754/ldbl-128ibm/s_finitel.c b/sysdeps/ieee754/ldbl-128ibm/s_finitel.c index b562ce6..3b9e3de 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_finitel.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_finitel.c @@ -34,7 +34,7 @@ ___finitel (long double x) xhi = ldbl_high (x); EXTRACT_WORDS64 (hx, xhi); - hx &= 0x7fffffffffffffffLL; + hx &= 0x7ff0000000000000LL; hx -= 0x7ff0000000000000LL; return hx >> 63; } |