about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/generic/strtol.c16
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