1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-11-28 08:02:54 +00:00
Mirror of the FreeBSD src repository https://git.FreeBSD.org/src.git .
Go to file
Mitchell Horne a89262079e Consistently provide ffs/fls using builtins
Use of compiler builtin ffs/ctz functions will result in optimized
instruction sequences when possible, and fall back to calling a function
provided by the compiler run-time library. We have slowly shifted our
platforms to take advantage of these builtins in 60645781d6 (arm64),
1c76d3a9fb (arm), 9e319462a0 (powerpc, partial).

Some platforms still rely on the libkern implementations of these
functions provided by libkern, namely riscv, powerpc (ffs*, flsll), and
i386 (ffsll and flsll). These routines are slow, as they perform a
linear search for the bit in question. Even on platforms lacking
dedicated bit-search instructions, such as riscv, the compiler library
will provide better-optimized routines, e.g. by using binary search.

Consolidate all definitions of these functions (whether currently using
builtins or not) to libkern.h. This should result in equivalent or
better performing routines in all cases.

One wart in all of this is the existing HAVE_INLINE_F*** macros, which
we use in a few places to conditionally avoid the slow libkern routines.
These aren't easily removed in one commit. For now, provide these
defines unconditionally, but marked for removal after subsequent
cleanup.

Removal of the now unused libkern routines will follow in the next
commit.

Reviewed by:	dougm, imp (previous version)
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D40698
2023-07-06 14:46:41 -03:00
.cirrus-ci
.github MAINTAINERS: Add myself to stand 2023-05-07 22:30:10 -06:00
bin bin/date: Upgrade calculations (take 2) 2023-07-03 23:39:00 -05:00
cddl dtrace: move kinst tests to common 2023-07-04 18:46:59 +03:00
contrib libexecinfo: Enable backtrace_test.backtrace_fmt_basic on amd64 again 2023-06-29 19:53:07 +03:00
crypto libcrypto: add missing symbols to the fips provider 2023-07-05 16:00:54 -04:00
etc Create correct engines debug directory after OpenSSL 3.0.9 merge 2023-07-01 22:59:23 +02:00
gnu Update/fix Makefile.depend for userland 2023-04-18 17:14:23 -07:00
include Vendor import of OpenPAM Ximenia. 2023-06-27 19:01:49 +02:00
kerberos5 kerberos: Request the OpenSSL 1.1 API 2023-06-23 18:53:36 -04:00
lib libc: Improve setjmp comments 2023-07-06 20:21:54 +03:00
libexec dumpdev: respect kenv for stable branches 2023-07-02 14:54:57 +07:00
release release/DVD_PACKAGES: Update the names of drm-kmod ports 2023-07-05 04:24:52 +08:00
rescue Update/fix Makefile.depend for userland 2023-04-18 17:14:23 -07:00
sbin ipf: low-effort fix to make it compilable without inet6 2023-07-05 10:02:32 +00:00
secure libcrypto: group definitions for libcrypto and fips 2023-07-05 16:00:54 -04:00
share hier(7): remove entry for non-existent /usr/compat 2023-07-06 11:26:21 -03:00
stand Stand: Silence undefined symbols check command 2023-07-01 11:16:58 -06:00
sys Consistently provide ffs/fls using builtins 2023-07-06 14:46:41 -03:00
targets local.dirdeps.mk skip N_host_libs for non-FreeBSD host 2023-05-04 11:58:39 -07:00
tests Fix the zfsd_autoreplace_001_neg test 2023-07-05 16:38:49 -06:00
tools stress2: Added a regression test 2023-07-06 11:15:13 +02:00
usr.bin man(1): use gzcat for .gz files 2023-07-04 15:42:55 -04:00
usr.sbin flowctl: low-effort fix to make it compilable with neither inet nor inet6 2023-07-05 10:03:10 +00:00
.arcconfig arcanist: use FreeBSD/git project repository instead of FreeBSD/svn 2022-08-23 14:16:41 +00:00
.arclint
.cirrus.yml Cirrus-CI: use llvm16 job by default and make llvm15 manual 2023-06-22 20:26:34 -04:00
.clang-format clang-format: Add bitset loop macros 2021-09-21 12:08:01 -04:00
.git-blame-ignore-revs Add git-blame ignore file 2023-01-23 15:27:25 -05:00
.gitattributes
.gitignore .gitignore: Ignore LSP generated .cache 2023-03-07 10:04:18 -05:00
CONTRIBUTING.md CONTRIBUTING.md: minor changes 2023-05-14 06:51:56 -06:00
COPYRIGHT Happy New Year 2023! 2023-01-01 13:44:43 +08:00
LOCKS
MAINTAINERS MAINTAINERS: Add myself to stand 2023-05-07 22:30:10 -06:00
Makefile Import bmake-20230622 2023-06-27 13:29:43 -07:00
Makefile.inc1 Generalise libcompat to be a list rather than a single option 2023-06-28 00:10:49 +01:00
Makefile.libcompat Generalise libcompat to be a list rather than a single option 2023-06-28 00:10:49 +01:00
Makefile.sys.inc
ObsoleteFiles.inc Stop removing OpenSSL man pages that were revived in 3.0.9 2023-07-03 18:58:24 +02:00
README.md README.md: link to the list of supported platforms 2022-11-01 12:20:55 -03:00
RELNOTES Vendor import of OpenPAM Ximenia. 2023-06-27 19:01:49 +02:00
UPDATING atkbc: Better test for old chromebooks 2023-06-29 08:34:47 -06:00

FreeBSD Source:

This is the top level of the FreeBSD source directory.

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), FreeBSD handbook on building userland, and Handbook for kernels for more information, including setting make(1) variables.

For information on the CPU architectures and platforms supported by FreeBSD, see the FreeBSD website's Platforms page.

Source Roadmap:

Directory Description
bin System/user commands.
cddl Various commands and libraries under the Common Development and Distribution License.
contrib Packages contributed by 3rd parties.
crypto Cryptography stuff (see crypto/README).
etc Template files for /etc.
gnu Commands and libraries under the GNU General Public License (GPL) or Lesser General Public License (LGPL). Please see gnu/COPYING and gnu/COPYING.LIB for more information.
include System include files.
kerberos5 Kerberos5 (Heimdal) package.
lib System libraries.
libexec System daemons.
release Release building Makefile & associated tools.
rescue Build system for statically linked /rescue utilities.
sbin System commands.
secure Cryptographic libraries and commands.
share Shared resources.
stand Boot loader sources.
sys Kernel sources (see sys/README.md).
targets Support for experimental DIRDEPS_BUILD
tests Regression tests which can be run by Kyua. See tests/README for additional information.
tools Utilities for regression testing and miscellaneous tasks.
usr.bin User commands.
usr.sbin System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see FreeBSD Handbook.