This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 4/4] [Powerpc] tune/optimize memmove/wordcopy. Call memcpywhen appropriate.


[Powerpc] tune/optimize memmove/wordcopy. Call memcpy when appropriate.

Call the optimized __builtin_memcpy function if our memmove memory ranges do
not overlap.  This allows us to take advantage of the powerpc optimized memcpy
code, and gives a healthy throughput boost.

2012-04-03  Will Schmidt <will_schmidt@vnet.ibm.com>

	* sysdeps/powerpc/memmove.c: Call __builtin_memcopy() when source and
	destination ranges are known not to overlap.
---
 sysdeps/powerpc/memmove.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/sysdeps/powerpc/memmove.c b/sysdeps/powerpc/memmove.c
index c74e556..80de8ac 100644
--- a/sysdeps/powerpc/memmove.c
+++ b/sysdeps/powerpc/memmove.c
@@ -50,6 +50,10 @@ MEMMOVE (a1, a2, len)
   unsigned long int dstp = (long int) dest;
   unsigned long int srcp = (long int) src;
 
+  /* If there is no overlap between ranges, call the builtin memcpy.  */
+  if ( (dstp >= (srcp + len)) || (srcp > (dstp + len)) )
+    return __builtin_memcpy (dest, src, len);
+
   /* This test makes the forward copying code be used whenever possible.
      Reduces the working set.  */
   if (dstp - srcp >= len)	/* *Unsigned* compare!  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]