1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
use word::Word; use bitintr; /// Returns mask with the least significant set bit of `x` set to 1. /// /// If `x` is 0 returns 0. /// /// # Intrinsics: /// - BMI 1.0: blsi. /// - TBM: blsic, not. /// /// # Examples /// /// ``` /// use bitwise::word::*; /// /// let n = 0b0110; /// let s = 0b0010; /// /// assert_eq!(n.isolate_least_significant_one(), s); /// assert_eq!(isolate_least_significant_one(0), 0); /// ``` #[inline] pub fn isolate_least_significant_one<T: Word>(x: T) -> T { bitintr::x86::bmi::blsi(x) } /// Method version of [`isolate_least_significant_one`](fn.isolate_least_significant_one.html). pub trait IsolateLeastSignificantOne { #[inline] fn isolate_least_significant_one(self) -> Self; } impl<T: Word> IsolateLeastSignificantOne for T { #[inline] fn isolate_least_significant_one(self) -> Self { isolate_least_significant_one(self) } }