Microsoft编译器下_rdrand_step内在函数的可用性?

时间:2015-10-12 02:58:05

标签: c windows visual-studio c-preprocessor rdrand

根据微软的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页。

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法检查MS编译器的版本:

  1. MSVC ++ 14.0 _MSC_VER == 1900(Visual Studio 2015) Detailed

  2. 我不确定如何在AMD架构中使用它。如果我得到解决方案,会通知您

  3. 您可以获得MS文档称之为amd64 in this post的答案。

答案 1 :(得分:1)

  

首先,我如何检测内在函数的可用性。也就是说,我应该使用什么预处理器宏来保护调用_drand64_step。

以下是RDRAND内在函数所需的编译器版本:

  • Microsoft于2012年8月添加了RDRAND,VS2012。测试_MSC_VER >= 1700
  • 海湾合作委员会于2010年12月增加了RDRAND,GCC 4.6。
  • Clang于2012年7月增加了RDRAND,Clang 3.2。
  • 英特尔于2011年9月增加了RDRAND,ICC 12.1。
  

其次,如何在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组合。