From: Pádraig Brady 
Date: Sun, 11 Jul 2010 13:28:55 +0000 (+0200)
Subject: unistr/u8-strchr: Optimize ASCII argument case.
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a365288bcee80018a436ca15d5c9d272e772bb37;p=pspp
unistr/u8-strchr: Optimize ASCII argument case.
---
diff --git a/ChangeLog b/ChangeLog
index 1207beff4b..28b0b0f484 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-07-11  Pádraig Brady  
+            Bruno Haible  
+
+	unistr/u8-strchr: Optimize ASCII argument case.
+	* lib/unistr/u8-strchr.c (u8_strchr): For ASCII arguments, use strchr.
+
 2010-07-08  Paul Eggert  
 
 	(x)memcoll: minor tweaks
diff --git a/lib/unistr/u8-strchr.c b/lib/unistr/u8-strchr.c
index 3be14c7983..0b5e993d1d 100644
--- a/lib/unistr/u8-strchr.c
+++ b/lib/unistr/u8-strchr.c
@@ -21,6 +21,8 @@
 /* Specification.  */
 #include "unistr.h"
 
+#include 
+
 uint8_t *
 u8_strchr (const uint8_t *s, ucs4_t uc)
 {
@@ -30,18 +32,31 @@ u8_strchr (const uint8_t *s, ucs4_t uc)
     {
       uint8_t c0 = uc;
 
-      for (;; s++)
+      if (false)
+        {
+          /* Unoptimized code.  */
+          for (;; s++)
+            {
+              if (*s == c0)
+                break;
+              if (*s == 0)
+                goto notfound;
+            }
+          return (uint8_t *) s;
+        }
+      else
         {
-          if (*s == c0)
-            break;
-          if (*s == 0)
-            goto notfound;
+          /* Optimized code.
+             strchr() is often so well optimized, that it's worth the
+             added function call.  */
+          return (uint8_t *) strchr ((const char *) s, c0);
         }
-      return (uint8_t *) s;
     }
   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;