]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
AArch64: Improve strchrnul
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Wed, 11 Jan 2023 13:52:23 +0000 (13:52 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Tue, 9 Apr 2024 17:39:28 +0000 (18:39 +0100)
Unroll the main loop, which improves performance slightly.

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
(cherry picked from commit 09ebd8549b2ce5a3a6c0c7c5f3e62227faf50a99)

sysdeps/aarch64/strchrnul.S

index 9de680b63e64c86c25b878024530210d11180918..9856fc588762f7df9e839859728f34f64cf39add 100644 (file)
@@ -70,14 +70,22 @@ ENTRY (__strchrnul)
 
        .p2align 4
 L(loop):
-       ldr     qdata, [src, 16]!
+       ldr     qdata, [src, 16]
+       cmeq    vhas_chr.16b, vdata.16b, vrepchr.16b
+       cmhs    vhas_chr.16b, vhas_chr.16b, vdata.16b
+       umaxp   vend.16b, vhas_chr.16b, vhas_chr.16b
+       fmov    tmp1, dend
+       cbnz    tmp1, L(end)
+       ldr     qdata, [src, 32]!
        cmeq    vhas_chr.16b, vdata.16b, vrepchr.16b
        cmhs    vhas_chr.16b, vhas_chr.16b, vdata.16b
        umaxp   vend.16b, vhas_chr.16b, vhas_chr.16b
        fmov    tmp1, dend
        cbz     tmp1, L(loop)
-
+       sub     src, src, 16
+L(end):
        shrn    vend.8b, vhas_chr.8h, 4         /* 128->64 */
+       add     src, src, 16
        fmov    tmp1, dend
 #ifndef __AARCH64EB__
        rbit    tmp1, tmp1