123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- use rand_xoshiro::rand_core::{RngCore, SeedableRng};
- use rand_xoshiro::Xoshiro128StarStar;
- use compiler_builtins::int::__clzsi2;
- use compiler_builtins::int::leading_zeros::{
- usize_leading_zeros_default, usize_leading_zeros_riscv,
- };
- #[test]
- fn __clzsi2_test() {
-
-
-
-
- let mut rng = Xoshiro128StarStar::seed_from_u64(0);
- let mut x = 0usize;
-
- let bit_indexing_mask = usize::MAX.count_ones() - 1;
-
-
- for _ in 0..10_000 {
- let r0 = bit_indexing_mask & rng.next_u32();
-
- let ones: usize = !0 >> r0;
- let r1 = bit_indexing_mask & rng.next_u32();
-
- let mask = ones.rotate_left(r1);
- match rng.next_u32() % 4 {
- 0 => x |= mask,
- 1 => x &= mask,
-
- _ => x ^= mask,
- }
- let lz = x.leading_zeros() as usize;
- let lz0 = __clzsi2(x);
- let lz1 = usize_leading_zeros_default(x);
- let lz2 = usize_leading_zeros_riscv(x);
- if lz0 != lz {
- panic!("__clzsi2({}): expected: {}, found: {}", x, lz, lz0);
- }
- if lz1 != lz {
- panic!(
- "usize_leading_zeros_default({}): expected: {}, found: {}",
- x, lz, lz1
- );
- }
- if lz2 != lz {
- panic!(
- "usize_leading_zeros_riscv({}): expected: {}, found: {}",
- x, lz, lz2
- );
- }
- }
- }
|