diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2014-06-24 06:42:31 -0500 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2014-07-07 14:46:44 -0500 |
commit | d6f68bbef4427850c2901728a1d13efc0e687297 (patch) | |
tree | 8198f2273262075c7372e681c09d06593e2e027e | |
parent | 3f17b03b0947fbe2482e2776f654056d1d5ba093 (diff) | |
download | glibc-d6f68bbef4427850c2901728a1d13efc0e687297.zip glibc-d6f68bbef4427850c2901728a1d13efc0e687297.tar.gz glibc-d6f68bbef4427850c2901728a1d13efc0e687297.tar.bz2 |
PowerPC: memmove default implementation cleanup
This patch removes the powerpc specific logic in memmove and instead
include default implementation with MEMCPY_OK_FOR_FWD_MEMMOVE defined.
This lead in a increase performance, since the constraints to use
memcpy in powerpc code are too restrictive and memcpy can be used for
any forward memmove.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | sysdeps/powerpc/memmove.c | 99 |
2 files changed, 5 insertions, 97 deletions
@@ -1,5 +1,8 @@ 2014-07-07 Adhemerval Zanella <azanella@linux.vnet.ibm.com> + * sysdeps/powerpc/memmove.c (memmove): Cleanup impplementation to use + glibc default one. + * sysdeps/powerpc/bits/link.h [_CALL_ELF]: Guard check for __ELF_NATIVE_CLASS equal to 64. diff --git a/sysdeps/powerpc/memmove.c b/sysdeps/powerpc/memmove.c index 98ffb14..9c62ecb 100644 --- a/sysdeps/powerpc/memmove.c +++ b/sysdeps/powerpc/memmove.c @@ -18,100 +18,5 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, see <http://www.gnu.org/licenses/>. */ -#include <string.h> -#include <memcopy.h> - -/* All this is so that bcopy.c can #include - this file after defining some things. */ -#ifndef a1 -#define a1 dest /* First arg is DEST. */ -#define a1const -#define a2 src /* Second arg is SRC. */ -#define a2const const -#undef memmove -#endif -#if !defined(RETURN) || !defined(rettype) -#define RETURN(s) return (s) /* Return DEST. */ -#define rettype void * -#endif - -#ifndef MEMMOVE -#define MEMMOVE memmove -#endif - -rettype -MEMMOVE (a1, a2, len) - a1const void *a1; - a2const void *a2; - size_t 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) - __builtin_memcpy (dest, src, len); - - /* This test makes the forward copying code be used whenever possible. - Reduces the working set. */ - else if (dstp - srcp >= len) /* *Unsigned* compare! */ - { - /* Copy from the beginning to the end. */ - - /* If there not too few bytes to copy, use word copy. */ - if (len >= OP_T_THRES) - { - /* Copy just a few bytes to make DSTP aligned. */ - len -= (-dstp) % OPSIZ; - BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ); - - /* Copy whole pages from SRCP to DSTP by virtual address - manipulation, as much as possible. */ - - PAGE_COPY_FWD_MAYBE (dstp, srcp, len, len); - - /* Copy from SRCP to DSTP taking advantage of the known - alignment of DSTP. Number of bytes remaining is put - in the third argument, i.e. in LEN. This number may - vary from machine to machine. */ - - WORD_COPY_FWD (dstp, srcp, len, len); - - /* Fall out and copy the tail. */ - } - - /* There are just a few bytes to copy. Use byte memory operations. */ - BYTE_COPY_FWD (dstp, srcp, len); - } - else - { - /* Copy from the end to the beginning. */ - srcp += len; - dstp += len; - - /* If there not too few bytes to copy, use word copy. */ - if (len >= OP_T_THRES) - { - /* Copy just a few bytes to make DSTP aligned. */ - len -= dstp % OPSIZ; - BYTE_COPY_BWD (dstp, srcp, dstp % OPSIZ); - - /* Copy from SRCP to DSTP taking advantage of the known - alignment of DSTP. Number of bytes remaining is put - in the third argument, i.e. in LEN. This number may - vary from machine to machine. */ - - WORD_COPY_BWD (dstp, srcp, len, len); - - /* Fall out and copy the tail. */ - } - - /* There are just a few bytes to copy. Use byte memory operations. */ - BYTE_COPY_BWD (dstp, srcp, len); - } - - RETURN (dest); -} -#ifndef memmove -libc_hidden_builtin_def (memmove) -#endif +#define MEMCPY_OK_FOR_FWD_MEMMOVE 1 +#include <string/memmove.c> |