diff options
author | Wilco Dijkstra <wdijkstr@arm.com> | 2020-07-15 16:55:07 +0100 |
---|---|---|
committer | Wilco Dijkstra <wdijkstr@arm.com> | 2020-07-15 16:55:07 +0100 |
commit | 4a733bf375238a6a595033b5785cea7f27d61307 (patch) | |
tree | e649148bc3df2bf6ce1d256b5d9c8dc6d70b4195 /sysdeps/aarch64/multiarch/ifunc-impl-list.c | |
parent | 34f0d01d5e43c7dedd002ab47f6266dfb5b79c22 (diff) | |
download | glibc-4a733bf375238a6a595033b5785cea7f27d61307.tar.gz glibc-4a733bf375238a6a595033b5785cea7f27d61307.tar.xz glibc-4a733bf375238a6a595033b5785cea7f27d61307.zip |
AArch64: Add optimized Q-register memcpy
Add a new memcpy using 128-bit Q registers - this is faster on modern cores and reduces codesize. Similar to the generic memcpy, small cases include copies up to 32 bytes. 64-128 byte copies are split into two cases to improve performance of 64-96 byte copies. Large copies align the source rather than the destination. bench-memcpy-random is ~9% faster than memcpy_falkor on Neoverse N1, so make this memcpy the default on N1 (on Centriq it is 15% faster than memcpy_falkor). Passes GLIBC regression tests. Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
Diffstat (limited to 'sysdeps/aarch64/multiarch/ifunc-impl-list.c')
-rw-r--r-- | sysdeps/aarch64/multiarch/ifunc-impl-list.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c index b7da62c3b0..4b004ac47f 100644 --- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c +++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c @@ -42,11 +42,13 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_thunderx) IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_thunderx2) IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_falkor) + IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_simd) 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_simd) IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_generic)) IFUNC_IMPL (i, name, memset, /* Enable this on non-falkor processors too so that other cores |