const RETRIES: i32 = 10;
#[inline]
pub fn next_rdrand_u32_or_panic() -> u32 {
#[cfg(target_arch = "x86")]
use core::arch::x86::_rdrand32_step;
#[cfg(target_arch = "x86_64")]
use core::arch::x86_64::_rdrand32_step;
let mut result: u32 = 0;
let mut retries = RETRIES;
while retries > 0 {
if 1 == unsafe { _rdrand32_step(&mut result) } && result != 0 && result != 0xFFFF_FFFFu32 {
return result;
}
retries -= 1;
}
panic!("_rdrand32_step unexpectedly failed {} times", RETRIES);
}
#[cfg(target_arch = "x86_64")]
#[inline]
pub fn next_rdrand_u64_or_panic() -> u64 {
use core::arch::x86_64::_rdrand64_step;
let mut result: u64 = 0;
let mut retries = RETRIES;
while retries > 0 {
if 1 == unsafe { _rdrand64_step(&mut result) }
&& result != 0
&& result != 0xFFFF_FFFF_FFFF_FFFFu64
{
return result;
}
retries -= 1;
}
panic!("_rdrand64_step unexpectedly failed {} times", RETRIES);
}