ethnum/intrinsics/native/
ctz.rs

1//! This module implements intrinsics for counting trailing and leading zeros
2//! for 256-bit integers.
3
4use crate::uint::U256;
5
6#[inline]
7pub fn ctlz(a: &U256) -> u32 {
8    let f = -((*a.high() == 0) as i128) as u128;
9    ((a.high() & !f) | (a.low() & f)).leading_zeros() + ((f as u32) & 128)
10}
11
12#[inline]
13pub fn cttz(a: &U256) -> u32 {
14    let f = -((*a.low() == 0) as i128) as u128;
15    ((a.high() & f) | (a.low() & !f)).trailing_zeros() + ((f as u32) & 128)
16}