根据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内部函数所需的编译器版本:

  • Microsoft在2012年8月,VS2012中添加了RDRAND。测试_MSC_VER >= 1700
  • GCC于2010年12月在GCC 4.6中添加了RDRAND。
  • Clang于2012年7月在Clang 3.2中添加了RDRAND。
  • 英特尔于2011年9月在ICC 12.1中添加了RDRAND。



  • 提供RDRAND指令的AMD CPU即将问世。也就是说,当前没有附带此功能的CPU。

    Microsoft文档清楚地声明了内在函数仅适用于Intel CPU。为了确保AMD支持given the anti-competitive history between Intel and AMD,应手工制作ASM并与MASM/ML和MASM64/ML64组装在一起。

    10-06 15:07