[Flang] remove whole-archive option for AIX linker (#76039)
[llvm-project.git] / clang / lib / Headers / rdseedintrin.h
blob8a4fe093055b2f97a1b06f79244d9bf53c21c60f
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 *===-----------------------------------------------------------------------===
8 */
10 #ifndef __IMMINTRIN_H
11 #error "Never use <rdseedintrin.h> directly; include <immintrin.h> instead."
12 #endif
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.
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.
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.
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.
68 static __inline__ int __DEFAULT_FN_ATTRS
69 _rdseed32_step(unsigned int *__p)
71 return (int) __builtin_ia32_rdseed32_step(__p);
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.
96 static __inline__ int __DEFAULT_FN_ATTRS
97 _rdseed64_step(unsigned long long *__p)
99 return (int) __builtin_ia32_rdseed64_step(__p);
101 #endif
103 #undef __DEFAULT_FN_ATTRS
105 #endif /* __RDSEEDINTRIN_H */