From nobody Tue Feb 3 17:27:45 2026 X-Original-To: dev-commits-src-main@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 4f59RQ35XNz6QSGY for ; Tue, 03 Feb 2026 17:27:46 +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 4f59RQ0HWRz3J25 for ; Tue, 03 Feb 2026 17:27:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770139666; 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=+MTk0bjCG3wPnYzGFLAICcbUjfQiudNaggPLVfROD4g=; b=SwVxj9SwsozDqGbbR5STwZIb9XZApyTZRrX6mHuY70VNhrf0d1kvIVbzhbxgWXvp/vvLCF aSlLkvgYVPHL6oiEGwxov2bXfgVjLlQFfEnc0spyRVtC2HVPNWo6CjVlUw42Zg4RVT2Tr4 /SxpTBiwZL/X+i7kUT1CsczGP15rv9xG6fVjnlnG3AVa2PCz3BnUjO3V6WZrcbj3Y2OzLx 0+AZfNSdPAy0y/uTczg47WlMDIKf1EsF38VmCiN4YkvFmQA1CTKoi9Q7nDjcqJQTjmWE17 DpeWwu5TqmlGKteo4so9wh0i0FtkMdoLeQfLSXCoz7gN5ns8Ck0xKfy8TxJGdQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770139666; a=rsa-sha256; cv=none; b=lRq7jEQD267BEbuzJ/TMQK6YZKtjZ1kCs/a4NZIJFI2BQi2qfmyT1GUBB8wHHFMVUgcSwS wIJ/hh4NwrY/kUxVtM4q2EkOp6HkYnOJQt3b2lt4yehP6QPp/SinJ0oIS0pbGptXsbKYR2 XEa9cDVDXUeu+kD/l9++iH+rWAT0+jaSDrAl7Yu4kkKXb9uZ5C5sK6RyvTVWvGcB8P+Mzx hZQo6dHv0MlwW56rDKs9qaVVU/LJr4N4NDK+TxzODtvafqBdPFiX2i7mF9xq7Xnnf5fsT7 ZsAWrQg0azIs7NdAgcoZnWWWujg1HLo8JbtsxYotb/JMKfvZv9rnh3BHQ2+AXw== 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=1770139666; 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=+MTk0bjCG3wPnYzGFLAICcbUjfQiudNaggPLVfROD4g=; b=le7xYNeKIGxwoQDu846sFUiBmkezF/biOLdNOkkuoySKMYK5yRVAy8pGK/1sMKd13Wmgwe mxqYu2zmzniZ4Dgbz5iklUISazEsh/IE03QMtmUvtbuN4c/xzEXoIJuXoQX31yBLaLv8k5 WeEhtgeyJP517czcI9TDgz3NWjOUhsYlaMI362ICXk4pFqWXfQwNuTzMRmubyIwxOHLgQZ xI273Nzh6RygjFMTC5OTA+IWTPTPO1rWrGtvUjvjUkxALVFwk54EboGFnzkmlfjkHdvAxd opMW3fKuQyPQx93pcofixSsRVAQgXq3eaTjtW3HJtDY3Xm4q4v3UIApOabWIiQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4f59RP6G86z7G5 for ; Tue, 03 Feb 2026 17:27:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1f62c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 03 Feb 2026 17:27:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 32d1f18865ab - main - libc/aarch64: Add memset for a 64 byte dc zva List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 32d1f18865abe94d351a6f178a93b7195595ec69 Auto-Submitted: auto-generated Date: Tue, 03 Feb 2026 17:27:45 +0000 Message-Id: <69823011.1f62c.16765e1b@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=32d1f18865abe94d351a6f178a93b7195595ec69 commit 32d1f18865abe94d351a6f178a93b7195595ec69 Author: Andrew Turner AuthorDate: 2026-02-03 14:01:32 +0000 Commit: Andrew Turner CommitDate: 2026-02-03 17:11:51 +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 --- 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"