bitintr 0.1.14

Portable Bit Manipulation Intrinsics.
Documentation

Portable Bitwise Manipulation Intrinsics

crates.io version Travis build status Coveralls.io code coverage Docs License

0b0000_0010_1001_1010

The intrinsics are named after their CPU instruction and organized in modules named after their architecture/instruction set: bitintr::{arch}::{instruction_set}::{intrinsic_name}.

They are implemented for all integer types except u128/i128. Whether a fallback software implementation is used depends on the integer types involved and the instruction sets supported by the target.

The following instruction sets are implemented:

Note: This library is low-level by purpose (and works with #![no_std]). For a portable higher-level bitwise manipulation algorithms library you might want to check out the bitwise crate.

Example

extern crate bitintr;
use bitintr::x86::bmi2::*;

fn main() {
    // Intrinsics are provided as trait methods:
    let method_call = 1.pdep(0);
    // And as free functions:
    let free_call = pdep(1, 0);
    assert_eq!(method_call, free_call);
}

Supported compilers

The minimum required rustc version is >= 1.13.0.

When compiled with a rust stable compiler the intrinsics are implemented using the software fallback. In release builds LLVM often generates the corresponding CPU instruction.

When compiled with a rust nightly compiler the following unstable features are used to generate the corresponding CPU instruction in all cases:

Verify the generated assembly

A small script (check_asm.py) is used for verifying the generated assembly of the intrinsics. It compiles the asm/arch_feature_*.rs for the appropriate architectures and target features and compares the assembly generated by rustc with that included in the corresponding asm/arch_feature_*.asm files.

License

Licensed under the MIT license.

Contribution

Yes please! Just note that all contributions shall be licensed as above without any additional terms or conditions.