core/stdarch/crates/core_arch/src/x86/
rdrand.rs1#![allow(clippy::module_name_repetitions)]
5
6#[allow(improper_ctypes)]
7unsafe extern "unadjusted" {
8    #[link_name = "llvm.x86.rdrand.16"]
9    fn x86_rdrand16_step() -> (u16, i32);
10    #[link_name = "llvm.x86.rdrand.32"]
11    fn x86_rdrand32_step() -> (u32, i32);
12    #[link_name = "llvm.x86.rdseed.16"]
13    fn x86_rdseed16_step() -> (u16, i32);
14    #[link_name = "llvm.x86.rdseed.32"]
15    fn x86_rdseed32_step() -> (u32, i32);
16}
17
18#[cfg(test)]
19use stdarch_test::assert_instr;
20
21#[inline]
26#[target_feature(enable = "rdrand")]
27#[cfg_attr(test, assert_instr(rdrand))]
28#[stable(feature = "simd_x86", since = "1.27.0")]
29pub unsafe fn _rdrand16_step(val: &mut u16) -> i32 {
30    let (v, flag) = x86_rdrand16_step();
31    *val = v;
32    flag
33}
34
35#[inline]
40#[target_feature(enable = "rdrand")]
41#[cfg_attr(test, assert_instr(rdrand))]
42#[stable(feature = "simd_x86", since = "1.27.0")]
43pub unsafe fn _rdrand32_step(val: &mut u32) -> i32 {
44    let (v, flag) = x86_rdrand32_step();
45    *val = v;
46    flag
47}
48
49#[inline]
54#[target_feature(enable = "rdseed")]
55#[cfg_attr(test, assert_instr(rdseed))]
56#[stable(feature = "simd_x86", since = "1.27.0")]
57pub unsafe fn _rdseed16_step(val: &mut u16) -> i32 {
58    let (v, flag) = x86_rdseed16_step();
59    *val = v;
60    flag
61}
62
63#[inline]
68#[target_feature(enable = "rdseed")]
69#[cfg_attr(test, assert_instr(rdseed))]
70#[stable(feature = "simd_x86", since = "1.27.0")]
71pub unsafe fn _rdseed32_step(val: &mut u32) -> i32 {
72    let (v, flag) = x86_rdseed32_step();
73    *val = v;
74    flag
75}