2016-05-15 83 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