1 /*===---- rdseedintrin.h - RDSEED intrinsics -------------------------------===
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
7 *===-----------------------------------------------------------------------===
11 #error "Never use <rdseedintrin.h> directly; include <immintrin.h> instead."
14 #ifndef __RDSEEDINTRIN_H
15 #define __RDSEEDINTRIN_H
17 /* Define the default attributes for the functions in this file. */
18 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("rdseed")))
20 /// Stores a hardware-generated 16-bit random value in the memory at \a __p.
22 /// The random number generator complies with NIST SP800-90B and SP800-90C.
25 /// IF HW_NRND_GEN.ready == 1
26 /// Store16(__p, HW_NRND_GEN.data)
34 /// \headerfile <immintrin.h>
36 /// This intrinsic corresponds to the \c RDSEED instruction.
39 /// Pointer to memory for storing the 16-bit random number.
40 /// \returns 1 if a random number was generated, 0 if not.
41 static __inline__
int __DEFAULT_FN_ATTRS
42 _rdseed16_step(unsigned short *__p
)
44 return (int) __builtin_ia32_rdseed16_step(__p
);
47 /// Stores a hardware-generated 32-bit random value in the memory at \a __p.
49 /// The random number generator complies with NIST SP800-90B and SP800-90C.
52 /// IF HW_NRND_GEN.ready == 1
53 /// Store32(__p, HW_NRND_GEN.data)
61 /// \headerfile <immintrin.h>
63 /// This intrinsic corresponds to the \c RDSEED instruction.
66 /// Pointer to memory for storing the 32-bit random number.
67 /// \returns 1 if a random number was generated, 0 if not.
68 static __inline__
int __DEFAULT_FN_ATTRS
69 _rdseed32_step(unsigned int *__p
)
71 return (int) __builtin_ia32_rdseed32_step(__p
);
75 /// Stores a hardware-generated 64-bit random value in the memory at \a __p.
77 /// The random number generator complies with NIST SP800-90B and SP800-90C.
80 /// IF HW_NRND_GEN.ready == 1
81 /// Store64(__p, HW_NRND_GEN.data)
89 /// \headerfile <immintrin.h>
91 /// This intrinsic corresponds to the \c RDSEED instruction.
94 /// Pointer to memory for storing the 64-bit random number.
95 /// \returns 1 if a random number was generated, 0 if not.
96 static __inline__
int __DEFAULT_FN_ATTRS
97 _rdseed64_step(unsigned long long *__p
)
99 return (int) __builtin_ia32_rdseed64_step(__p
);
103 #undef __DEFAULT_FN_ATTRS
105 #endif /* __RDSEEDINTRIN_H */