根据微软的x64 (amd64) Intrinsics List,微软为 RDRAND 提供了一个内在函数:
_rdrand16_step
_rdrand32_step
_rdrand64_step
但是,该页面没有讨论检测内在函数的可用性。[2]有一个脚注,但它说它仅适用于 Intel CPU。
我有两个问题。首先,我如何检测内在函数的可用性。也就是说,我应该使用什么预处理器宏来保护对 say 的调用_rdrand64_step
。
其次,如何在 AMD CPU 下访问 RDRAND。根据 AMD 手册,AMD 也提供了它。
(更幽默的是,微软将页面命名为 amd64 Intrinsic List。为什么他们不包括 AMD 时称它为 AMD64 Intrinsic List ???)
对于 AMD 和 RDRAND 指令,请参考AMD64 架构程序员手册第 3 卷:通用和系统指令,第 278 页。