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}