Skip to content

p12tic/libbittwiddle

Repository files navigation

  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

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages