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 40 41
use word::Word; use bitintr; /// Count the number of trailing zeros in the binary representation of `x`. /// /// # Keywords: /// /// Count trailing zeros. /// /// # Intrinsics: /// - BMI 1.0: tzcnt. /// - gcc/llvm builtin: `x == 0 ? mem::size_of(x) * 8 : __builtin_ctz(x)`. /// /// # Examples /// /// ``` /// use bitwise::word::*; /// /// let n = 0b0010_1000u16; /// /// assert_eq!(n.count_trailing_zeros(), 3); /// assert_eq!(count_trailing_zeros(n), 3); /// ``` #[inline] pub fn count_trailing_zeros<T: Word>(x: T) -> T { bitintr::x86::bmi::tzcnt(x) } /// Method version of [`count_trailing_zeros`](fn.count_trailing_zeros.html). pub trait CountTrailingZeros { #[inline] fn count_trailing_zeros(self) -> Self; } impl<T: Word> CountTrailingZeros for T { #[inline] fn count_trailing_zeros(self) -> Self { count_trailing_zeros(self) } }