From nobody Tue Jul 04 18:04:52 2023 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 4QwW114hQFz4lYyW; Tue, 4 Jul 2023 18:05:25 +0000 (UTC) (envelope-from freebsd@walstatt-de.de) Received: from smtp6.goneo.de (smtp6.goneo.de [IPv6:2001:1640:5::8:31]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4QwW1130dGz3x4v; Tue, 4 Jul 2023 18:05:25 +0000 (UTC) (envelope-from freebsd@walstatt-de.de) Authentication-Results: mx1.freebsd.org; none Received: from hub2.goneo.de (hub2.goneo.de [85.220.129.53]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp6.goneo.de (Postfix) with ESMTPS id 8BD0610A1E9A; Tue, 4 Jul 2023 20:05:22 +0200 (CEST) Received: from hub2.goneo.de (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by hub2.goneo.de (Postfix) with ESMTPS id B2BE41040904; Tue, 4 Jul 2023 20:05:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walstatt-de.de; s=DKIM001; t=1688493920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IJhPbhzcj1sfAwYwDFRPNJDAmsFnRyPwnM3GETEAk9Q=; b=o0XJNea75uG+T4R/yEkEh82vt8lECKBAkSDTvE8wzhflKa4ZnMkQnd/oUC5SrqfUCRe36H VWRn+qxgF42SehA9fPF6hIjOKgnEeAr3a0QsTixCpMg8rU+FYYxhN+UI2gnQCDDwUy742B lDfJNSpmhdZb905ut0qND6v3mrf8svsYx0PQj2JpLSBGzt0pzhQkSE88VJYiQK0tmikcK1 NmBE1A9SD708kKeYzRsMPx64EGhjD7UmeUgB0/l0ugCTMGkR58Ax8D5lXFz62B/x30P+lN 8C14LYwDXAKmyU65jr/TLPAOxJNMhVHJCO+nuj+hCqJhV0Ymk16b2iLptHje0w== Received: from thor.intern.walstatt.dynvpn.de (dynamic-089-014-087-069.89.14.pool.telefonica.de [89.14.87.69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by hub2.goneo.de (Postfix) with ESMTPSA id 606121040901; Tue, 4 Jul 2023 20:05:20 +0200 (CEST) Date: Tue, 4 Jul 2023 20:04:52 +0200 From: FreeBSD User To: Jessica Clarke Cc: Robert Clausecker , "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" Subject: Re: git: ee8b0c436d72 - main - lib/libc/string: replace ffs/fls implementations with clang builtins: cc: error: no such file or directory: '/usr/src/lib/libc/i386/string/ffs.S' Message-ID: <20230704200519.7be7c45e@thor.intern.walstatt.dynvpn.de> In-Reply-To: References: <202307032023.363KNhu6031914@gitrepo.freebsd.org> <20230704193224.392af7f9@thor.intern.walstatt.dynvpn.de> Organization: walstatt-de.de 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspamd-UID: 8029e9 X-Rspamd-UID: 7133f8 X-Rspamd-Queue-Id: 4QwW1130dGz3x4v X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:25394, ipnet:2001:1640::/32, country:DE] X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-ThisMailContainsUnwantedMimeParts: N Am Tue, 4 Jul 2023 18:46:16 +0100 Jessica Clarke schrieb: > On 4 Jul 2023, at 18:31, FreeBSD User wrote: > > > > Am Mon, 3 Jul 2023 20:23:43 GMT > > Robert Clausecker schrieb: > > > > This commit seems to break buildworld: > > > > [...] > > > > cc -DCOMPAT_32BIT -march=i686 -mmmx -msse -msse2 -target x86_64-unknown-freebsd14.0 -m32 > > --sysroot=/usr/obj/usr/src/amd64.amd64/tmp -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin > > -B/usr/obj/usr/src/amd64.amd64/tmp/usr/lib32 -fpic -DPIC -O2 -pipe -O3 -fno-common > > -DNO__SCCSID -DNO__RCSID -I/usr/src/lib/libc/include -I/usr/src/include > > -I/usr/src/lib/libc/i386 -DNLS -ftls-model=initial-exec -DCRT_IRELOC_REL > > -DINIT_IRELOCS="init_cpu_features()" -I/usr/src/lib/libc/csu/i386 -D__DBINTERFACE_PRIVATE > > -I/usr/src/contrib/gdtoa -I/usr/src/contrib/libc-vis -DINET6 > > -I/usr/obj/usr/src/amd64.amd64/obj-lib32/lib/libc -I/usr/src/lib/libc/resolv -D_ACL_PRIVATE > > -DPOSIX_MISTAKE -I/usr/src/lib/libmd -I/usr/src/contrib/jemalloc/include > > -DMALLOC_PRODUCTION -I/usr/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN > > -I/usr/src/lib/libc/rpc -DYP -DNS_CACHING -DSYMBOL_VERSIONING -DNDEBUG -MD > > -MF.depend.ffs.pico -MTffs.pico -std=gnu99 -Wno-format-zero-length > > -fstack-protector-strong -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninit--- > > ffs.nossppico --- cc -DCOMPAT_32BIT -march=i686 -mmmx -msse -msse2 -target > > x86_64-unknown-freebsd14.0 -m32 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp > > -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -B/usr/obj/usr/src/amd64.amd64/tmp/usr/lib32 > > -fpic -DPIC -O2 -pipe -O3 -fno-common -DNO__SCCSID -DNO__RCSID -I/usr/src/lib/libc/include > > -I/usr/src/include -I/usr/src/lib/libc/i386 -DNLS -ftls-model=initial-exec > > -DCRT_IRELOC_REL -DINIT_IRELOCS="init_cpu_features()" -I/usr/src/lib/libc/csu/i386 > > -D__DBINTERFACE_PRIVATE -I/usr/src/contrib/gdtoa -I/usr/src/contrib/libc-vis -DINET6 > > -I/usr/obj/usr/src/amd64.amd64/obj-lib32/lib/libc -I/usr/src/lib/libc/resolv > > -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/usr/src/lib/libmd -I/usr/src/contrib/jemalloc/include > > -DMALLOC_PRODUCTION -I/usr/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN > > -I/usr/src/lib/libc/rpc -DYP -DNS_CACHING -DSYMBOL_VERSIONING -DNDEBUG -MD > > -MF.depend.ffs.nossppico -MTffs.nossppico -std=gnu99 -Wno-format-zero-length > > -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointe--- ffsl.nossppico > > --- cc -DCOMPAT_32BIT -march=i686 -mmmx -msse -msse2 -target x86_64-unknown-freebsd14.0 > > -m32 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp > > -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -B/usr/obj/usr/src/amd64.amd64/tmp/usr/lib32 > > -fpic -DPIC -O2 -pipe -O3 -fno-common -DNO__SCCSID -DNO__RCSID > > -I/usr/src/lib/libc/include -I/usr/src/include -I/usr/src/lib/libc/i386 -DNLS > > -ftls-model=initial-exec -DCRT_IRELOC_REL -DINIT_IRELOCS="init_cpu_features()" > > -I/usr/src/lib/libc/csu/i386 -D__DBINTERFACE_PRIVATE -I/usr/src/contrib/gdtoa > > -I/usr/src/contrib/libc-vis -DINET6 -I/usr/obj/usr/src/amd64.amd64/obj-lib32/lib/libc > > -I/usr/src/lib/libc/resolv -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/usr/src/lib/libmd > > -I/usr/src/contrib/jemalloc/include -DMALLOC_PRODUCTION -I/usr/src/lib/libc/locale > > -DBROKEN_DES -DPORTMAP -DDES_BUILTIN -I/usr/src/lib/libc/rpc -DYP -DNS_CACHING > > -DSYMBOL_VERSIONING -DNDEBUG -MD -MF.depend.ffsl.nossppico -MTffsl.nossppico -std=gnu99 > > -Wno-format-zero-length -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized > > -Wno-p--- ffs.pico --- ialized -Wno-pointer-sign -Wdate-time -Wno-empty-body > > -Wno-string-plus-int -Wno-unused-const-variable -Wno-error=unused-but-set-parameter > > -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function > > -Wno-enum-conversion -Wno-unused-local-typedef -Wno-address-of-packed-member -Wno-switch > > -Wno-switch-enum -Wno-knr-promoted-parameter -Qunused-arguments -I/usr/src/lib/libutil > > -I/usr/src/lib/msun/i387 -I/usr/src/lib/msun/x86 -I/usr/src/lib/msun/src -c > > /usr/src/lib/libc/i386/string/ffs.S -o ffs.pico cc: error: no such file or directory: > > '/usr/src/lib/libc/i386/string/ffs.S' cc: error: no input files > > > > [...] > > --- ffs.pico --- > > *** [ffs.pico] Error code 1 > > > > make[4]: stopped in /usr/src/lib/libc > > --- ffs.nossppico --- > > cc: error: no such file or directory: '/usr/src/lib/libc/i386/string/ffs.S' > > cc: error: no input files > > *** [ffs.nossppico] Error code 1 > > [...] > > That looks like a missing depends cleanup (needed for arm and i386). I > assume this is a -DWITHOUT_CLEAN (-DNO_CLEAN) build? > > Jess Yes, indeed. oh > > >> The branch main has been updated by fuz: > >> > >> URL: https://cgit.FreeBSD.org/src/commit/?id=ee8b0c436d7221c25e8be3c3fe1f9da78b9d5b16 > >> > >> commit ee8b0c436d7221c25e8be3c3fe1f9da78b9d5b16 > >> Author: Robert Clausecker > >> AuthorDate: 2023-06-23 16:22:54 +0000 > >> Commit: Robert Clausecker > >> CommitDate: 2023-07-03 20:18:27 +0000 > >> > >> lib/libc/string: replace ffs/fls implementations with clang builtins > >> > >> Most architectures we support (except for riscv64) have instructions > >> to compute these functions very quickly. Replace old code with the > >> ffs and clz builtin functions, allowing clang to generate good code > >> for all architectures. > >> > >> As a consequence, toss out arm and i386 ffs() implementations. > >> > >> Sponsored by: FreeBSD Foundation > >> Approved by: mhorne > >> MFC after: 1 week > >> Differential Revision: https://reviews.freebsd.org/D40730 > >> --- > >> lib/libc/arm/string/Makefile.inc | 1 - > >> lib/libc/arm/string/ffs.S | 57 --------------------------------------- > >> lib/libc/i386/string/Makefile.inc | 1 - > >> lib/libc/i386/string/ffs.S | 56 -------------------------------------- > >> lib/libc/string/ffs.c | 12 ++++----- > >> lib/libc/string/ffsl.c | 12 ++++----- > >> lib/libc/string/ffsll.c | 12 ++++----- > >> lib/libc/string/fls.c | 13 +++++---- > >> lib/libc/string/flsl.c | 14 +++++----- > >> lib/libc/string/flsll.c | 13 +++++---- > >> 10 files changed, 34 insertions(+), 157 deletions(-) > >> > >> diff --git a/lib/libc/arm/string/Makefile.inc b/lib/libc/arm/string/Makefile.inc > >> index cf3175ea4e8c..550de34adb0e 100644 > >> --- a/lib/libc/arm/string/Makefile.inc > >> +++ b/lib/libc/arm/string/Makefile.inc > >> @@ -3,7 +3,6 @@ > >> MDSRCS+= \ > >> bcopy.S \ > >> bzero.S \ > >> - ffs.S \ > >> memcmp.S \ > >> memcpy.S \ > >> memmove.S \ > >> diff --git a/lib/libc/arm/string/ffs.S b/lib/libc/arm/string/ffs.S > >> deleted file mode 100644 > >> index 5756dd81d21d..000000000000 > >> --- a/lib/libc/arm/string/ffs.S > >> +++ /dev/null > >> @@ -1,57 +0,0 @@ > >> -/* $NetBSD: ffs.S,v 1.5 2003/04/05 23:08:52 bjh21 Exp $ */ > >> -/* > >> - * Copyright (c) 2001 Christopher Gilbert > >> - * All rights reserved. > >> - * > >> - * 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. > >> - * 3. The name of the company nor the name of the author may be used to > >> - * endorse or promote products derived from this software without specific > >> - * prior written permission. > >> - * > >> - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 > >> - > >> -__FBSDID("$FreeBSD$"); > >> - > >> -.syntax unified > >> - > >> -/* > >> - * ffs - find first set bit, this algorithm isolates the first set > >> - * bit, then multiplies the number by 0x0450fbaf which leaves the top > >> - * 6 bits as an index into the table. This algorithm should be a win > >> - * over the checking each bit in turn as per the C compiled version. > >> - * > >> - * This is the ffs algorithm devised by d.seal and posted to comp.sys.arm on > >> - * 16 Feb 1994. > >> - */ > >> - > >> -ENTRY(ffs) > >> - /* Standard trick to isolate bottom bit in r0 or 0 if r0 = 0 on entry */ > >> - rsb r1, r0, #0 > >> - ands r0, r0, r1 > >> - itt ne > >> - clzne r0, r0 > >> - rsbne r0, r0, #32 > >> - RET > >> -END(ffs) > >> - > >> - .section .note.GNU-stack,"",%progbits > >> diff --git a/lib/libc/i386/string/Makefile.inc b/lib/libc/i386/string/Makefile.inc > >> index a8c50a285cbd..f3678b93bec3 100644 > >> --- a/lib/libc/i386/string/Makefile.inc > >> +++ b/lib/libc/i386/string/Makefile.inc > >> @@ -4,7 +4,6 @@ MDSRCS+= \ > >> bcmp.S \ > >> bcopy.S \ > >> bzero.S \ > >> - ffs.S \ > >> memcmp.S \ > >> memcpy.S \ > >> memmove.S \ > >> diff --git a/lib/libc/i386/string/ffs.S b/lib/libc/i386/string/ffs.S > >> deleted file mode 100644 > >> index 3a0431c6a845..000000000000 > >> --- a/lib/libc/i386/string/ffs.S > >> +++ /dev/null > >> @@ -1,56 +0,0 @@ > >> -/* > >> - * Copyright (c) 1993 Winning Strategies, Inc. > >> - * All rights reserved. > >> - * > >> - * 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. > >> - * 3. All advertising materials mentioning features or use of this software > >> - * must display the following acknowledgement: > >> - * This product includes software developed by Winning Strategies, Inc. > >> - * 4. The name of the author may not be used to endorse or promote products > >> - * derived from this software without specific prior written permission > >> - * > >> - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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 > >> -__FBSDID("$FreeBSD$"); > >> - > >> -/* > >> - * ffs(value) > >> - * finds the first bit set in value and returns the index of > >> - * that bit. Bits are numbered starting from 1, starting at the > >> - * rightmost bit. A return value of 0 means that the argument > >> - * was zero. > >> - * > >> - * Written by: > >> - * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc. > >> - */ > >> - > >> -ENTRY(ffs) > >> - bsfl 4(%esp),%eax > >> - jz L1 /* ZF is set if all bits are 0 */ > >> - incl %eax /* bits numbered from 1, not 0 */ > >> - ret > >> - > >> - .align 2 > >> -L1: xorl %eax,%eax /* clear result */ > >> - ret > >> -END(ffs) > >> - > >> - .section .note.GNU-stack,"",%progbits > >> diff --git a/lib/libc/string/ffs.c b/lib/libc/string/ffs.c > >> index 738ef90ce091..c011b3390612 100644 > >> --- a/lib/libc/string/ffs.c > >> +++ b/lib/libc/string/ffs.c > >> @@ -3,6 +3,10 @@ > >> * > >> * Copyright (c) 1990, 1993 > >> * The Regents of the University of California. All rights reserved. > >> + * Copyright (c) 2023 The FreeBSD Foundation > >> + * > >> + * Portions of this software were 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 > >> @@ -43,11 +47,5 @@ __FBSDID("$FreeBSD$"); > >> int > >> ffs(int mask) > >> { > >> - int bit; > >> - > >> - if (mask == 0) > >> - return(0); > >> - for (bit = 1; !(mask & 1); bit++) > >> - mask = (unsigned int)mask >> 1; > >> - return (bit); > >> + return (__builtin_ffs(mask)); > >> } > >> diff --git a/lib/libc/string/ffsl.c b/lib/libc/string/ffsl.c > >> index dbd894b9655b..6e1ac8ec45c1 100644 > >> --- a/lib/libc/string/ffsl.c > >> +++ b/lib/libc/string/ffsl.c > >> @@ -3,6 +3,10 @@ > >> * > >> * Copyright (c) 1990, 1993 > >> * The Regents of the University of California. All rights reserved. > >> + * Copyright (c) 2023 The FreeBSD Foundation > >> + * > >> + * Portions of this software were 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 > >> @@ -40,11 +44,5 @@ __FBSDID("$FreeBSD$"); > >> int > >> ffsl(long mask) > >> { > >> - int bit; > >> - > >> - if (mask == 0) > >> - return (0); > >> - for (bit = 1; !(mask & 1); bit++) > >> - mask = (unsigned long)mask >> 1; > >> - return (bit); > >> + return (__builtin_ffsl(mask)); > >> } > >> diff --git a/lib/libc/string/ffsll.c b/lib/libc/string/ffsll.c > >> index 91886de2f127..b945658b9008 100644 > >> --- a/lib/libc/string/ffsll.c > >> +++ b/lib/libc/string/ffsll.c > >> @@ -3,6 +3,10 @@ > >> * > >> * Copyright (c) 1990, 1993 > >> * The Regents of the University of California. All rights reserved. > >> + * Copyright (c) 2023 The FreeBSD Foundation > >> + * > >> + * Portions of this software were 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 > >> @@ -40,11 +44,5 @@ __FBSDID("$FreeBSD$"); > >> int > >> ffsll(long long mask) > >> { > >> - int bit; > >> - > >> - if (mask == 0) > >> - return (0); > >> - for (bit = 1; !(mask & 1); bit++) > >> - mask = (unsigned long long)mask >> 1; > >> - return (bit); > >> + return (__builtin_ffsll(mask)); > >> } > >> diff --git a/lib/libc/string/fls.c b/lib/libc/string/fls.c > >> index d9edc41f9599..3c4719776778 100644 > >> --- a/lib/libc/string/fls.c > >> +++ b/lib/libc/string/fls.c > >> @@ -3,6 +3,10 @@ > >> * > >> * Copyright (c) 1990, 1993 > >> * The Regents of the University of California. All rights reserved. > >> + * Copyright (c) 2023 The FreeBSD Foundation > >> + * > >> + * Portions of this software were 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 > >> @@ -32,6 +36,7 @@ > >> #include > >> __FBSDID("$FreeBSD$"); > >> > >> +#include > >> #include > >> > >> /* > >> @@ -40,11 +45,5 @@ __FBSDID("$FreeBSD$"); > >> int > >> fls(int mask) > >> { > >> - int bit; > >> - > >> - if (mask == 0) > >> - return (0); > >> - for (bit = 1; mask != 1; bit++) > >> - mask = (unsigned int)mask >> 1; > >> - return (bit); > >> + return (mask == 0 ? 0 : CHAR_BIT * sizeof(mask) - __builtin_clz(mask)); > >> } > >> diff --git a/lib/libc/string/flsl.c b/lib/libc/string/flsl.c > >> index 60370cf7d832..f5280b77a4e2 100644 > >> --- a/lib/libc/string/flsl.c > >> +++ b/lib/libc/string/flsl.c > >> @@ -3,6 +3,11 @@ > >> * > >> * Copyright (c) 1990, 1993 > >> * The Regents of the University of California. All rights reserved. > >> + * Copyright (c) 2023 The FreeBSD Foundation > >> + > >> + * > >> + * Portions of this software were 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 > >> @@ -32,6 +37,7 @@ > >> #include > >> __FBSDID("$FreeBSD$"); > >> > >> +#include > >> #include > >> > >> /* > >> @@ -40,11 +46,5 @@ __FBSDID("$FreeBSD$"); > >> int > >> flsl(long mask) > >> { > >> - int bit; > >> - > >> - if (mask == 0) > >> - return (0); > >> - for (bit = 1; mask != 1; bit++) > >> - mask = (unsigned long)mask >> 1; > >> - return (bit); > >> + return (mask == 0 ? 0 : CHAR_BIT * sizeof(mask) - __builtin_clzl(mask)); > >> } > >> diff --git a/lib/libc/string/flsll.c b/lib/libc/string/flsll.c > >> index 275aaa0e2e15..ab504b8e592f 100644 > >> --- a/lib/libc/string/flsll.c > >> +++ b/lib/libc/string/flsll.c > >> @@ -3,6 +3,10 @@ > >> * > >> * Copyright (c) 1990, 1993 > >> * The Regents of the University of California. All rights reserved. > >> + * Copyright (c) 2023 The FreeBSD Foundation > >> + * > >> + * Portions of this software were 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 > >> @@ -32,6 +36,7 @@ > >> #include > >> __FBSDID("$FreeBSD$"); > >> > >> +#include > >> #include > >> > >> /* > >> @@ -40,11 +45,5 @@ __FBSDID("$FreeBSD$"); > >> int > >> flsll(long long mask) > >> { > >> - int bit; > >> - > >> - if (mask == 0) > >> - return (0); > >> - for (bit = 1; mask != 1; bit++) > >> - mask = (unsigned long long)mask >> 1; > >> - return (bit); > >> + return (mask == 0 ? 0 : CHAR_BIT * sizeof(mask) - __builtin_clzll(mask)); > >> } > >> > > > > > > > > -- > > O. Hartmann > > > Jess > > -- O. Hartmann