aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/clang/lib/Headers/rdseedintrin.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/clang/lib/Headers/rdseedintrin.h')
-rw-r--r--contrib/llvm-project/clang/lib/Headers/rdseedintrin.h73
1 files changed, 68 insertions, 5 deletions
diff --git a/contrib/llvm-project/clang/lib/Headers/rdseedintrin.h b/contrib/llvm-project/clang/lib/Headers/rdseedintrin.h
index ccb3d2dd2294..8a4fe093055b 100644
--- a/contrib/llvm-project/clang/lib/Headers/rdseedintrin.h
+++ b/contrib/llvm-project/clang/lib/Headers/rdseedintrin.h
@@ -7,8 +7,8 @@
*===-----------------------------------------------------------------------===
*/
-#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
-#error "Never use <rdseedintrin.h> directly; include <x86intrin.h> instead."
+#ifndef __IMMINTRIN_H
+#error "Never use <rdseedintrin.h> directly; include <immintrin.h> instead."
#endif
#ifndef __RDSEEDINTRIN_H
@@ -17,23 +17,86 @@
/* Define the default attributes for the functions in this file. */
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("rdseed")))
+/// Stores a hardware-generated 16-bit random value in the memory at \a __p.
+///
+/// The random number generator complies with NIST SP800-90B and SP800-90C.
+///
+/// \code{.operation}
+/// IF HW_NRND_GEN.ready == 1
+/// Store16(__p, HW_NRND_GEN.data)
+/// result := 1
+/// ELSE
+/// Store16(__p, 0)
+/// result := 0
+/// END
+/// \endcode
+///
+/// \headerfile <immintrin.h>
+///
+/// This intrinsic corresponds to the \c RDSEED instruction.
+///
+/// \param __p
+/// Pointer to memory for storing the 16-bit random number.
+/// \returns 1 if a random number was generated, 0 if not.
static __inline__ int __DEFAULT_FN_ATTRS
_rdseed16_step(unsigned short *__p)
{
- return __builtin_ia32_rdseed16_step(__p);
+ return (int) __builtin_ia32_rdseed16_step(__p);
}
+/// Stores a hardware-generated 32-bit random value in the memory at \a __p.
+///
+/// The random number generator complies with NIST SP800-90B and SP800-90C.
+///
+/// \code{.operation}
+/// IF HW_NRND_GEN.ready == 1
+/// Store32(__p, HW_NRND_GEN.data)
+/// result := 1
+/// ELSE
+/// Store32(__p, 0)
+/// result := 0
+/// END
+/// \endcode
+///
+/// \headerfile <immintrin.h>
+///
+/// This intrinsic corresponds to the \c RDSEED instruction.
+///
+/// \param __p
+/// Pointer to memory for storing the 32-bit random number.
+/// \returns 1 if a random number was generated, 0 if not.
static __inline__ int __DEFAULT_FN_ATTRS
_rdseed32_step(unsigned int *__p)
{
- return __builtin_ia32_rdseed32_step(__p);
+ return (int) __builtin_ia32_rdseed32_step(__p);
}
#ifdef __x86_64__
+/// Stores a hardware-generated 64-bit random value in the memory at \a __p.
+///
+/// The random number generator complies with NIST SP800-90B and SP800-90C.
+///
+/// \code{.operation}
+/// IF HW_NRND_GEN.ready == 1
+/// Store64(__p, HW_NRND_GEN.data)
+/// result := 1
+/// ELSE
+/// Store64(__p, 0)
+/// result := 0
+/// END
+/// \endcode
+///
+/// \headerfile <immintrin.h>
+///
+/// This intrinsic corresponds to the \c RDSEED instruction.
+///
+/// \param __p
+/// Pointer to memory for storing the 64-bit random number.
+/// \returns 1 if a random number was generated, 0 if not.
static __inline__ int __DEFAULT_FN_ATTRS
_rdseed64_step(unsigned long long *__p)
{
- return __builtin_ia32_rdseed64_step(__p);
+ return (int) __builtin_ia32_rdseed64_step(__p);
}
#endif