summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-04-05 16:23:31 -0600
committerTom Rini <trini@konsulko.com>2017-05-09 20:19:04 -0400
commitcb0eae8cf8aaca76910dee4c7eb536d0814d1bd2 (patch)
tree8e4bb6377bcafcd626ed0bcbcdf960fad5cd1ceb /lib
parent20b429b013c97cb3d253274003d52bbe8c9c4da1 (diff)
downloadu-boot-cb0eae8cf8aaca76910dee4c7eb536d0814d1bd2.tar.gz
u-boot-cb0eae8cf8aaca76910dee4c7eb536d0814d1bd2.tar.bz2
u-boot-cb0eae8cf8aaca76910dee4c7eb536d0814d1bd2.zip
string: Use memcpy() within memmove() when we can
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>
Diffstat (limited to 'lib')
-rw-r--r--lib/string.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/lib/string.c b/lib/string.c
index c1a28c14ce..e94021c468 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -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--)