From nobody Tue Jul 04 17:31:57 2023 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 4QwVH83Wq3z4lBLG; Tue, 4 Jul 2023 17:32:36 +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) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4QwVH811KHz3lxZ; Tue, 4 Jul 2023 17:32:35 +0000 (UTC) (envelope-from freebsd@walstatt-de.de) Authentication-Results: mx1.freebsd.org; none Received: from hub1.goneo.de (hub1.goneo.de [85.220.129.52]) (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 530DC10A1E83; Tue, 4 Jul 2023 19:32:27 +0200 (CEST) Received: from hub1.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 hub1.goneo.de (Postfix) with ESMTPS id 60F95105ED92; Tue, 4 Jul 2023 19:32:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walstatt-de.de; s=DKIM001; t=1688491945; 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=YA+her3Zyltf112Idnh1hVixKQUNOZWyod3F1VvnmwE=; b=jC3QcVUZzM/maG2ru7NFrCbQwvy6MimRfBAWV9/rJ7Y6H7benPCd+KP3vLduuQ7JFU9KgH 8MGmbggvKXScGBP2zL40ziHKFdcX7NAUpQyCReT308EOffo5NIM8Alv322VZ1DsrMB/109 9JCvgruI+GcPU7UR4+PCgSeBOurVPJhNDDvwdZtLQkMUqtHM32ywJ+QE27Myj9kEPaxwiz hFodGkyapWK9ZU65/ugoOQBHwPCrHCUHNCBHdJ+J8iO9koACdJZgxJu/9DBf81LOSvme+F CW8GPAQuJwm2ajEljRi0YS8ZhPr6jk0uqs7SEAMyCmIWokTg7TFHh3aLNzNgKw== 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 hub1.goneo.de (Postfix) with ESMTPSA id 0838D1060975; Tue, 4 Jul 2023 19:32:24 +0200 (CEST) Date: Tue, 4 Jul 2023 19:31:57 +0200 From: FreeBSD User To: Robert Clausecker Cc: 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: <20230704193224.392af7f9@thor.intern.walstatt.dynvpn.de> In-Reply-To: <202307032023.363KNhu6031914@gitrepo.freebsd.org> References: <202307032023.363KNhu6031914@gitrepo.freebsd.org> Organization: walstatt-de.de 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspamd-UID: 903584 X-Rspamd-UID: af4b60 X-Rspamd-Queue-Id: 4QwVH811KHz3lxZ 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 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 [...] > 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