unistr/u8-strchr: Optimize non-ASCII argument case.
authorBruno Haible <bruno@clisp.org>
Sun, 18 Jul 2010 15:23:36 +0000 (17:23 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 18 Jul 2010 15:23:36 +0000 (17:23 +0200)
ChangeLog
lib/unistr/u8-strchr.c

index 72b38a4..8fb3e77 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-07-18  Bruno Haible  <bruno@clisp.org>
+
+       unistr/u8-strchr: Optimize non-ASCII argument case.
+       * lib/unistr/u8-strchr.c (u8_strchr): Compare the last byte first,
+       because the first byte often matches anyway.
+       Reported by Pádraig Brady <P@draigbrady.com>.
+
 2010-07-15  Karl Berry  <karl@gnu.org>
 
        * config/srclist.txt (fdl.texi): only one copy, from gnustandards.
index 0b5e993..3ee2465 100644 (file)
@@ -68,7 +68,7 @@ u8_strchr (const uint8_t *s, ucs4_t uc)
             {
               if (s[1] == 0)
                 goto notfound;
-              if (*s == c0 && s[1] == c1)
+              if (s[1] == c1 && *s == c0)
                 break;
             }
           return (uint8_t *) s;
@@ -86,7 +86,7 @@ u8_strchr (const uint8_t *s, ucs4_t uc)
             {
               if (s[2] == 0)
                 goto notfound;
-              if (*s == c0 && s[1] == c1 && s[2] == c2)
+              if (s[2] == c2 && s[1] == c1 && *s == c0)
                 break;
             }
           return (uint8_t *) s;
@@ -105,7 +105,7 @@ u8_strchr (const uint8_t *s, ucs4_t uc)
             {
               if (s[3] == 0)
                 goto notfound;
-              if (*s == c0 && s[1] == c1 && s[2] == c2 && s[3] == c3)
+              if (s[3] == c3 && s[2] == c2 && s[1] == c1 && *s == c0)
                 break;
             }
           return (uint8_t *) s;