The Wayback Machine - https://web.archive.org/web/20210103002153/https://github.com/p12tic/libbittwiddle
Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 

README

  What is libbittwiddle
  =====================

Libbittwiddle is a collection of bit manipulation routines.

The included routines are as follows:

 * popcnt

    Computes set bits. Uses a compiler intrinsic if available.
    Results in 12 arithmetic operations, no branches.

 * clz

    Computes leading zeros. Uses a compiler intrinsic if available.
    Results in 23-25 arithmetic operations, no branches.

 * ctz

    Computes trailing zeros. Uses a compiler intrinsic if available.
    Results in 16 arithmetic operations, no branches.

 * check_has_byte_eq

    Checks whether a number has a byte with a value equal to a value x.
    Results in 5 arithmetic operations, no branches.

 * check_has_byte_lt

    Checks whether a number has a byte with a value less than a value x.
    It's possible to select from two implementations with the following
    performance characteristics:
     4-5 arithmetic operations and a branch (default).
     14-15 arithmetic operations and no branches.

    If the value x is known at compile-time, both implementations are equivalent
    and result in 4-5 arithmetic operations and no branches.

    The branchless implementation can be selected by defining
    LIBBITTWIDDLE_BRANCHLESS_CHECK_HAS_LTGT before including libbittwiddle.h

 * check_has_byte_gt

    Checks whether a number has a byte with a value greater than a value x.
    It's possible to select from two implementations with the following
    performance characteristics:
     3-4 arithmetic operations and a branch (default).
     14-15 arithmetic operations and no branches.

    If the value x is known at compile-time, both implementations are equivalent
    and result in 3-4 arithmetic operations and no branches.

    The branchless implementation can be selected by defining
    LIBBITTWIDDLE_BRANCHLESS_CHECK_HAS_LTGT before including libbittwiddle.h

 * check_has_byte_between

    Checks whether a number has a byte with a value between compile-time values
    x and y. Results in 7 arithmetic operations and no branches (the range of
    x and y is restricted).

A C++11-aware compiler is required.

About

A collection of bit manipulation routines for C++

Resources

Releases

No releases published

Packages

No packages published

Languages

You can’t perform that action at this time.