]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
AArch64: Remove zva_128 from memset
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Mon, 25 Nov 2024 18:43:08 +0000 (18:43 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Fri, 29 Nov 2024 13:27:13 +0000 (13:27 +0000)
Remove ZVA 128 support from memset - the new memset no longer
guarantees count >= 256, which can result in underflow and a
crash if ZVA size is 128 ([1]).  Since only one CPU uses a ZVA
size of 128 and its memcpy implementation was removed in commit
e162ab2bf1b82c40f29e1925986582fa07568ce8, remove this special
case too.

[1] https://sourceware.org/pipermail/libc-alpha/2024-November/161626.html

Reviewed-by: Andrew Pinski <quic_apinski@quicinc.com>
sysdeps/aarch64/memset.S

index b76dde1557ed8fb195c24a13a06f8d0d9ab126fa..8402219b1874b00a10ea460e278edbf54c6140f6 100644 (file)
@@ -103,7 +103,7 @@ L(set_long):
        mrs     zva_val, dczid_el0
        and     zva_val, zva_val, 31
        cmp     zva_val, 4              /* ZVA size is 64 bytes.  */
-       b.ne    L(zva_128)
+       b.ne    L(no_zva)
 #endif
        stp     q0, q0, [dst, 32]
        bic     dst, dstin, 63
@@ -136,28 +136,5 @@ L(no_zva_loop):
        stp     q0, q0, [dstend, -32]
        ret
 
-#ifndef ZVA64_ONLY
-       .p2align 4
-L(zva_128):
-       cmp     zva_val, 5              /* ZVA size is 128 bytes.  */
-       b.ne    L(no_zva)
-
-       stp     q0, q0, [dst, 32]
-       stp     q0, q0, [dst, 64]
-       stp     q0, q0, [dst, 96]
-       bic     dst, dst, 127
-       sub     count, dstend, dst      /* Count is now 128 too large.  */
-       sub     count, count, 128 + 128 /* Adjust count and bias for loop.  */
-1:     add     dst, dst, 128
-       dc      zva, dst
-       subs    count, count, 128
-       b.hi    1b
-       stp     q0, q0, [dstend, -128]
-       stp     q0, q0, [dstend, -96]
-       stp     q0, q0, [dstend, -64]
-       stp     q0, q0, [dstend, -32]
-       ret
-#endif
-
 END (MEMSET)
 libc_hidden_builtin_def (MEMSET)