AArch64: Remove zva_128 from memset

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
e162ab2bf1, remove this special
case too.

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

Reviewed-by: Andrew Pinski <quic_apinski@quicinc.com>
(cherry picked from commit a08d9a52f9)
This commit is contained in:
Wilco Dijkstra 2024-11-25 18:43:08 +00:00
parent c9a142e9c1
commit 47e6fe3e92
1 changed files with 1 additions and 24 deletions

View File

@ -104,7 +104,7 @@ L(set_long):
mrs zva_val, dczid_el0 mrs zva_val, dczid_el0
and zva_val, zva_val, 31 and zva_val, zva_val, 31
cmp zva_val, 4 /* ZVA size is 64 bytes. */ cmp zva_val, 4 /* ZVA size is 64 bytes. */
b.ne L(zva_128) b.ne L(no_zva)
#endif #endif
stp q0, q0, [dst, 32] stp q0, q0, [dst, 32]
bic dst, dstin, 63 bic dst, dstin, 63
@ -137,28 +137,5 @@ L(no_zva_loop):
stp q0, q0, [dstend, -32] stp q0, q0, [dstend, -32]
ret 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) END (MEMSET)
libc_hidden_builtin_def (MEMSET) libc_hidden_builtin_def (MEMSET)