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 /sysdeps | |
parent | 3f17b03b0947fbe2482e2776f654056d1d5ba093 (diff) | |
download | glibc-d6f68bbef4427850c2901728a1d13efc0e687297.tar.gz glibc-d6f68bbef4427850c2901728a1d13efc0e687297.tar.xz glibc-d6f68bbef4427850c2901728a1d13efc0e687297.zip |
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.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/powerpc/memmove.c | 99 |
1 files changed, 2 insertions, 97 deletions
diff --git a/sysdeps/powerpc/memmove.c b/sysdeps/powerpc/memmove.c index 98ffb14794..9c62ecb5cb 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> |