diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | sysdeps/generic/strtol.c | 16 |
2 files changed, 9 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index ff4605adbc..c8d5e9aa94 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2001-08-18 Ulrich Drepper <drepper@redhat.com> + * sysdeps/generic/strtol.c: Little optimizations. Add some + __builtin_expect. + * conform/conformtest.pl: <inttypes.h> test required <stddef.h>. * wcsmbs/wchar.h (wcwdith): Change parameter type to wchar_t. diff --git a/sysdeps/generic/strtol.c b/sysdeps/generic/strtol.c index 0f48b632eb..d2e09c8404 100644 --- a/sysdeps/generic/strtol.c +++ b/sysdeps/generic/strtol.c @@ -263,7 +263,7 @@ INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM) in the format described in <locale.h>. */ const char *grouping; - if (group) + if (__builtin_expect (group, 0)) { grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); if (*grouping <= 0 || *grouping == CHAR_MAX) @@ -305,22 +305,18 @@ INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM) /* Skip white space. */ while (ISSPACE (*s)) ++s; - if (*s == L_('\0')) + if (__builtin_expect (*s == L_('\0'), 0)) goto noconv; /* Check for a sign. */ + negative = 0; if (*s == L_('-')) { negative = 1; ++s; } else if (*s == L_('+')) - { - negative = 0; - ++s; - } - else - negative = 0; + ++s; /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ if (*s == L_('0')) @@ -343,7 +339,7 @@ INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM) if (base != 10) grouping = NULL; - if (grouping) + if (__builtin_expect (grouping != NULL, 0)) { # ifndef USE_WIDE_CHAR thousands_len = strlen (thousands); @@ -506,7 +502,7 @@ INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM) overflow = 1; #endif - if (overflow) + if (__builtin_expect (overflow, 0)) { __set_errno (ERANGE); #if UNSIGNED |