summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMurtuza Raja <mraja@codeaurora.org>2021-09-20 18:22:45 +0530
committerMurtuza Raja <mraja@codeaurora.org>2021-09-20 18:23:47 +0530
commitd8e5075e054b546362c80b8ea6f591f58258fc48 (patch)
tree24da14f29877d7618c1ab21f17223524c8deeadc
parent800092dfdc59acdf5a7594e0576e26d4e4d9dcac (diff)
parent51c3fe77e08b835cada85d5018c1d6cd60ab241e (diff)
Merge commit '51c3fe77e08b835cada85d5018c1d6cd60ab241e' into ks-aosp.lnx.12.0.r1-rel
Change-Id: Ib9eed8793a616536d446a813118fa0d072031701
-rw-r--r--libc/Android.bp14
-rw-r--r--libc/arch-arm64/dynamic_function_dispatch.cpp18
-rw-r--r--libc/arch-arm64/generic/bionic/memmove.S6
-rw-r--r--libc/arch-arm64/kryo785/bionic/memcpy.S4
-rw-r--r--libc/arch-arm64/kryo785/bionic/memmove.S8
-rw-r--r--libc/arch-arm64/static_function_dispatch.S2
6 files changed, 32 insertions, 20 deletions
diff --git a/libc/Android.bp b/libc/Android.bp
index 44b443611..8c05704a0 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -887,6 +887,9 @@ cc_library_static {
"arch-arm64/generic/bionic/memmove.S",
"arch-arm64/generic/bionic/memset.S",
"arch-arm64/generic/bionic/wmemmove.S",
+ "arch-arm64/kryo785/bionic/__memcpy.S",
+ "arch-arm64/kryo785/bionic/memcpy.S",
+ "arch-arm64/kryo785/bionic/memmove.S",
"arch-arm64/bionic/__bionic_clone.S",
"arch-arm64/bionic/_exit_with_stack_teardown.S",
@@ -914,17 +917,6 @@ cc_library_static {
"arch-arm64/generic/bionic/wmemmove.S",
],
},
- kryo785: {
- srcs: [
- "arch-arm64/kryo785/bionic/__memcpy.S",
- "arch-arm64/kryo785/bionic/memcpy.S",
- "arch-arm64/kryo785/bionic/memmove.S",
- ],
- exclude_srcs: [
- "arch-arm64/generic/bionic/memcpy.S",
- "arch-arm64/generic/bionic/memmove.S",
- ],
- },
},
x86: {
diff --git a/libc/arch-arm64/dynamic_function_dispatch.cpp b/libc/arch-arm64/dynamic_function_dispatch.cpp
index 83e5ca4da..aa0767c76 100644
--- a/libc/arch-arm64/dynamic_function_dispatch.cpp
+++ b/libc/arch-arm64/dynamic_function_dispatch.cpp
@@ -41,6 +41,24 @@ DEFINE_IFUNC_FOR(memchr) {
}
}
+typedef void* memcpy_func(void*, const void*, size_t);
+DEFINE_IFUNC_FOR(memcpy) {
+ if (arg->_hwcap2 & HWCAP2_BTI) {
+ RETURN_FUNC(memcpy_func, memcpy_opt);
+ } else {
+ RETURN_FUNC(memcpy_func, memcpy_generic);
+ }
+}
+
+typedef void* memmove_func(void*, const void*, size_t);
+DEFINE_IFUNC_FOR(memmove) {
+ if (arg->_hwcap2 & HWCAP2_BTI) {
+ RETURN_FUNC(memmove_func, memmove_opt);
+ } else {
+ RETURN_FUNC(memmove_func, memmove_generic);
+ }
+}
+
typedef int stpcpy_func(char*, const char*);
DEFINE_IFUNC_FOR(stpcpy) {
if (arg->_hwcap2 & HWCAP2_MTE) {
diff --git a/libc/arch-arm64/generic/bionic/memmove.S b/libc/arch-arm64/generic/bionic/memmove.S
index 0f752ea4a..5ed1c2e8f 100644
--- a/libc/arch-arm64/generic/bionic/memmove.S
+++ b/libc/arch-arm64/generic/bionic/memmove.S
@@ -87,7 +87,7 @@
ENTRY(wmemmove)
lsl count, count, #2
#else
-ENTRY(memmove)
+ENTRY(memmove_generic)
#endif
sub tmp1, dstin, src
cmp count, 96
@@ -149,9 +149,9 @@ ENTRY(memmove)
#if defined(WMEMMOVE)
END(wmemmove)
#else
-END(memmove)
+END(memmove_generic)
-ALIAS_SYMBOL(memcpy, memmove)
+ALIAS_SYMBOL(memcpy_generic, memmove_generic)
#endif
NOTE_GNU_PROPERTY()
diff --git a/libc/arch-arm64/kryo785/bionic/memcpy.S b/libc/arch-arm64/kryo785/bionic/memcpy.S
index a1a0df607..006d7cb64 100644
--- a/libc/arch-arm64/kryo785/bionic/memcpy.S
+++ b/libc/arch-arm64/kryo785/bionic/memcpy.S
@@ -30,8 +30,8 @@
#include <private/bionic_asm.h>
-ENTRY(memcpy)
+ENTRY(memcpy_opt)
#include "memcpy_neon.S"
-END(memcpy)
+END(memcpy_opt)
NOTE_GNU_PROPERTY()
diff --git a/libc/arch-arm64/kryo785/bionic/memmove.S b/libc/arch-arm64/kryo785/bionic/memmove.S
index 1522e3343..af997cfec 100644
--- a/libc/arch-arm64/kryo785/bionic/memmove.S
+++ b/libc/arch-arm64/kryo785/bionic/memmove.S
@@ -84,10 +84,10 @@
*/
#if defined(WMEMMOVE)
-ENTRY(wmemmove)
+ENTRY(wmemmove_opt)
lsl count, count, #2
#else
-ENTRY(memmove)
+ENTRY(memmove_opt)
#endif
sub tmp1, dstin, src
cmp count, 96
@@ -147,9 +147,9 @@ ENTRY(memmove)
3: ret
#if defined(WMEMMOVE)
-END(wmemmove)
+END(wmemmove_opt)
#else
-END(memmove)
+END(memmove_opt)
#endif
diff --git a/libc/arch-arm64/static_function_dispatch.S b/libc/arch-arm64/static_function_dispatch.S
index 161ece8ea..b51db019b 100644
--- a/libc/arch-arm64/static_function_dispatch.S
+++ b/libc/arch-arm64/static_function_dispatch.S
@@ -42,5 +42,7 @@ FUNCTION_DELEGATE(strcpy, __strcpy_aarch64_mte)
FUNCTION_DELEGATE(strlen, __strlen_aarch64_mte)
FUNCTION_DELEGATE(strrchr, __strrchr_aarch64_mte)
FUNCTION_DELEGATE(strncmp, __strncmp_aarch64_mte)
+FUNCTION_DELEGATE(memcpy, memcpy_generic)
+FUNCTION_DELEGATE(memmove, memmove_generic)
NOTE_GNU_PROPERTY()