簡體   English   中英

Microsoft編譯器下_rdrand_step內在函數是否可用?

[英]Availability of _rdrand_step intrinsics under Microsoft compilers?

根據Microsoft的x64(amd64)內部函數列表 ,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體系結構程序員手冊第3卷:通用和系統指令 ,第278頁。

首先,我如何檢測內在函數的可用性。 也就是說,我應該使用哪個預處理程序宏來保護調用_rdrand64_step的調用。

以下是RDRAND內部函數所需的編譯器版本:

  • 微軟於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。

其次,如何在AMD CPU下訪問RDRAND。 根據AMD手冊,AMD也提供它。

提供RDRAND指令的AMD CPU即將面世。 也就是說,當前沒有附帶此功能的CPU。

Microsoft文檔明確聲明了內在函數僅適用於Intel CPU。 考慮到Intel和AMD之間的反競爭歷史,要確保AMD支持,ASM應該手工制作並與MASM / ML和MASM64 / ML64組裝在一起。

您可以使用以下命令檢查MS編譯器的版本:

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

  2. 我不確定如何在AMD體系結構中使用它。 如果我有解決辦法,會告訴您

  3. 在這篇文章中,您可以獲得MS文檔將其稱為amd64的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM