2016-05-15 82 views
1

根據微軟公司(herehere),該公司將在即將推出的Windows 10版本中支持ARMv8/Aarch64(ARM-64)。此外,微軟有already supplied previews,所以我猜測工具支持已經到位。在預處理器中檢測ARM-64?

對於那些沒有意識到的,images provided with the article清楚地顯示了Qualcomm Snapdragon 410.這是一個A-53內核和它的Aarch64/ARM-64。

微軟爲ARM-32定義了_M_ARM,我們目前使用它來檢測NEON可用性。 ARMv8支持可選擴展名CRC32,AES,SHA-1和SHA-2。我們已經爲Apple和Linux編寫了他們的代碼,並且我們希望爲Microsoft平臺啓用它。

微軟也有__M_ARM_FP,但不清楚用它來檢測ARM64。我還在x86的相關性不明確:

擴展爲一個整數文字值,指示使用了哪個/拱編譯 選項:

  • 在30-39範圍,如果沒有/拱ARM選項已指定,表示使用了ARM的默認體系結構(VFPv3)。
  • 在範圍40-49 if/arch:VFPv4被使用。
  • 有關更多信息,請參閱/ arch(x86)。

我跑在微軟的編譯器我有一些可用的快速測試(所有的人都可以追溯到VC++ 5.0)。他們沒有使用ARMv8內在函數,這並不奇怪。我猜我需要一個MSDN訂閱來測試最新的工具,但我不再訂閱。

我的問題是:

  • 我們如何檢測ARMv8/Aarch64在預處理器(_M_ARM64?)
  • 什麼編譯器的版本(_MSC_VER)支持ARMv8指令

這可能是相關的:What is WINAPI_FAMILY_ONECORE_APP?

+0

內部函數是一個編譯器實現細節,與SDK無關。使用這樣的舊編譯器不能讓你在任何地方,VS版本15(不是VS2015)現在也在預覽中。期待Alpha版本出現問題,向connect.microsoft.com報告錯誤和缺少的功能,而不是SO。或者等到它完成。 –

+1

@HansPassant - 我不確定你在說什麼報告錯誤?它是一個簡單的問題:微軟支持ARM64,那麼我們如何檢測它?它是堆棧溢出的完美問題。 – jww

+0

ARM64在這兩個鏈接中都沒有提到,它們都表示「ARM」,最大4GB RAM(用於移動設備),在「工業」IoT版本上沒有ARM支持。 –

回答

3

個答案,以相反的順序:

  • 當前發佈的Visual Studio版本都不支持ARMv8/AArch64,他們只支持的ARMv7。儘管Windows 10本身顯示出支持arm64的跡象(有一些針對arm64的可執行文件和庫),但據我所知,迄今爲止已發佈的編譯器版本實際上並沒有包含它。 (Visual Studio 2015社區至少不包括它,而且幾天前發佈的新Visual Studio「15」Preview 2也是如此)。顯然,它存在於內部,但它並沒有成爲任何一部分尚未公開發布。

  • 至於什麼定義尋找;這是目前未知的,因爲目前沒有公開的編譯器arm64目標版本的文檔,因爲它還沒有發佈,而且也不能經驗性地進行測試。

我沒有看到任何來自Microsoft的明確聲明或者您的鏈接的話,這將是支持的,但至少在Windows 10 SDK確實表明它正在處理明顯跡象。


編輯:

即使編譯器不可用,在Windows 10 SDK(它本身包含了ARM64庫)頭和Visual C++ 2015年的頭文件(其中沒有匹配的ARM64庫)還含有對此的引用。與_M_ARM類似,還有_M_ARM64。從vc/include/intrin.h一個片段:

#if defined (_M_ARM) 
    #include <armintr.h> 
    #include <arm_neon.h> 
#endif 

#if defined (_M_ARM64) 
    #include <arm64intr.h> 
    #include <arm64_neon.h> 
#endif 

EDIT2:

雖然沒有公版的Visual C++編譯器瞄準arm64的產品尚未推出,鐺越來越支持的第一部分爲Windows/arm64和他們還利用_M_ARM64

https://github.com/llvm-project/clang/commit/5b7d7d2b2d0bd7054f51b9d108cdd5299a0ec33e#diff-ed544af3ae6807a8513b1cabb3233941R6576


編輯3:

隨着Visual Studio 2017 15.4版的最新更新,ARM64編譯器被髮布。在安裝程序中,可以手動檢查「Visual C++編譯器和ARM64庫」項目(默認情況下未啓用)。

這樣做之後,可以啓動「開發者命令提示符爲VS 2017年」,並在shell中運行「vsdevcmd -arch = arm64 -host_arch = amd64的」,那麼你已經有了路徑編譯:

********************************************************************** 
** Visual Studio 2017 Developer Command Prompt v15.4.0 
** Copyright (c) 2017 Microsoft Corporation 
********************************************************************** 

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>vsdevcmd -arch=arm64 -host_arch=amd64 
********************************************************************** 
** Visual Studio 2017 Developer Command Prompt v15.4.0 
** Copyright (c) 2017 Microsoft Corporation 
********************************************************************** 

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>cl 
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for ARM64 
Copyright (C) Microsoft Corporation. All rights reserved. 

usage: cl [ option... ] filename... [ /link linkoption... ] 

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> 

而這個編譯器預先定義了_M_ARM64它允許你識別它,從而回答這個問題。

+0

謝謝@mstorsjo。你有MSDN訂閱嗎?有人可以使用最新的工具,他們可能會知道答案。我不再有MSDN訂閱,所以我必須要求Stack Overflow,並等待有權訪問的人回答。 – jww

+0

不,我沒有MSDN訂閱,所以我無法檢查,但我測試了https://www.visualstudio.com/en-us/downloads/visual-studio-next-downloads-vs.aspx這是不到一週前發佈的,afaik。 – mstorsjo

+1

微軟正式要求[向Visual Studio添加ARM64支持](https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/13362909-add-support-for-arm64),如果你願意,你可以放心。 – Akeo