[PATCH] aarch64: Improve strncmp for mutually misaligned inputs
Wilco Dijkstra
Wilco.Dijkstra@arm.com
Wed Mar 14 14:04:00 GMT 2018
Hi,
Why not use lsr limit_wd, limit, 3? We have 3-operand shifts on AArch64!
--- a/sysdeps/aarch64/strncmp.S
+++ b/sysdeps/aarch64/strncmp.S
@@ -208,13 +208,15 @@ L(done):
/* Align the SRC1 to a dword by doing a bytewise compare and then do
the dword loop. */
L(try_misaligned_words):
- mov limit_wd, limit, lsr #3
+ mov limit_wd, limit
+ lsr limit_wd, limit_wd, #3
cbz count, L(do_misaligned)
neg count, count
and count, count, #7
sub limit, limit, count
- mov limit_wd, limit, lsr #3
+ mov limit_wd, limit
+ lsr limit_wd, limit_wd, #3
Also it seems to me it would be far easier to subtract 8 from limit in the main loop.
This means we don't ever need limit_wd, and avoids having to do this later:
/* We found a difference or a NULL before the limit was reached. */
and limit, limit, #7
cbz limit, L(not_limit)
Wilco
More information about the Libc-alpha
mailing list