Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Jul 2023 18:46:16 +0100
From:      Jessica Clarke <jrtc27@freebsd.org>
To:        FreeBSD User <freebsd@walstatt-de.de>
Cc:        Robert Clausecker <fuz@FreeBSD.org>, "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-main@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:  <F9655C88-86CB-4EBA-A447-79E4E2818D4E@freebsd.org>
In-Reply-To: <20230704193224.392af7f9@thor.intern.walstatt.dynvpn.de>
References:  <202307032023.363KNhu6031914@gitrepo.freebsd.org> <20230704193224.392af7f9@thor.intern.walstatt.dynvpn.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On 4 Jul 2023, at 18:31, FreeBSD User <freebsd@walstatt-de.de> wrote:
>=20
> Am Mon, 3 Jul 2023 20:23:43 GMT
> Robert Clausecker <fuz@FreeBSD.org> schrieb:
>=20
> This commit seems to break buildworld:
>=20
> [...]
>=20
> cc -DCOMPAT_32BIT -march=3Di686 -mmmx -msse -msse2 -target =
x86_64-unknown-freebsd14.0 -m32
> --sysroot=3D/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=3Dinitial-exec =
-DCRT_IRELOC_REL
> -DINIT_IRELOCS=3D"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=3Dgnu99
> -Wno-format-zero-length -fstack-protector-strong -Wsystem-headers =
-Wall -Wno-format-y2k
> -Wno-uninit--- ffs.nossppico --- cc -DCOMPAT_32BIT -march=3Di686 -mmmx =
-msse -msse2 -target
> x86_64-unknown-freebsd14.0 -m32 =
--sysroot=3D/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=3Dinitial-exec -DCRT_IRELOC_REL
> -DINIT_IRELOCS=3D"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=3Dgnu99 -Wno-format-zero-length -Wsystem-headers -Wall =
-Wno-format-y2k -Wno-uninitialized
> -Wno-pointe--- ffsl.nossppico --- cc -DCOMPAT_32BIT -march=3Di686 =
-mmmx -msse -msse2 -target
> x86_64-unknown-freebsd14.0 -m32  =
--sysroot=3D/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=3Dinitial-exec -DCRT_IRELOC_REL
> -DINIT_IRELOCS=3D"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=3Dgnu99 -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=3Dunused-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
>=20
> [...]
> --- ffs.pico ---
> *** [ffs.pico] Error code 1
>=20
> 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

>> The branch main has been updated by fuz:
>>=20
>> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3Dee8b0c436d7221c25e8be3c3fe1f9da7=
8b9d5b16
>>=20
>> commit ee8b0c436d7221c25e8be3c3fe1f9da78b9d5b16
>> Author:     Robert Clausecker <fuz@FreeBSD.org>
>> AuthorDate: 2023-06-23 16:22:54 +0000
>> Commit:     Robert Clausecker <fuz@FreeBSD.org>
>> CommitDate: 2023-07-03 20:18:27 +0000
>>=20
>>    lib/libc/string: replace ffs/fls implementations with clang =
builtins
>>=20
>>    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.
>>=20
>>    As a consequence, toss out arm and i386 ffs() implementations.
>>=20
>>    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(-)
>>=20
>> 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+=3D \
>> 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 <machine/asm.h>
>> -
>> -__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 =3D 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+=3D \
>> 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 <machine/asm.h>
>> -__FBSDID("$FreeBSD$");
>> -
>> -/*
>> - * ffs(value)
>> - * finds the first bit set in value and returns the index of=20
>> - * 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
>> + * <fuz@FreeBSD.org> 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 =3D=3D 0)
>> - return(0);
>> - for (bit =3D 1; !(mask & 1); bit++)
>> - mask =3D (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
>> + * <fuz@FreeBSD.org> 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 =3D=3D 0)
>> - return (0);
>> - for (bit =3D 1; !(mask & 1); bit++)
>> - mask =3D (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
>> + * <fuz@FreeBSD.org> 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 =3D=3D 0)
>> - return (0);
>> - for (bit =3D 1; !(mask & 1); bit++)
>> - mask =3D (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
>> + * <fuz@FreeBSD.org> 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 <sys/cdefs.h>
>> __FBSDID("$FreeBSD$");
>>=20
>> +#include <limits.h>
>> #include <strings.h>
>>=20
>> /*
>> @@ -40,11 +45,5 @@ __FBSDID("$FreeBSD$");
>> int
>> fls(int mask)
>> {
>> - int bit;
>> -
>> - if (mask =3D=3D 0)
>> - return (0);
>> - for (bit =3D 1; mask !=3D 1; bit++)
>> - mask =3D (unsigned int)mask >> 1;
>> - return (bit);
>> + return (mask =3D=3D 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
>> + * <fuz@FreeBSD.org> 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 <sys/cdefs.h>
>> __FBSDID("$FreeBSD$");
>>=20
>> +#include <limits.h>
>> #include <strings.h>
>>=20
>> /*
>> @@ -40,11 +46,5 @@ __FBSDID("$FreeBSD$");
>> int
>> flsl(long mask)
>> {
>> - int bit;
>> -
>> - if (mask =3D=3D 0)
>> - return (0);
>> - for (bit =3D 1; mask !=3D 1; bit++)
>> - mask =3D (unsigned long)mask >> 1;
>> - return (bit);
>> + return (mask =3D=3D 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
>> + * <fuz@FreeBSD.org> 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 <sys/cdefs.h>
>> __FBSDID("$FreeBSD$");
>>=20
>> +#include <limits.h>
>> #include <strings.h>
>>=20
>> /*
>> @@ -40,11 +45,5 @@ __FBSDID("$FreeBSD$");
>> int
>> flsll(long long mask)
>> {
>> - int bit;
>> -
>> - if (mask =3D=3D 0)
>> - return (0);
>> - for (bit =3D 1; mask !=3D 1; bit++)
>> - mask =3D (unsigned long long)mask >> 1;
>> - return (bit);
>> + return (mask =3D=3D 0 ? 0 : CHAR_BIT * sizeof(mask) - =
__builtin_clzll(mask));
>> }
>>=20
>=20
>=20
>=20
> --=20
> O. Hartmann


Jess




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F9655C88-86CB-4EBA-A447-79E4E2818D4E>