根据微软的x64 (amd64) Intrinsics List,微软为RDRAND提供了内在的功能:
_rdrand16_step
_rdrand32_step
_rdrand64_step
但是,该页面没有讨论检测内在的可用性。 [2] 有一个脚注,但它表示它仅适用于Intel CPU。
我有两个问题。首先,我如何检测内在函数的可用性。也就是说,我应该使用什么预处理器宏来保护调用_rdrand64_step
。
其次,如何在AMD CPU下访问RDRAND。根据AMD手册,AMD也提供它。
(更幽默的是,微软将该页面命名为amd64 Intrinsic List。当他们不包括AMD时,为什么称它们为AMD64 Intrinsic List?)
对于AMD和RDRAND指令,请参考AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions,第278页。
答案 0 :(得分:1)
您可以使用以下方法检查MS编译器的版本:
MSVC ++ 14.0 _MSC_VER == 1900(Visual Studio 2015) Detailed
我不确定如何在AMD架构中使用它。如果我得到解决方案,会通知您
您可以获得MS文档称之为amd64 in this post的答案。
答案 1 :(得分:1)
首先,我如何检测内在函数的可用性。也就是说,我应该使用什么预处理器宏来保护调用_drand64_step。
以下是RDRAND内在函数所需的编译器版本:
_MSC_VER >= 1700
。其次,如何在AMD CPU下访问RDRAND。根据AMD手册,AMD也提供它。
提供RDRAND指令的AMD CPU似乎即将推出。也就是说,目前没有任何带有该功能的CPU。
Microsoft文档明确指出内在函数仅适用于Intel CPU。为确保AMD支持given the anti-competitive history between Intel and AMD,ASM应手工制作并与MASM / ML和MASM64 / ML64组合。