]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Improve memccpy performance by using memchr/memcpy/mempcpy rather than
authorWilco Dijkstra <wdijkstr@arm.com>
Wed, 5 Aug 2015 14:24:06 +0000 (15:24 +0100)
committerWilco Dijkstra <wdijkstr@arm.com>
Wed, 5 Aug 2015 15:24:03 +0000 (16:24 +0100)
a byte loop. Overall performance on bench-memccpy is > 2x faster when
using the C implementation of memchr and an optimized memcpy.

ChangeLog
string/memccpy.c

index 5f40e4e01501be0004c8189263429e00cde3f420..65592c3e80754b5689b0d9c91980b3bee87e2efe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-08-05  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       * string/memccpy.c (memccpy):
+       Improve performance by using memchr/memcpy/__mempcpy.
+
 2015-08-05  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * string/strncpy.c (strncpy):
index d9ed6975ef8c22eea72bfcbb2e99a3e8e5227cba..0987c84aa03145c9cd44031aac788cd0187cb392 100644 (file)
 void *
 __memccpy (void *dest, const void *src, int c, size_t n)
 {
-  const char *s = src;
-  char *d = dest;
-  const char x = c;
-  size_t i = n;
+  void *p = memchr (src, c, n);
 
-  while (i-- > 0)
-    if ((*d++ = *s++) == x)
-      return d;
+  if (p != NULL)
+    return __mempcpy (dest, src, p - src + 1);
 
+  memcpy (dest, src, n);
   return NULL;
 }