summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2017-11-08 22:59:32 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-12-22 15:48:27 +0100
commitc14bf2d020e09d1bf4992853100281ec83ec45f6 (patch)
tree45b3c632fb9a41de6d6e68494df7d0d802ec3600
parent6c3698c60a9a3887cdd4bea01dd040b9f1371ccb (diff)
glibc: no longer mess with memcpy
On the Tegras not using NEON for memcpy resulted in higher memory bandwidth. Let's verify this before forward porting the patch. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-rw-r--r--recipes-core/glibc/glibc-2.22/0001-memcpy-don-t-use-optimized-for-VFP-NEON-versions.patch27
-rw-r--r--recipes-core/glibc/glibc_2.%.bbappend2
2 files changed, 17 insertions, 12 deletions
diff --git a/recipes-core/glibc/glibc-2.22/0001-memcpy-don-t-use-optimized-for-VFP-NEON-versions.patch b/recipes-core/glibc/glibc-2.22/0001-memcpy-don-t-use-optimized-for-VFP-NEON-versions.patch
index dd4964b..dd3c217 100644
--- a/recipes-core/glibc/glibc-2.22/0001-memcpy-don-t-use-optimized-for-VFP-NEON-versions.patch
+++ b/recipes-core/glibc/glibc-2.22/0001-memcpy-don-t-use-optimized-for-VFP-NEON-versions.patch
@@ -1,4 +1,4 @@
-From a086ff98ad0bb996241037689188caf394f6c633 Mon Sep 17 00:00:00 2001
+From 3cb3db5c200bb0cfdcfdfcd64e385895e47725f8 Mon Sep 17 00:00:00 2001
From: Max Krummenacher <max.krummenacher@toradex.com>
Date: Fri, 12 Jun 2015 13:27:55 +0200
Subject: [PATCH] memcpy: don't use optimized for VFP/NEON versions
@@ -10,31 +10,32 @@ __memcpy_neon or __memcpy_vfp.
Tests on Apalis iMX6 confirm this, although running only around 1.3 times faster.
---
sysdeps/arm/armv7/multiarch/Makefile | 3 ---
- sysdeps/arm/armv7/multiarch/ifunc-impl-list.c | 18 ------------------
+ sysdeps/arm/armv7/multiarch/ifunc-impl-list.c | 20 --------------------
sysdeps/arm/armv7/multiarch/memcpy.S | 17 -----------------
sysdeps/arm/armv7/multiarch/memcpy_neon.S | 9 ---------
sysdeps/arm/armv7/multiarch/memcpy_vfp.S | 7 -------
- 5 files changed, 54 deletions(-)
+ 5 files changed, 56 deletions(-)
diff --git a/sysdeps/arm/armv7/multiarch/Makefile b/sysdeps/arm/armv7/multiarch/Makefile
-index e834cc9..e69de29 100644
+index 9e1e61c21a..e69de29bb2 100644
--- a/sysdeps/arm/armv7/multiarch/Makefile
+++ b/sysdeps/arm/armv7/multiarch/Makefile
@@ -1,3 +0,0 @@
-ifeq ($(subdir),string)
--sysdep_routines += memcpy_neon memcpy_vfp
+-sysdep_routines += memcpy_neon memcpy_vfp memchr_neon
-endif
diff --git a/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c b/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
-index 2515418..322eae6 100644
+index 8f33156317..1d11e03290 100644
--- a/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
+++ b/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
-@@ -31,25 +31,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
+@@ -31,30 +31,10 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
{
size_t i = 0;
- bool use_neon = true;
-#ifdef __ARM_NEON__
-# define __memcpy_neon memcpy
+-# define __memchr_neon memchr
-#else
- use_neon = (GLRO(dl_hwcap) & HWCAP_ARM_NEON) != 0;
-#endif
@@ -53,9 +54,13 @@ index 2515418..322eae6 100644
-#endif
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_arm));
+ IFUNC_IMPL (i, name, memchr,
+- IFUNC_IMPL_ADD (array, i, memchr, use_neon, __memchr_neon)
+ IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_noneon));
+
return i;
diff --git a/sysdeps/arm/armv7/multiarch/memcpy.S b/sysdeps/arm/armv7/multiarch/memcpy.S
-index c4f4e80..9ee4d73 100644
+index 8a53bdaf91..e1e13f8d2f 100644
--- a/sysdeps/arm/armv7/multiarch/memcpy.S
+++ b/sysdeps/arm/armv7/multiarch/memcpy.S
@@ -23,37 +23,20 @@
@@ -97,7 +102,7 @@ index c4f4e80..9ee4d73 100644
/* 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/sysdeps/arm/armv7/multiarch/memcpy_neon.S b/sysdeps/arm/armv7/multiarch/memcpy_neon.S
-index e60d1cc..e69de29 100644
+index e60d1cc0e1..e69de29bb2 100644
--- a/sysdeps/arm/armv7/multiarch/memcpy_neon.S
+++ b/sysdeps/arm/armv7/multiarch/memcpy_neon.S
@@ -1,9 +0,0 @@
@@ -111,7 +116,7 @@ index e60d1cc..e69de29 100644
-#define MEMCPY_NEON
-#include "memcpy_impl.S"
diff --git a/sysdeps/arm/armv7/multiarch/memcpy_vfp.S b/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
-index e008c04..e69de29 100644
+index e008c041ed..e69de29bb2 100644
--- a/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
+++ b/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
@@ -1,7 +0,0 @@
@@ -123,5 +128,5 @@ index e008c04..e69de29 100644
-# include "memcpy_impl.S"
-#endif
--
-1.9.3
+2.12.0
diff --git a/recipes-core/glibc/glibc_2.%.bbappend b/recipes-core/glibc/glibc_2.%.bbappend
index 777b538..b7b36fa 100644
--- a/recipes-core/glibc/glibc_2.%.bbappend
+++ b/recipes-core/glibc/glibc_2.%.bbappend
@@ -1,2 +1,2 @@
FILESEXTRAPATHS_prepend := "${THISDIR}/glibc-2.22:"
-SRC_URI_append = " file://0001-memcpy-don-t-use-optimized-for-VFP-NEON-versions.patch"
+#SRC_URI_append = " file://0001-memcpy-don-t-use-optimized-for-VFP-NEON-versions.patch"