Portable Bitwise Manipulation Intrinsics
0b0000_0010_1001_1010
This library exposes safe and _portable low-level bit manipulation
instruction set architectures. It is #![no_std] but requires the
core::{intrinsics, arch} components when compiled with nightly rust.
For higher-level bitwise manipulations check the bitwise crate.
This library compiles on stable Rust, but provides an unstable crate feature that
makes uses of the following nightly features:
cfg_target_featurefor target-feature dependent behavior,stdsimd: forcore::archintrinsics,core_intrinsics: forcore::intrinsics.
The intrinsics are exposed via traits named after their CPU instruction. These
traits are implemented for all integer types except u128/i128.
The following ISAs are implemented:
-
x86 (
bitintr::x86):ABM: Advanced Bit Manipulation instructions (bitintr::x86::abm).TBM: Trailing Bit Manipulation instructions (bitintr::x86::tbm).BMI: Bit Manipulation Instruction Set 1.0 (bitintr::x86::bmi).BMI2: Bit Manipulation Instruction Set 2.0 (bitintr::x86::bmi2).
-
ARM (
bitintr::arm):
The actual code generated depends on the integer types involved and the features supported by the target architecture.
Verified assembly
The check_asm.py script verifies 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.