string: Use memcpy() within memmove() when we can
authorSimon Glass <sjg@chromium.org>
Wed, 5 Apr 2017 22:23:31 +0000 (16:23 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 10 May 2017 00:19:04 +0000 (20:19 -0400)
A common use of memmove() can be handled by memcpy(). Also memcpy()
includes an optimisation for large sizes: it copies a word at a time. So
we can get a speed-up by calling memcpy() to handle our move in this case.

Update memmove() to call memcpy() if the destination is before the source.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
lib/string.c

index c1a28c14ced51dd58424a10d2af0e1444207a80a..e94021c4680a118aed754662eb2bf2f0b2e50d4a 100644 (file)
@@ -511,16 +511,9 @@ void * memmove(void * dest,const void *src,size_t count)
 {
        char *tmp, *s;
 
-       if (src == dest)
-               return dest;
-
        if (dest <= src) {
-               tmp = (char *) dest;
-               s = (char *) src;
-               while (count--)
-                       *tmp++ = *s++;
-               }
-       else {
+               memcpy(dest, src, count);
+       } else {
                tmp = (char *) dest + count;
                s = (char *) src + count;
                while (count--)