From 19218757e638bac1ff7193ff54fdee143833e2ac Mon Sep 17 00:00:00 2001 From: Maxim Kuvyrkov Date: Tue, 6 Nov 2012 17:47:55 -0800 Subject: [PATCH] Use memcpy in memmove when possible --- ChangeLog | 4 ++++ ports/ChangeLog.mips | 4 ++++ ports/sysdeps/mips/memmove.c | 23 +++++++++++++++++++++++ string/memmove.c | 6 +++++- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 ports/sysdeps/mips/memmove.c diff --git a/ChangeLog b/ChangeLog index 96328a0..0f09cd0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-11-06 Maxim Kuvyrkov + + * string/memmove.c: Use memcpy when possible. + 2012-11-06 Andreas Jaeger * po/eo.po: Update from translation team. diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index 8dc4893..cdf4ea3 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,3 +1,7 @@ +2012-11-06 Maxim Kuvyrkov + + * sysdeps/mips/memmove.c: New file. Use memcpy for forward memmove. + 2012-11-05 Joseph Myers * 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 0000000..1426ec3 --- /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 . + + 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 + . */ + +/* MIPS' implementation of memcpy is safe to use for memmove. */ +#define MEMCPY_OK_FOR_FWD_MEMMOVE 1 +#include diff --git a/string/memmove.c b/string/memmove.c index ede27ff..bf7dcc1 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 { -- 2.7.4