about summary refs log tree commit diff
path: root/sysdeps/aarch64/multiarch/Makefile
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@sourceware.org>2018-08-15 23:01:33 +0530
committerSiddhesh Poyarekar <siddhesh@sourceware.org>2018-08-15 23:01:33 +0530
commit436e4d5b965abe592d26150cb518accf9ded8fe4 (patch)
tree59ff500e4e7c2f63c1eb393f8dbc0af2ebbb774e /sysdeps/aarch64/multiarch/Makefile
parent126c4e3f804881f9fbc4eb71787f41793d2d7be5 (diff)
downloadglibc-436e4d5b965abe592d26150cb518accf9ded8fe4.tar.gz
glibc-436e4d5b965abe592d26150cb518accf9ded8fe4.tar.xz
glibc-436e4d5b965abe592d26150cb518accf9ded8fe4.zip
[aarch64] Add an ASIMD variant of strlen for falkor
This variant of strlen uses vector loads and operations to reduce the
size of the code and also eliminate the non-ascii fallback.  This
works very well for falkor because of its two vector units and
efficient vector ops.  In the best case it reduces latency of cases in
bench-strlen by 48%, with gains throughout the benchmark.
strlen-walk also sees uniform gains in the 5%-15% range.

Overall the routine appears to work better than the stock one for falkor
regardless of the benchmark, length of string or cache state.

The same cannot be said of a53 and a72 though.  a53 performance was
greatly reduced and for a72 it was a bit of a mixed bag, slightly on the
negative side but I reckon it might be fast in some situations.

	* sysdeps/aarch64/strlen.S (__strlen): Rename to STRLEN.
	[!STRLEN](STRLEN): Set to __strlen.
	* sysdeps/aarch64/multiarch/strlen.c: New file.
	* sysdeps/aarch64/multiarch/strlen_generic.S: Likewise.
	* sysdeps/aarch64/multiarch/strlen_asimd.S: Likewise.
	* sysdeps/aarch64/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add strlen.
	* sysdeps/aarch64/multiarch/Makefile (sysdep_routines): Add
	strlen_generic and strlen_asimd.

Reviewed-By: szabolcs.nagy@arm.com
CC: pinskia@gmail.com
Diffstat (limited to 'sysdeps/aarch64/multiarch/Makefile')
-rw-r--r--sysdeps/aarch64/multiarch/Makefile3
1 files changed, 2 insertions, 1 deletions
diff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile
index 57ffdf7238..b1a5f59fcd 100644
--- a/sysdeps/aarch64/multiarch/Makefile
+++ b/sysdeps/aarch64/multiarch/Makefile
@@ -1,4 +1,5 @@
 ifeq ($(subdir),string)
 sysdep_routines += memcpy_generic memcpy_thunderx memcpy_thunderx2 \
-		   memcpy_falkor memmove_falkor memset_generic memset_falkor
+		   memcpy_falkor memmove_falkor memset_generic memset_falkor \
+		   strlen_generic strlen_asimd
 endif