根据Microsoft的x64 (amd64) Intrinsics List,Microsoft提供了RDRAND的内在函数:
_rdrand16_step
_rdrand32_step
_rdrand64_step
但是,该页面没有讨论检测内部函数的可用性。脚注带有 [2] ,但它说它仅适用于Intel CPU。
我有两个问题。首先,我如何检测内在函数的可用性。也就是说,我应该使用哪个预处理程序宏来保护调用
_rdrand64_step
的调用。其次,如何在AMD CPU下访问RDRAND。根据AMD手册,AMD也提供它。
(更幽默的是,Microsoft为amd64 Intrinsic List页面添加了标题。为什么不包含AMD时为什么将其称为AMD64 Intrinsic List?)
有关AMD和RDRAND指令,请引用AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions,第278页。
最佳答案
以下是RDRAND内部函数所需的编译器版本:
_MSC_VER >= 1700
。 提供RDRAND指令的AMD CPU即将问世。也就是说,当前没有附带此功能的CPU。
Microsoft文档清楚地声明了内在函数仅适用于Intel CPU。为了确保AMD支持given the anti-competitive history between Intel and AMD,应手工制作ASM并与MASM/ML和MASM64/ML64组装在一起。