1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

* stdlib/strtod_l.c (____STRTOF_INTERNAL): Optimize use of TOLOWER.

This commit is contained in:
Ulrich Drepper
2007-02-21 21:54:19 +00:00
parent cdfd61e1ee
commit 9cf147d84e
2 changed files with 22 additions and 14 deletions

View File

@ -1,5 +1,7 @@
2007-02-21 Ulrich Drepper <drepper@redhat.com> 2007-02-21 Ulrich Drepper <drepper@redhat.com>
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Optimize use of TOLOWER.
[BZ #3325] [BZ #3325]
* sysdeps/i386/fpu/e_fmodf.S: Revert last changes, keep using fprem. * sysdeps/i386/fpu/e_fmodf.S: Revert last changes, keep using fprem.
* sysdeps/i386/fpu/e_fmodl.c: Likewise. * sysdeps/i386/fpu/e_fmodl.c: Likewise.

View File

@ -563,7 +563,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
else if (c < L_('0') || c > L_('9')) else if (c < L_('0') || c > L_('9'))
{ {
/* Check for `INF' or `INFINITY'. */ /* Check for `INF' or `INFINITY'. */
if (TOLOWER_C (c) == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0) CHAR_TYPE lowc = TOLOWER_C (c);
if (lowc == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0)
{ {
/* Return +/- infinity. */ /* Return +/- infinity. */
if (endptr != NULL) if (endptr != NULL)
@ -574,7 +576,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
} }
if (TOLOWER_C (c) == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0) if (lowc == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0)
{ {
/* Return NaN. */ /* Return NaN. */
FLOAT retval = NAN; FLOAT retval = NAN;
@ -588,7 +590,8 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
do do
++cp; ++cp;
while ((*cp >= L_('0') && *cp <= L_('9')) while ((*cp >= L_('0') && *cp <= L_('9'))
|| (TOLOWER (*cp) >= L_('a') && TOLOWER (*cp) <= L_('z')) || ({ CHAR_TYPE lo = TOLOWER (*cp);
lo >= L_('a') && lo <= L_('z'); })
|| *cp == L_('_')); || *cp == L_('_'));
if (*cp != L_(')')) if (*cp != L_(')'))
@ -664,9 +667,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
/* If no other digit but a '0' is found the result is 0.0. /* If no other digit but a '0' is found the result is 0.0.
Return current read pointer. */ Return current read pointer. */
CHAR_TYPE lowc = TOLOWER (c);
if (!((c >= L_('0') && c <= L_('9')) if (!((c >= L_('0') && c <= L_('9'))
|| (base == 16 && ((CHAR_TYPE) TOLOWER (c) >= L_('a') || (base == 16 && lowc >= L_('a') && lowc <= L_('f'))
&& (CHAR_TYPE) TOLOWER (c) <= L_('f')))
|| ( || (
#ifdef USE_WIDE_CHAR #ifdef USE_WIDE_CHAR
c == (wint_t) decimal c == (wint_t) decimal
@ -682,11 +685,11 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
&& (base != 16 && (base != 16
|| cp != start_of_digits || cp != start_of_digits
|| (cp[decimal_len] >= L_('0') && cp[decimal_len] <= L_('9')) || (cp[decimal_len] >= L_('0') && cp[decimal_len] <= L_('9'))
|| ((CHAR_TYPE) TOLOWER (cp[decimal_len]) >= L_('a') || ({ CHAR_TYPE lo = TOLOWER (cp[decimal_len]);
&& (CHAR_TYPE) TOLOWER (cp[decimal_len]) <= L_('f')))) lo >= L_('a') && lo <= L_('f'); })))
|| (base == 16 && (cp != start_of_digits || (base == 16 && (cp != start_of_digits
&& (CHAR_TYPE) TOLOWER (c) == L_('p'))) && lowc == L_('p')))
|| (base != 16 && (CHAR_TYPE) TOLOWER (c) == L_('e')))) || (base != 16 && lowc == L_('e'))))
{ {
#ifdef USE_WIDE_CHAR #ifdef USE_WIDE_CHAR
tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands, tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
@ -707,8 +710,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
while (1) while (1)
{ {
if ((c >= L_('0') && c <= L_('9')) if ((c >= L_('0') && c <= L_('9'))
|| (base == 16 && (wint_t) TOLOWER (c) >= L_('a') || (base == 16
&& (wint_t) TOLOWER (c) <= L_('f'))) && ({ CHAR_TYPE lo = TOLOWER (c);
lo >= L_('a') && lo <= L_('f'); })))
++dig_no; ++dig_no;
else else
{ {
@ -794,7 +798,8 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
cp += decimal_len; cp += decimal_len;
c = *cp; c = *cp;
while ((c >= L_('0') && c <= L_('9')) || while ((c >= L_('0') && c <= L_('9')) ||
(base == 16 && TOLOWER (c) >= L_('a') && TOLOWER (c) <= L_('f'))) (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c);
lo >= L_('a') && lo <= L_('f'); })))
{ {
if (c != L_('0') && lead_zero == -1) if (c != L_('0') && lead_zero == -1)
lead_zero = dig_no - int_no; lead_zero = dig_no - int_no;
@ -807,8 +812,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
expp = cp; expp = cp;
/* Read exponent. */ /* Read exponent. */
if ((base == 16 && TOLOWER (c) == L_('p')) lowc = TOLOWER (c);
|| (base != 16 && TOLOWER (c) == L_('e'))) if ((base == 16 && lowc == L_('p'))
|| (base != 16 && lowc == L_('e')))
{ {
int exp_negative = 0; int exp_negative = 0;