AArch64: Add optimized Q-register memcpy
commit4a733bf375238a6a595033b5785cea7f27d61307
authorWilco Dijkstra <wdijkstr@arm.com>
Wed, 15 Jul 2020 15:55:07 +0000 (15 16:55 +0100)
committerWilco Dijkstra <wdijkstr@arm.com>
Wed, 15 Jul 2020 15:55:07 +0000 (15 16:55 +0100)
treee649148bc3df2bf6ce1d256b5d9c8dc6d70b4195
parent34f0d01d5e43c7dedd002ab47f6266dfb5b79c22
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>
sysdeps/aarch64/multiarch/Makefile
sysdeps/aarch64/multiarch/ifunc-impl-list.c
sysdeps/aarch64/multiarch/memcpy.c
sysdeps/aarch64/multiarch/memcpy_advsimd.S [new file with mode: 0644]
sysdeps/aarch64/multiarch/memmove.c