diff options
author | Maxim Kuvyrkov <maxim@codesourcery.com> | 2012-11-06 17:47:55 -0800 |
---|---|---|
committer | Maxim Kuvyrkov <maxim@codesourcery.com> | 2012-11-06 17:47:55 -0800 |
commit | 19218757e638bac1ff7193ff54fdee143833e2ac (patch) | |
tree | 775b394eb065fec013a2cac3fa733ba0859fca87 | |
parent | c5f457212413392210bb9c9cf610d0eb1d4e9c09 (diff) | |
download | glibc-19218757e638bac1ff7193ff54fdee143833e2ac.tar.gz glibc-19218757e638bac1ff7193ff54fdee143833e2ac.tar.xz glibc-19218757e638bac1ff7193ff54fdee143833e2ac.zip |
Use memcpy in memmove when possible
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | ports/ChangeLog.mips | 4 | ||||
-rw-r--r-- | ports/sysdeps/mips/memmove.c | 23 | ||||
-rw-r--r-- | string/memmove.c | 6 |
4 files changed, 36 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 96328a0548..0f09cd06c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-11-06 Maxim Kuvyrkov <maxim@codesourcery.com> + + * string/memmove.c: Use memcpy when possible. + 2012-11-06 Andreas Jaeger <aj@suse.de> * po/eo.po: Update from translation team. diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index 8dc4893b03..cdf4ea3c54 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,3 +1,7 @@ +2012-11-06 Maxim Kuvyrkov <maxim@codesourcery.com> + + * sysdeps/mips/memmove.c: New file. Use memcpy for forward memmove. + 2012-11-05 Joseph Myers <joseph@codesourcery.com> * sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h diff --git a/ports/sysdeps/mips/memmove.c b/ports/sysdeps/mips/memmove.c new file mode 100644 index 0000000000..1426ec32eb --- /dev/null +++ b/ports/sysdeps/mips/memmove.c @@ -0,0 +1,23 @@ +/* Copy memory to memory until the specified number of bytes + has been copied. Overlap is handled correctly. + Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* MIPS' implementation of memcpy is safe to use for memmove. */ +#define MEMCPY_OK_FOR_FWD_MEMMOVE 1 +#include <string/memmove.c> diff --git a/string/memmove.c b/string/memmove.c index ede27ffcf2..bf7dcc1627 100644 --- a/string/memmove.c +++ b/string/memmove.c @@ -1,6 +1,6 @@ /* Copy memory to memory until the specified number of bytes has been copied. Overlap is handled correctly. - Copyright (C) 1991, 1995, 1996, 1997, 2003 Free Software Foundation, Inc. + Copyright (C) 1991-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Torbjorn Granlund (tege@sics.se). @@ -55,6 +55,9 @@ MEMMOVE (a1, a2, len) { /* Copy from the beginning to the end. */ +#if MEMCPY_OK_FOR_FWD_MEMMOVE + dest = memcpy (dest, src, len); +#else /* If there not too few bytes to copy, use word copy. */ if (len >= OP_T_THRES) { @@ -79,6 +82,7 @@ MEMMOVE (a1, a2, len) /* There are just a few bytes to copy. Use byte memory operations. */ BYTE_COPY_FWD (dstp, srcp, len); +#endif /* MEMCPY_OK_FOR_FWD_MEMMOVE */ } else { |