From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1895) id A51523847718; Wed, 10 Apr 2024 15:06:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A51523847718 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1712761594; bh=1iXUjYgXbgUR6+sbu+6+hmCNQjJyJBhqIdW5lsOGpZw=; h=From:To:Subject:Date:From; b=wbpmweM1D829jh9ZiGu+z1Jzjg7yGgm8FNDiUUguvAcMKmUfYmEsMndlS10NPeVqw Jy1phatPqyWDB28ilg/gDNFxtqAML+N4R7gdndA2DkXde9wdu4QuiOks1i+qVJi9et K59KYNy6HrHylFMy9xgroGHJZ40lh8DFUlhWB00c= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Wilco Dijkstra To: glibc-cvs@sourceware.org Subject: [glibc/release/2.35/master] aarch64: Cleanup memset ifunc X-Act-Checkin: glibc X-Git-Author: Wilco Dijkstra X-Git-Refname: refs/heads/release/2.35/master X-Git-Oldrev: 577bd1e049cab8202613e4136f2ffa62e352f788 X-Git-Newrev: c503e2206e77506eba9976adbe6fddce6b7407cf Message-Id: <20240410150634.A51523847718@sourceware.org> Date: Wed, 10 Apr 2024 15:06:34 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c503e2206e77506eba9976adbe6fddce6b7407cf commit c503e2206e77506eba9976adbe6fddce6b7407cf Author: Wilco Dijkstra Date: Wed Oct 26 14:12:55 2022 +0100 aarch64: Cleanup memset ifunc Cleanup memset ifunc selectors. The A64FX memset relies on a ZVA size of 256, so add an explicit check. (cherry picked from commit a8e72913fea0c6e2832c50523c60907ffa3b753b) Diff: --- sysdeps/aarch64/multiarch/ifunc-impl-list.c | 2 +- sysdeps/aarch64/multiarch/memset.c | 41 ++++++++++++++++++----------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c index f6c6d008da..71a2efe006 100644 --- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c +++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c @@ -65,7 +65,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, IFUNC_IMPL_ADD (array, i, memset, (zva_size == 64), __memset_emag) IFUNC_IMPL_ADD (array, i, memset, 1, __memset_kunpeng) #if HAVE_AARCH64_SVE_ASM - IFUNC_IMPL_ADD (array, i, memset, sve, __memset_a64fx) + IFUNC_IMPL_ADD (array, i, memset, sve && zva_size == 256, __memset_a64fx) #endif IFUNC_IMPL_ADD (array, i, memset, 1, __memset_generic)) IFUNC_IMPL (i, name, memchr, diff --git a/sysdeps/aarch64/multiarch/memset.c b/sysdeps/aarch64/multiarch/memset.c index c4008f346b..1e9ad2160c 100644 --- a/sysdeps/aarch64/multiarch/memset.c +++ b/sysdeps/aarch64/multiarch/memset.c @@ -31,25 +31,34 @@ extern __typeof (__redirect_memset) __libc_memset; extern __typeof (__redirect_memset) __memset_falkor attribute_hidden; extern __typeof (__redirect_memset) __memset_emag attribute_hidden; extern __typeof (__redirect_memset) __memset_kunpeng attribute_hidden; -# if HAVE_AARCH64_SVE_ASM extern __typeof (__redirect_memset) __memset_a64fx attribute_hidden; -# endif extern __typeof (__redirect_memset) __memset_generic attribute_hidden; -libc_ifunc (__libc_memset, - IS_KUNPENG920 (midr) - ?__memset_kunpeng - : ((IS_FALKOR (midr) || IS_PHECDA (midr)) && zva_size == 64 - ? __memset_falkor - : (IS_EMAG (midr) && zva_size == 64 - ? __memset_emag -# if HAVE_AARCH64_SVE_ASM - : (IS_A64FX (midr) && sve - ? __memset_a64fx - : __memset_generic)))); -# else - : __memset_generic))); -# endif +static inline __typeof (__redirect_memset) * +select_memset_ifunc (void) +{ + INIT_ARCH (); + + if (sve && HAVE_AARCH64_SVE_ASM) + { + if (IS_A64FX (midr) && zva_size == 256) + return __memset_a64fx; + return __memset_generic; + } + + if (IS_KUNPENG920 (midr)) + return __memset_kunpeng; + + if ((IS_FALKOR (midr) || IS_PHECDA (midr)) && zva_size == 64) + return __memset_falkor; + + if (IS_EMAG (midr) && zva_size == 64) + return __memset_emag; + + return __memset_generic; +} + +libc_ifunc (__libc_memset, select_memset_ifunc ()); # undef memset strong_alias (__libc_memset, memset);