diff options
author | Anton Youdkevitch <anton.youdkevitch@bell-sw.com> | 2019-05-03 11:01:34 -0700 |
---|---|---|
committer | Steve Ellcey <sellcey@caviumnetworks.com> | 2019-05-03 11:01:34 -0700 |
commit | 32e902a94e24fc5a00168d0df3301098704c61fb (patch) | |
tree | 88bd3588b0e08141855220a21467f230366b42db /sysdeps/aarch64/multiarch/ifunc-impl-list.c | |
parent | ac3da35de5cf113edfd514c2fc8ccbaed4536aaf (diff) | |
download | glibc-32e902a94e24fc5a00168d0df3301098704c61fb.tar.gz glibc-32e902a94e24fc5a00168d0df3301098704c61fb.tar.xz glibc-32e902a94e24fc5a00168d0df3301098704c61fb.zip |
aarch64: thunderx2 memmove performance improvements
The performance improvement is about 20%-30% for larger cases and about 1%-5% for smaller cases. Used SIMD load/store instead of GPR for large overlapping forward moves. Reused existing memcpy implementation for smaller or overlapping backward moves. Fixed the existing memcpy implementation to allow it to deal with the overlapping case. Simplified loop tails in the memcpy implementation - use branchless overlapping sequence of fixed length load/stores instead of branching depending on the size. A cleanup/optimization converting str's to stp's. Added __memmove_thunderx2 to the list of the available implementations.
Diffstat (limited to 'sysdeps/aarch64/multiarch/ifunc-impl-list.c')
-rw-r--r-- | sysdeps/aarch64/multiarch/ifunc-impl-list.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c index 5f433627de..10ff7d4bae 100644 --- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c +++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c @@ -45,6 +45,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_generic)) IFUNC_IMPL (i, name, memmove, IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_thunderx) + IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_thunderx2) IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_falkor) IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_generic)) IFUNC_IMPL (i, name, memset, |