From nobody Fri Jan 10 15:03:51 2025 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 4YV4fw1qthz5kTTN; Fri, 10 Jan 2025 15:03:52 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YV4fv5kP5z4wqj; Fri, 10 Jan 2025 15:03:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1736521431; 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=HBfcOMk6smi28LQjP8xEFc1FsDJCt9p5ospvWbslBpQ=; b=oDvOXputgBR1tN7qfdAcEkp+6PTMzBmgw8WYswpaL5G34zvBcNn2UZUhthpo3B7e5Uzhxc WviEPAx3madC9NnALRVp8ucI+wAePwd0Cw2dllTHw0GuBfwSokVWvCoCuiro8umSYCOYxn tZNZigZ9mvfKf7GkYE4RRnf4FolHFPEBilYOkFvv2ADPZ/bnuWMDpGWOSGIx+kZYK8OAcM Rtwwfov+C2Q2TgvRj4edWVqdCCB5G+4s/p5VEUh2az/MKMoBIFtk+DxB0EclHVnpNSKsye SZI3jI8i5Ks/KpmJ0YNqy20AGCYjj5InOPaam28IKN0r3Wq+hOSBbRZq6ZVWDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1736521431; 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=HBfcOMk6smi28LQjP8xEFc1FsDJCt9p5ospvWbslBpQ=; b=HnOeEFqAginKBbLhkJA2tjKsrFXb/atDpzMFBiOqYLDnxcCHPn2/C/KDDGVj0+JU5uuJun nZRA/i+Y/50ucysoAMpymjjFw6CQ2bJ4Ou55Mj3GiZyguDQirFsWCuPT+dOrpPAhVsFUOr nk27As+bg6nyxxvpfJPMYOpzAmaZtGXZS7skNRMz5GuwqGs7kJqQ1jnXr64IB9OZX9fWYu nS9IxGM1TXEF9c/2jwD+Nh/8ZkoYilzEeffBwQPmk7c44ZHItzIvCSl0EtMcfyPT1ym9cM v+lDvHiFO70g0nKtpUGANm1zfDSlPEBWiVC4WQSDlmzREOdvHLpw/3JXghbY3g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1736521431; a=rsa-sha256; cv=none; b=NEkpFItdfTE/0fHRSoxkczqPrNyl0mRnHjppbbDzqHgvssGYGQbodVGwI+Vl8Fazb+s9OV cUG9oXbi4+Khqg1bWE073ENNr8AhZnp2ISrJH6TXOeSK2TO5CADucjcCafpkxXNWN3zvVT zw8S0m3fls25wgG3yZXQGlJptGPO/nul8vyR93kTCqcy+rj/3DdG+BR+2sf40Fy6TB8mIx OnWkXNX6oQZk57ZBO4tM62gT4xQBpKwsR2ILO53m9uXEamM92mV/J6LWC6Vw+Wi1KTaoV3 vtTz6J5CZeaC7QYDSO+AenC01E/yg797uDNKZCWlBzvjI/c87MWR29JbJzwrNA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4YV4fv53bZz1nL; Fri, 10 Jan 2025 15:03:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 50AF3pHK057062; Fri, 10 Jan 2025 15:03:51 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 50AF3pLk057059; Fri, 10 Jan 2025 15:03:51 GMT (envelope-from git) Date: Fri, 10 Jan 2025 15:03:51 GMT Message-Id: <202501101503.50AF3pLk057059@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Robert Clausecker Subject: git: 89b3872376cb - main - lib/libc/aarch64/string: add optimized strpbrk & strsep implementations 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: fuz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 89b3872376cbb6e8ab53cb50fa8c4c6d14e2d405 Auto-Submitted: auto-generated The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/src/commit/?id=89b3872376cbb6e8ab53cb50fa8c4c6d14e2d405 commit 89b3872376cbb6e8ab53cb50fa8c4c6d14e2d405 Author: Getz Mikalsen AuthorDate: 2024-08-26 18:14:08 +0000 Commit: Robert Clausecker CommitDate: 2025-01-10 15:02:39 +0000 lib/libc/aarch64/string: add optimized strpbrk & strsep implementations These are direct copies from the amd64 string functions using the optimized strcspn from D46398 Tested by: fuz (exprun) Reviewed by: fuz, emaste Sponsored by: Google LLC (GSoC 2024) PR: 281175 Differential Revision: https://reviews.freebsd.org/D46399 --- lib/libc/aarch64/string/Makefile.inc | 4 ++- lib/libc/aarch64/string/strpbrk.c | 43 +++++++++++++++++++++++++++ lib/libc/aarch64/string/strsep.c | 57 ++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) diff --git a/lib/libc/aarch64/string/Makefile.inc b/lib/libc/aarch64/string/Makefile.inc index 34483532a3dd..996a2fd45bc0 100644 --- a/lib/libc/aarch64/string/Makefile.inc +++ b/lib/libc/aarch64/string/Makefile.inc @@ -23,7 +23,9 @@ AARCH64_STRING_FUNCS= \ MDSRCS+= \ strcmp.S \ strspn.S \ - strcspn.S + strcspn.S \ + strpbrk.c \ + strsep.c # # Add the above functions. Generate an asm file that includes the needed diff --git a/lib/libc/aarch64/string/strpbrk.c b/lib/libc/aarch64/string/strpbrk.c new file mode 100644 index 000000000000..87f587789991 --- /dev/null +++ b/lib/libc/aarch64/string/strpbrk.c @@ -0,0 +1,43 @@ +/*- + * Copyright (c) 2023 The FreeBSD Foundation + * + * This software was developed by Robert Clausecker + * under sponsorship from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ''AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE + */ + +#include + +#include + +size_t __strcspn(const char *, const char *); + +char * +strpbrk(const char *s, const char *charset) +{ + size_t loc; + + loc = __strcspn(s, charset); + + return (s[loc] == '\0' ? NULL : (char *)&s[loc]); +} diff --git a/lib/libc/aarch64/string/strsep.c b/lib/libc/aarch64/string/strsep.c new file mode 100644 index 000000000000..7afd47957aa9 --- /dev/null +++ b/lib/libc/aarch64/string/strsep.c @@ -0,0 +1,57 @@ +/*- + * Copyright (c) 2023 The FreeBSD Foundation + * + * This software was developed by Robert Clausecker + * under sponsorship from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ''AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE + */ + +#include +#include + +size_t __strcspn(const char *, const char *); + +/* + * We have a fast strcspn() on aarch64. Use it over a direct + * implementation of strsep for better performance. + */ +char * +strsep(char **stringp, const char *delim) +{ + size_t n; + char *s; + + s = *stringp; + if (s == NULL) + return (NULL); + + n = __strcspn(s, delim); + if (s[n] == '\0') + *stringp = NULL; + else { + s[n] = '\0'; + *stringp = s + n + 1; + } + + return (s); +}