When there is no overlap between src and dst use optimised memcpy if it is available.
Signed-off-by: Paul Burton <paul.bur...@imgtec.com> Signed-off-by: PrasannaKumar Muralidharan <prasannatsmku...@gmail.com> --- This change is a small part of a patch [1] from Paul Burton. I have added his Signed-off by. I do not know whether it is correct. Please let me know if it has to be changed, I will send a v2. This patch is boot tested with qemu for MIPS architecture by removing mips's memmove routine. This patch does not contain MIPS changes. I will try to find out why [1] was not taken already and figure out what to do. 1. https://patchwork.linux-mips.org/patch/14517/ lib/string.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/string.c b/lib/string.c index 9921dc2..462ab7b 100644 --- a/lib/string.c +++ b/lib/string.c @@ -825,6 +825,17 @@ void *memmove(void *dest, const void *src, size_t count) char *tmp; const char *s; +#ifdef __HAVE_ARCH_MEMCPY + /* Use optimised memcpy when there is no overlap */ + const char *s_end = src + count; + const char *d = dest; + char *d_end = dest + count; + + s = src; + if ((d_end <= s) || (s_end <= d)) + return memcpy(dest, src, count); +#endif /* __HAVE_ARCH_MEMCPY */ + if (dest <= src) { tmp = dest; s = src; -- 2.10.0