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:
ARM (bitintr::arm
):
x86 (bitintr::x86
):
Note: This library is low-level by purpose. For a portable higher-level bitwise manipulation algorithms library you might want to check out the [bitwise][bitwise_link] crate.
```rust extern crate bitintr; use bitintr::x86::bmi2::*;
fn main() { // Intrinsics are provided as trait methods: let methodcall = 1.pdep(0); // And as free functions: let freecall = pdep(1, 0); asserteq!(methodcall, free_call); } ```
The minimum required rustc version is >= 1.4.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 features are used to generate the corresponding CPU instruction in all cases:
cfg_target_feature
for target-dependent behavior,platform_intrinsics
for using the bitwise manipulation intrinsics, andu128
support for efficient 64bit multiplication.Licensed under the MIT license.
Yes please! Just note that all contributions shall be licensed as above without any additional terms or conditions.