evm_gasometer/utils.rs
1use primitive_types::U256;
2
3pub fn log2floor(value: U256) -> u64 {
4 assert!(value != U256::zero());
5 let mut l: u64 = 256;
6 for i in 0..4 {
7 let i = 3 - i;
8 if value.0[i] == 0u64 {
9 l -= 64;
10 } else {
11 l -= value.0[i].leading_zeros() as u64;
12 if l == 0 {
13 return l;
14 } else {
15 return l - 1;
16 }
17 }
18 }
19 l
20}