From nobody Mon Feb 9 16:28:41 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4f8qrV3bvpz6RgRP for ; Mon, 09 Feb 2026 16:28:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4f8qrV0HBgz3PfZ for ; Mon, 09 Feb 2026 16:28:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770654522; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4lNQpUxCPDzd8QIMqBXOF/UNZnL3UnIcoLkrBPhQfZk=; b=ZV+xD5yshkYn3663DYBDtgKyUWQcoDAr/lJCDnOSI6gQjlTeYsDkG1njLsnkxZXHEDagXE 9JKL6dJtbJq4uBynXvanJA/qJxCclQPzXwFlFGZr3/afHwkyzJ/m+y8nh4QCont3SqBVvT J3QXcRJtggEse22+JZjS0W9d+TWlZPI2Z63GppYkicsXw/HX+UuwCYYiaiAbfWkFDsK5Qc NKpeimK+jnrS4qfqh9baygzyjc2qL3U4YiLQq8cNxYGxePRYm6q1tQZl/MtrWXw7BWrfHi b/lylss29qdLICjXk95s2zjr6EdxJM+r0QaWQPHOJQ4msXYVyLRem6daF1zbIg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770654522; a=rsa-sha256; cv=none; b=nMWFG8r4V02HGA6vF3x2077CnbQG22TT98mkiyRUA1XNYdyHVobZMmBr1JcFaR+AfIdtKl T3FOqEv8vLLu1+9+It4nGXO4dLiqGMMXn2xu738JZw99Z3umDQtL1mkK0gMFrvWHjtMiT3 mDVvOw8hjf2PkkssMcpl/g96ndKa0wj2eeCahy3ONgsDNbbAFMLE8/4lBGbUdY4juoSfST wfioLR/ryKR+VJ2f70bLoK4GG8I/JEzxWf8dP0Mxi5Poxgt/8l0bL7avwjD3lHyxU0l845 PaEm31wrPe+Tpd55TlKTGAsnnZJsonadX84CZccnsowbPGFIOese0pKtpSg40w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770654522; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4lNQpUxCPDzd8QIMqBXOF/UNZnL3UnIcoLkrBPhQfZk=; b=TiMxl9T5YPFSrhwcGoDl1cYPkOwi/Aaz4lDj6I+6Rb4Qt0dg5njJ1ZMUBdqy/VnqXcXhez Hk+H9SraD74WEm/3TIGOvO1HMqTpNKWgtRuH3u8IPsqN0XswaZT05r6oWK5uJi2T68xKkZ B8bsl9BQdhZQgI4+V0rdwnp+9jZFjT+l+G3/5nb/4hz3r3mRM7SNvexSi9zRV139oeaehc mwlxNkBm4JyXfm9R9dDh6SIY8r8R1UcB+ChUz367K97tYFKEvnhO386kDgm6cPcPWrIi9p eKSS3fkaFaWTS0WaUnaMz4dbcZ724o3wV2jTa7HYKWzzjxgi8ybPe0Mb9qcPIw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4f8qrT6zSFzh4Y for ; Mon, 09 Feb 2026 16:28:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d317 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 09 Feb 2026 16:28:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Andrew Turner Subject: git: 067250e857b4 - stable/15 - libc/aarch64: Add memset for a 64 byte dc zva List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 067250e857b4e8f6d3ee9ff20c155d44c75c95e7 Auto-Submitted: auto-generated Date: Mon, 09 Feb 2026 16:28:41 +0000 Message-Id: <698a0b39.1d317.21c1b2dd@gitrepo.freebsd.org> The branch stable/15 has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=067250e857b4e8f6d3ee9ff20c155d44c75c95e7 commit 067250e857b4e8f6d3ee9ff20c155d44c75c95e7 Author: Andrew Turner AuthorDate: 2026-02-03 14:01:32 +0000 Commit: Andrew Turner CommitDate: 2026-02-09 14:52:00 +0000 libc/aarch64: Add memset for a 64 byte dc zva On arm64 we can use the "dc zva" instruction to zero memory. The CPU tells software if the instruction is implemented, and if so the size and alignment it will use. When the size is 64-bytes the Arm Optimized Routines implementation of memset can use dc zva to zero memory, and has a build flag to skip checking. Use this flag to build a version of memset that will be used when this assumption is true. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D54776 (cherry picked from commit 32d1f18865abe94d351a6f178a93b7195595ec69) --- lib/libc/aarch64/string/Makefile.inc | 4 +++- lib/libc/aarch64/string/memset_resolver.c | 13 +++++++++++++ lib/libc/aarch64/string/memset_zva64.S | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/libc/aarch64/string/Makefile.inc b/lib/libc/aarch64/string/Makefile.inc index 20a844f80e17..bc05e849aa20 100644 --- a/lib/libc/aarch64/string/Makefile.inc +++ b/lib/libc/aarch64/string/Makefile.inc @@ -42,7 +42,8 @@ MDSRCS+= \ memcpy_resolver.c \ memmove_resolver.c \ memset.S \ - memset_resolver.c + memset_resolver.c \ + memset_zva64.S # # Add the above functions. Generate an asm file that includes the needed @@ -77,3 +78,4 @@ CFLAGS.${FILE}+=-I${SRCTOP}/contrib/arm-optimized-routines/string CFLAGS.memchr.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string CFLAGS.memcpy.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string CFLAGS.memset.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string +CFLAGS.memset_zva64.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string diff --git a/lib/libc/aarch64/string/memset_resolver.c b/lib/libc/aarch64/string/memset_resolver.c index 34ca98aa1d34..277e8c177de9 100644 --- a/lib/libc/aarch64/string/memset_resolver.c +++ b/lib/libc/aarch64/string/memset_resolver.c @@ -25,18 +25,31 @@ * SUCH DAMAGE. */ #include + +#include #include #include void *__memset_aarch64(void *, int, size_t); +void *__memset_aarch64_zva64(void *, int, size_t); void *__memset_aarch64_mops(void *, int, size_t); DEFINE_UIFUNC(, void *, memset, (void *, int, size_t)) { + uint64_t dczid; + if (ifunc_arg->_hwcap2 & HWCAP2_MOPS) return (__memset_aarch64_mops); + /* + * Check for the DC ZVA instruction, and it will + * zero 64 bytes (4 * 4byte words). + */ + dczid = READ_SPECIALREG(dczid_el0); + if ((dczid & DCZID_DZP) == 0 && DCZID_BS_SIZE(dczid) == 4) + return (__memset_aarch64_zva64); + return (__memset_aarch64); } diff --git a/lib/libc/aarch64/string/memset_zva64.S b/lib/libc/aarch64/string/memset_zva64.S new file mode 100644 index 000000000000..7f1cf6ba577a --- /dev/null +++ b/lib/libc/aarch64/string/memset_zva64.S @@ -0,0 +1,4 @@ +/* Used when we know we have a 64-byte dc zva instruction */ +#define __memset_aarch64 __memset_aarch64_zva64 +#define SKIP_ZVA_CHECK +#include "aarch64/memset.S"