xref: /DragonOS/kernel/src/arch/x86_64/asm/bitops.rs (revision 1496ba7b24a5e6954291ca9643b9f3cec567479a)
1*1496ba7bSLoGin #![allow(dead_code)]
21a2eaa40Slogin use core::arch::x86_64::_popcnt64;
31a2eaa40Slogin 
41a2eaa40Slogin /// @brief ffz - 寻找u64中的第一个0所在的位(从第0位开始寻找)
51a2eaa40Slogin /// 请注意,如果x中没有0,那么结果将是未定义的。请确保传入的x至少存在1个0
61a2eaa40Slogin ///
71a2eaa40Slogin /// @param x 目标u64
81a2eaa40Slogin /// @return i32 bit-number(0..63) of the first (least significant) zero bit.
91a2eaa40Slogin #[inline]
ffz(x: u64) -> i32101a2eaa40Slogin pub fn ffz(x: u64) -> i32 {
111a2eaa40Slogin     return unsafe { _popcnt64((x & ((!x) - 1)).try_into().unwrap()) };
121a2eaa40Slogin }
13