clang 20.0.0git
rdseedintrin.h
Go to the documentation of this file.
1/*===---- rdseedintrin.h - RDSEED intrinsics -------------------------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10#ifndef __IMMINTRIN_H
11#error "Never use <rdseedintrin.h> directly; include <immintrin.h> instead."
12#endif
13
14#ifndef __RDSEEDINTRIN_H
15#define __RDSEEDINTRIN_H
16
17/* Define the default attributes for the functions in this file. */
18#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("rdseed")))
19
20/// Stores a hardware-generated 16-bit random value in the memory at \a __p.
21///
22/// The random number generator complies with NIST SP800-90B and SP800-90C.
23///
24/// \code{.operation}
25/// IF HW_NRND_GEN.ready == 1
26/// Store16(__p, HW_NRND_GEN.data)
27/// result := 1
28/// ELSE
29/// Store16(__p, 0)
30/// result := 0
31/// END
32/// \endcode
33///
34/// \headerfile <immintrin.h>
35///
36/// This intrinsic corresponds to the \c RDSEED instruction.
37///
38/// \param __p
39/// Pointer to memory for storing the 16-bit random number.
40/// \returns 1 if a random number was generated, 0 if not.
41static __inline__ int __DEFAULT_FN_ATTRS
42_rdseed16_step(unsigned short *__p)
43{
44 return (int) __builtin_ia32_rdseed16_step(__p);
45}
46
47/// Stores a hardware-generated 32-bit random value in the memory at \a __p.
48///
49/// The random number generator complies with NIST SP800-90B and SP800-90C.
50///
51/// \code{.operation}
52/// IF HW_NRND_GEN.ready == 1
53/// Store32(__p, HW_NRND_GEN.data)
54/// result := 1
55/// ELSE
56/// Store32(__p, 0)
57/// result := 0
58/// END
59/// \endcode
60///
61/// \headerfile <immintrin.h>
62///
63/// This intrinsic corresponds to the \c RDSEED instruction.
64///
65/// \param __p
66/// Pointer to memory for storing the 32-bit random number.
67/// \returns 1 if a random number was generated, 0 if not.
68static __inline__ int __DEFAULT_FN_ATTRS
69_rdseed32_step(unsigned int *__p)
70{
71 return (int) __builtin_ia32_rdseed32_step(__p);
72}
73
74#ifdef __x86_64__
75/// Stores a hardware-generated 64-bit random value in the memory at \a __p.
76///
77/// The random number generator complies with NIST SP800-90B and SP800-90C.
78///
79/// \code{.operation}
80/// IF HW_NRND_GEN.ready == 1
81/// Store64(__p, HW_NRND_GEN.data)
82/// result := 1
83/// ELSE
84/// Store64(__p, 0)
85/// result := 0
86/// END
87/// \endcode
88///
89/// \headerfile <immintrin.h>
90///
91/// This intrinsic corresponds to the \c RDSEED instruction.
92///
93/// \param __p
94/// Pointer to memory for storing the 64-bit random number.
95/// \returns 1 if a random number was generated, 0 if not.
96static __inline__ int __DEFAULT_FN_ATTRS
97_rdseed64_step(unsigned long long *__p)
98{
99 return (int) __builtin_ia32_rdseed64_step(__p);
100}
101#endif
102
103#undef __DEFAULT_FN_ATTRS
104
105#endif /* __RDSEEDINTRIN_H */
static __inline__ uint32_t volatile uint32_t * __p
Definition: arm_acle.h:88
#define __DEFAULT_FN_ATTRS
Definition: rdseedintrin.h:18
static __inline__ int __DEFAULT_FN_ATTRS _rdseed16_step(unsigned short *__p)
Stores a hardware-generated 16-bit random value in the memory at __p.
Definition: rdseedintrin.h:42
static __inline__ int __DEFAULT_FN_ATTRS _rdseed32_step(unsigned int *__p)
Stores a hardware-generated 32-bit random value in the memory at __p.
Definition: rdseedintrin.h:69