mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 13:00:06 +00:00
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.
This commit is contained in:
parent
46f74e1dee
commit
b8682397ab
@ -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.
|
||||
|
14
NEWS
14
NEWS
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user