自VS2017起,使用_M_ARM64
。详情请见下文。
按相反顺序回答:
- 目前发布的所有Visual Studio版本都不支持ARMv8/AArch64,只支持ARMv7。尽管Windows 10本身显示出对arm64的支持迹象(有一些arm64的可执行文件和库),但据我所知,迄今为止发行的编译器版本都没有包括它(至少Visual Studio 2015 Community没有包括它,最近发布的新版Visual Studio“15”预览版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
编辑2:
尽管目前没有针对arm64的Visual C++编译器的公共版本可用,但clang正在获得支持Windows/arm64的第一批部分,并且他们也使用了_M_ARM64
:
https://github.com/llvm-project/clang/commit/5b7d7d2b2d0bd7054f51b9d108cdd5299a0ec33e#diff-ed544af3ae6807a8513b1cabb3233941R6576
编辑3:
随着Visual Studio 2017最新更新,即15.4版本,ARM64编译器已经发布。在安装程序中,可以手动选中“适用于ARM64的Visual C++编译器和库”项目(默认情况下未启用)。
完成后,您可以启动“面向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
,它允许你识别它,从而回答了这个问题。