diff options
author | Murtuza Raja <mraja@codeaurora.org> | 2021-09-20 18:22:45 +0530 |
---|---|---|
committer | Murtuza Raja <mraja@codeaurora.org> | 2021-09-20 18:23:47 +0530 |
commit | d8e5075e054b546362c80b8ea6f591f58258fc48 (patch) | |
tree | 24da14f29877d7618c1ab21f17223524c8deeadc | |
parent | 800092dfdc59acdf5a7594e0576e26d4e4d9dcac (diff) | |
parent | 51c3fe77e08b835cada85d5018c1d6cd60ab241e (diff) |
Merge commit '51c3fe77e08b835cada85d5018c1d6cd60ab241e' into ks-aosp.lnx.12.0.r1-rel
Change-Id: Ib9eed8793a616536d446a813118fa0d072031701
-rw-r--r-- | libc/Android.bp | 14 | ||||
-rw-r--r-- | libc/arch-arm64/dynamic_function_dispatch.cpp | 18 | ||||
-rw-r--r-- | libc/arch-arm64/generic/bionic/memmove.S | 6 | ||||
-rw-r--r-- | libc/arch-arm64/kryo785/bionic/memcpy.S | 4 | ||||
-rw-r--r-- | libc/arch-arm64/kryo785/bionic/memmove.S | 8 | ||||
-rw-r--r-- | libc/arch-arm64/static_function_dispatch.S | 2 |
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() |