changeset 33145:3142ae3b5707

unistr/u8-strchr: Optimize ASCII argument case.
author Pádraig Brady <P@draigBrady.com>
date Sun, 11 Jul 2010 15:28:55 +0200
parents 2d23d5e447a1
children e2bb4f6b8d0a
files ChangeLog lib/unistr/u8-strchr.c
diffstat 2 files changed, 27 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Jul 08 18:16:40 2010 -0700
+++ b/ChangeLog	Sun Jul 11 15:28:55 2010 +0200
@@ -1,3 +1,9 @@
+2010-07-11  Pádraig Brady  <P@draigBrady.com>
+            Bruno Haible  <bruno@clisp.org>
+
+	unistr/u8-strchr: Optimize ASCII argument case.
+	* lib/unistr/u8-strchr.c (u8_strchr): For ASCII arguments, use strchr.
+
 2010-07-08  Paul Eggert  <eggert@cs.ucla.edu>
 
 	(x)memcoll: minor tweaks
--- a/lib/unistr/u8-strchr.c	Thu Jul 08 18:16:40 2010 -0700
+++ b/lib/unistr/u8-strchr.c	Sun Jul 11 15:28:55 2010 +0200
@@ -21,6 +21,8 @@
 /* Specification.  */
 #include "unistr.h"
 
+#include <string.h>
+
 uint8_t *
 u8_strchr (const uint8_t *s, ucs4_t uc)
 {
@@ -30,18 +32,31 @@
     {
       uint8_t c0 = uc;
 
-      for (;; s++)
+      if (false)
         {
-          if (*s == c0)
-            break;
-          if (*s == 0)
-            goto notfound;
+          /* Unoptimized code.  */
+          for (;; s++)
+            {
+              if (*s == c0)
+                break;
+              if (*s == 0)
+                goto notfound;
+            }
+          return (uint8_t *) s;
         }
-      return (uint8_t *) s;
+      else
+        {
+          /* Optimized code.
+             strchr() is often so well optimized, that it's worth the
+             added function call.  */
+          return (uint8_t *) strchr ((const char *) s, c0);
+        }
     }
   else
     switch (u8_uctomb_aux (c, uc, 6))
       {
+      /* Loops equivalent to strstr, optimized for a specific length (2, 3, 4)
+         of the needle.  */
       case 2:
         if (*s == 0)
           goto notfound;