This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.17-659-g5d5ef5d
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 13 May 2013 23:13:35 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.17-659-g5d5ef5d
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 5d5ef5dbfc5be7aec31e5d33d28b2e93dc4b8a8d (commit)
from 68fc074ca056cd0b854031a3a855ba2c98c9d866 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=5d5ef5dbfc5be7aec31e5d33d28b2e93dc4b8a8d
commit 5d5ef5dbfc5be7aec31e5d33d28b2e93dc4b8a8d
Author: Roland McGrath <roland@hack.frob.com>
Date: Mon May 13 15:41:46 2013 -0700
ARM: Make multiarch memcpy always use NEON when compiler does
diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index 372096e..2565518 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -1,3 +1,15 @@
+2013-05-13 Roland McGrath <roland@hack.frob.com>
+
+ * sysdeps/arm/armv7/multiarch/memcpy.S [__ARM_NEON__]: Don't define
+ memcpy here, just __memcpy_arm and __aeabi_memcpy*.
+ * sysdeps/arm/armv7/multiarch/memcpy_neon.S [__ARM_NEON__]:
+ Define memcpy here, not __memcpy_neon.
+ * sysdeps/arm/armv7/multiarch/memcpy_vfp.S [__ARM_NEON__]:
+ Define nothing here.
+ * sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
+ (__libc_ifunc_impl_list) [__ARM_NEON__]: Don't list __memcpy_vfp;
+ use memcpy name for NEON implementation.
+
2013-05-08 Will Newton <will.newton@linaro.org>
* sysdeps/arm/armv7/multiarch/Makefile: New file.
diff --git a/ports/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c b/ports/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
index 0dcdcd6..9c2487f 100644
--- a/ports/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
+++ b/ports/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
@@ -35,9 +35,16 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
IFUNC_IMPL (i, name, memcpy,
IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_ARM_NEON,
- __memcpy_neon)
+#ifdef __ARM_NEON__
+ memcpy
+#else
+ __memcpy_neon
+#endif
+ )
+#ifndef __ARM_NEON__
IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_ARM_VFP,
__memcpy_vfp)
+#endif
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_arm));
return i;
diff --git a/ports/sysdeps/arm/armv7/multiarch/memcpy.S b/ports/sysdeps/arm/armv7/multiarch/memcpy.S
index 1b12465..81c01d3 100644
--- a/ports/sysdeps/arm/armv7/multiarch/memcpy.S
+++ b/ports/sysdeps/arm/armv7/multiarch/memcpy.S
@@ -22,27 +22,29 @@
#include <sysdep.h>
#include <rtld-global-offsets.h>
-#if !defined NOT_IN_libc
+#ifndef NOT_IN_libc
+/* Under __ARM_NEON__, memcpy_neon.S defines the name memcpy. */
+# ifndef __ARM_NEON__
.text
ENTRY(memcpy)
.type memcpy, %gnu_indirect_function
-#ifdef __SOFTFP__
+# ifdef __SOFTFP__
ldr r1, .Lmemcpy_arm
tst r0, #HWCAP_ARM_VFP
ldrne r1, .Lmemcpy_vfp
-#else
+# else
ldr r1, .Lmemcpy_vfp
-#endif
+# endif
tst r0, #HWCAP_ARM_NEON
ldrne r1, .Lmemcpy_neon
1:
add r0, r1, pc
DO_RET(lr)
-#ifdef __SOFTFP__
+# ifdef __SOFTFP__
.Lmemcpy_arm:
.long C_SYMBOL_NAME(__memcpy_arm) - 1b - PC_OFS
-#endif
+# endif
.Lmemcpy_neon:
.long C_SYMBOL_NAME(__memcpy_neon) - 1b - PC_OFS
.Lmemcpy_vfp:
@@ -51,6 +53,7 @@ ENTRY(memcpy)
END(memcpy)
libc_hidden_builtin_def (memcpy)
+#endif /* Not __ARM_NEON__. */
/* These versions of memcpy are defined not to clobber any VFP or NEON
registers so they must always call the ARM variant of the memcpy code. */
diff --git a/ports/sysdeps/arm/armv7/multiarch/memcpy_neon.S b/ports/sysdeps/arm/armv7/multiarch/memcpy_neon.S
index c0ef1f8..e60d1cc 100644
--- a/ports/sysdeps/arm/armv7/multiarch/memcpy_neon.S
+++ b/ports/sysdeps/arm/armv7/multiarch/memcpy_neon.S
@@ -1,3 +1,9 @@
+#ifdef __ARM_NEON__
+/* Under __ARM_NEON__, this file defines memcpy directly. */
+libc_hidden_builtin_def (memcpy)
+#else
+# define memcpy __memcpy_neon
+#endif
+
#define MEMCPY_NEON
-#define memcpy __memcpy_neon
#include "memcpy_impl.S"
diff --git a/ports/sysdeps/arm/armv7/multiarch/memcpy_vfp.S b/ports/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
index d21b702..e008c04 100644
--- a/ports/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
+++ b/ports/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
@@ -1,3 +1,7 @@
-#define MEMCPY_VFP
-#define memcpy __memcpy_vfp
-#include "memcpy_impl.S"
+/* Under __ARM_NEON__, memcpy_neon.S defines memcpy directly
+ and the __memcpy_vfp code will never be used. */
+#ifndef __ARM_NEON__
+# define MEMCPY_VFP
+# define memcpy __memcpy_vfp
+# include "memcpy_impl.S"
+#endif
-----------------------------------------------------------------------
Summary of changes:
ports/ChangeLog.arm | 12 ++++++++++++
.../sysdeps/arm/armv7/multiarch/ifunc-impl-list.c | 9 ++++++++-
ports/sysdeps/arm/armv7/multiarch/memcpy.S | 15 +++++++++------
ports/sysdeps/arm/armv7/multiarch/memcpy_neon.S | 8 +++++++-
ports/sysdeps/arm/armv7/multiarch/memcpy_vfp.S | 10 +++++++---
5 files changed, 43 insertions(+), 11 deletions(-)
hooks/post-receive
--
GNU C Library master sources