mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-25 04:01:10 +00:00
Cleanup a few cases where isinf is used to get the signbit to improve the readability and maintainability and allow inlining.
2015-09-18 Wilco Dijkstra <wdijkstr@arm.com> * math/w_tgamma.c (__ieee754_gamma_r): Use explicit sign check. * math/w_tgammaf.c (__ieee754_gammaf_r): Likewise. * math/w_tgammal.c (__ieee754_gammal_r): Likewise. * stdio-common/printf_fp.c (___printf_fp): Use signbit to get the sign. Use isinf macro to allow inlining. * stdio-common/printf_fphex.c (__printf_fphex): Likewise. * stdio-common/printf_size.c (__printf_size): Likewise.
This commit is contained in:
parent
3cc652e951
commit
89faa0340a
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
|
||||||
|
|
||||||
|
* math/w_tgamma.c (__ieee754_gamma_r): Use explicit sign check.
|
||||||
|
* math/w_tgammaf.c (__ieee754_gammaf_r): Likewise.
|
||||||
|
* math/w_tgammal.c (__ieee754_gammal_r): Likewise.
|
||||||
|
* stdio-common/printf_fp.c (___printf_fp):
|
||||||
|
Use signbit to get the sign. Use isinf macro to allow inlining.
|
||||||
|
* stdio-common/printf_fphex.c (__printf_fphex): Likewise.
|
||||||
|
* stdio-common/printf_size.c (__printf_size): Likewise.
|
||||||
|
|
||||||
2015-09-18 Mike Frysinger <vapier@gentoo.org>
|
2015-09-18 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* timezone/Makefile ($(testdata)/XT%): Call $(make-target-directory).
|
* timezone/Makefile ($(testdata)/XT%): Call $(make-target-directory).
|
||||||
|
@ -26,7 +26,7 @@ __tgamma(double x)
|
|||||||
double y = __ieee754_gamma_r(x,&local_signgam);
|
double y = __ieee754_gamma_r(x,&local_signgam);
|
||||||
|
|
||||||
if(__glibc_unlikely (!isfinite (y) || y == 0)
|
if(__glibc_unlikely (!isfinite (y) || y == 0)
|
||||||
&& (isfinite (x) || isinf (x) < 0)
|
&& (isfinite (x) || (isinf (x) && x < 0.0))
|
||||||
&& _LIB_VERSION != _IEEE_) {
|
&& _LIB_VERSION != _IEEE_) {
|
||||||
if (x == 0.0)
|
if (x == 0.0)
|
||||||
return __kernel_standard(x,x,50); /* tgamma pole */
|
return __kernel_standard(x,x,50); /* tgamma pole */
|
||||||
|
@ -24,7 +24,7 @@ __tgammaf(float x)
|
|||||||
float y = __ieee754_gammaf_r(x,&local_signgam);
|
float y = __ieee754_gammaf_r(x,&local_signgam);
|
||||||
|
|
||||||
if(__glibc_unlikely (!isfinite (y) || y == 0)
|
if(__glibc_unlikely (!isfinite (y) || y == 0)
|
||||||
&& (isfinite (x) || isinf (x) < 0)
|
&& (isfinite (x) || (isinf (x) && x < 0.0))
|
||||||
&& _LIB_VERSION != _IEEE_) {
|
&& _LIB_VERSION != _IEEE_) {
|
||||||
if (x == (float)0.0)
|
if (x == (float)0.0)
|
||||||
/* tgammaf pole */
|
/* tgammaf pole */
|
||||||
|
@ -29,7 +29,7 @@ __tgammal(long double x)
|
|||||||
long double y = __ieee754_gammal_r(x,&local_signgam);
|
long double y = __ieee754_gammal_r(x,&local_signgam);
|
||||||
|
|
||||||
if(__glibc_unlikely (!isfinite (y) || y == 0)
|
if(__glibc_unlikely (!isfinite (y) || y == 0)
|
||||||
&& (isfinite (x) || isinf (x) < 0)
|
&& (isfinite (x) || (isinf (x) && x < 0.0))
|
||||||
&& _LIB_VERSION != _IEEE_) {
|
&& _LIB_VERSION != _IEEE_) {
|
||||||
if(x==0.0)
|
if(x==0.0)
|
||||||
return __kernel_standard_l(x,x,250); /* tgamma pole */
|
return __kernel_standard_l(x,x,250); /* tgamma pole */
|
||||||
|
@ -332,7 +332,6 @@ ___printf_fp (FILE *fp,
|
|||||||
fpnum.ldbl = *(const long double *) args[0];
|
fpnum.ldbl = *(const long double *) args[0];
|
||||||
|
|
||||||
/* Check for special values: not a number or infinity. */
|
/* Check for special values: not a number or infinity. */
|
||||||
int res;
|
|
||||||
if (isnan (fpnum.ldbl))
|
if (isnan (fpnum.ldbl))
|
||||||
{
|
{
|
||||||
is_neg = signbit (fpnum.ldbl);
|
is_neg = signbit (fpnum.ldbl);
|
||||||
@ -347,9 +346,9 @@ ___printf_fp (FILE *fp,
|
|||||||
wspecial = L"nan";
|
wspecial = L"nan";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((res = __isinfl (fpnum.ldbl)))
|
else if (isinf (fpnum.ldbl))
|
||||||
{
|
{
|
||||||
is_neg = res < 0;
|
is_neg = signbit (fpnum.ldbl);
|
||||||
if (isupper (info->spec))
|
if (isupper (info->spec))
|
||||||
{
|
{
|
||||||
special = "INF";
|
special = "INF";
|
||||||
@ -377,11 +376,9 @@ ___printf_fp (FILE *fp,
|
|||||||
fpnum.dbl = *(const double *) args[0];
|
fpnum.dbl = *(const double *) args[0];
|
||||||
|
|
||||||
/* Check for special values: not a number or infinity. */
|
/* Check for special values: not a number or infinity. */
|
||||||
int res;
|
|
||||||
if (isnan (fpnum.dbl))
|
if (isnan (fpnum.dbl))
|
||||||
{
|
{
|
||||||
union ieee754_double u = { .d = fpnum.dbl };
|
is_neg = signbit (fpnum.dbl);
|
||||||
is_neg = u.ieee.negative != 0;
|
|
||||||
if (isupper (info->spec))
|
if (isupper (info->spec))
|
||||||
{
|
{
|
||||||
special = "NAN";
|
special = "NAN";
|
||||||
@ -393,9 +390,9 @@ ___printf_fp (FILE *fp,
|
|||||||
wspecial = L"nan";
|
wspecial = L"nan";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((res = __isinf (fpnum.dbl)))
|
else if (isinf (fpnum.dbl))
|
||||||
{
|
{
|
||||||
is_neg = res < 0;
|
is_neg = signbit (fpnum.dbl);
|
||||||
if (isupper (info->spec))
|
if (isupper (info->spec))
|
||||||
{
|
{
|
||||||
special = "INF";
|
special = "INF";
|
||||||
|
@ -180,7 +180,7 @@ __printf_fphex (FILE *fp,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (__isinfl (fpnum.ldbl))
|
if (isinf (fpnum.ldbl))
|
||||||
{
|
{
|
||||||
if (isupper (info->spec))
|
if (isupper (info->spec))
|
||||||
{
|
{
|
||||||
@ -204,7 +204,6 @@ __printf_fphex (FILE *fp,
|
|||||||
/* Check for special values: not a number or infinity. */
|
/* Check for special values: not a number or infinity. */
|
||||||
if (isnan (fpnum.dbl.d))
|
if (isnan (fpnum.dbl.d))
|
||||||
{
|
{
|
||||||
negative = fpnum.dbl.ieee.negative != 0;
|
|
||||||
if (isupper (info->spec))
|
if (isupper (info->spec))
|
||||||
{
|
{
|
||||||
special = "NAN";
|
special = "NAN";
|
||||||
@ -218,8 +217,7 @@ __printf_fphex (FILE *fp,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int res = __isinf (fpnum.dbl.d);
|
if (isinf (fpnum.dbl.d))
|
||||||
if (res)
|
|
||||||
{
|
{
|
||||||
if (isupper (info->spec))
|
if (isupper (info->spec))
|
||||||
{
|
{
|
||||||
@ -231,11 +229,9 @@ __printf_fphex (FILE *fp,
|
|||||||
special = "inf";
|
special = "inf";
|
||||||
wspecial = L"inf";
|
wspecial = L"inf";
|
||||||
}
|
}
|
||||||
negative = res < 0;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
negative = signbit (fpnum.dbl.d);
|
|
||||||
}
|
}
|
||||||
|
negative = signbit (fpnum.dbl.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (special)
|
if (special)
|
||||||
|
@ -108,7 +108,7 @@ __printf_size (FILE *fp, const struct printf_info *info,
|
|||||||
fpnum;
|
fpnum;
|
||||||
const void *ptr = &fpnum;
|
const void *ptr = &fpnum;
|
||||||
|
|
||||||
int fpnum_sign = 0;
|
int is_neg = 0;
|
||||||
|
|
||||||
/* "NaN" or "Inf" for the special cases. */
|
/* "NaN" or "Inf" for the special cases. */
|
||||||
const char *special = NULL;
|
const char *special = NULL;
|
||||||
@ -117,7 +117,6 @@ __printf_size (FILE *fp, const struct printf_info *info,
|
|||||||
struct printf_info fp_info;
|
struct printf_info fp_info;
|
||||||
int done = 0;
|
int done = 0;
|
||||||
int wide = info->wide;
|
int wide = info->wide;
|
||||||
int res;
|
|
||||||
|
|
||||||
/* Fetch the argument value. */
|
/* Fetch the argument value. */
|
||||||
#ifndef __NO_LONG_DOUBLE_MATH
|
#ifndef __NO_LONG_DOUBLE_MATH
|
||||||
@ -130,11 +129,11 @@ __printf_size (FILE *fp, const struct printf_info *info,
|
|||||||
{
|
{
|
||||||
special = "nan";
|
special = "nan";
|
||||||
wspecial = L"nan";
|
wspecial = L"nan";
|
||||||
// fpnum_sign = 0; Already zero
|
// is_neg = 0; Already zero
|
||||||
}
|
}
|
||||||
else if ((res = __isinfl (fpnum.ldbl)))
|
else if (isinf (fpnum.ldbl))
|
||||||
{
|
{
|
||||||
fpnum_sign = res;
|
is_neg = signbit (fpnum.ldbl);
|
||||||
special = "inf";
|
special = "inf";
|
||||||
wspecial = L"inf";
|
wspecial = L"inf";
|
||||||
}
|
}
|
||||||
@ -155,11 +154,11 @@ __printf_size (FILE *fp, const struct printf_info *info,
|
|||||||
{
|
{
|
||||||
special = "nan";
|
special = "nan";
|
||||||
wspecial = L"nan";
|
wspecial = L"nan";
|
||||||
// fpnum_sign = 0; Already zero
|
// is_neg = 0; Already zero
|
||||||
}
|
}
|
||||||
else if ((res = __isinf (fpnum.dbl.d)))
|
else if (isinf (fpnum.dbl.d))
|
||||||
{
|
{
|
||||||
fpnum_sign = res;
|
is_neg = signbit (fpnum.dbl.d);
|
||||||
special = "inf";
|
special = "inf";
|
||||||
wspecial = L"inf";
|
wspecial = L"inf";
|
||||||
}
|
}
|
||||||
@ -175,14 +174,14 @@ __printf_size (FILE *fp, const struct printf_info *info,
|
|||||||
{
|
{
|
||||||
int width = info->prec > info->width ? info->prec : info->width;
|
int width = info->prec > info->width ? info->prec : info->width;
|
||||||
|
|
||||||
if (fpnum_sign < 0 || info->showsign || info->space)
|
if (is_neg || info->showsign || info->space)
|
||||||
--width;
|
--width;
|
||||||
width -= 3;
|
width -= 3;
|
||||||
|
|
||||||
if (!info->left && width > 0)
|
if (!info->left && width > 0)
|
||||||
PADN (' ', width);
|
PADN (' ', width);
|
||||||
|
|
||||||
if (fpnum_sign < 0)
|
if (is_neg)
|
||||||
outchar ('-');
|
outchar ('-');
|
||||||
else if (info->showsign)
|
else if (info->showsign)
|
||||||
outchar ('+');
|
outchar ('+');
|
||||||
|
Loading…
Reference in New Issue
Block a user