Visual studio 在预处理器中检测ARM-64?

Visual studio 在预处理器中检测ARM-64?,visual-studio,macros,arm,64-bit,c-preprocessor,Visual Studio,Macros,Arm,64 Bit,C Preprocessor,据微软(和)称,该公司将在即将发布的Windows10版本中支持ARMv8/Aarch64(ARM-64)。另外,微软也有,所以我猜工具支持已经到位了 对于那些不知道的人,屏幕上清楚地显示了高通Snapdragon 410。这是一个A-53核心,它的Aarch64/ARM-64 Microsoft为ARM-32定义了\u M_ARM,我们目前使用它来检测霓虹灯的可用性。ARMv8支持可选扩展CRC32、AES、SHA-1和SHA-2。我们已经为苹果和Linux编写了相应的代码,我们希望能够在微软

据微软(和)称,该公司将在即将发布的Windows10版本中支持ARMv8/Aarch64(ARM-64)。另外,微软也有,所以我猜工具支持已经到位了

对于那些不知道的人,屏幕上清楚地显示了高通Snapdragon 410。这是一个A-53核心,它的Aarch64/ARM-64

Microsoft为ARM-32定义了
\u M_ARM
,我们目前使用它来检测霓虹灯的可用性。ARMv8支持可选扩展CRC32、AES、SHA-1和SHA-2。我们已经为苹果和Linux编写了相应的代码,我们希望能够在微软平台上使用

微软也有,但不清楚如何使用它来检测ARM64。我也不清楚x86的相关性:

展开为整数文本值,指示哪个/arch编译器 使用了以下选项:

  • 如果未指定/arch ARM选项,则范围为30-39,表示使用了ARM的默认体系结构(VFPv3)
  • 在40-49范围内,使用了if/arch:VFPv4
  • 有关更多信息,请参阅/arch(x86)
我在现有的Microsoft编译器上运行了一些快速测试(所有这些编译器都可以追溯到VC++5.0)。他们未能使用ARMv8内部函数,这并不奇怪。我猜我需要一个MSDN订阅来使用最新的工具进行测试,但我已经没有这个订阅了

我的问题是:

  • 如何在预处理器中检测ARMv8/Aarch64(
    \u M_ARM64
    ?)
  • 哪个版本的编译器(
    \u MSC\u VER
    )支持ARMv8指令


这可能是相关的:

从VS2017开始的VS使用
\u M_ARM64
,有关更多详细信息,请参阅下文

按相反顺序回答:

  • 当前发布的Visual Studio版本都不支持ARMv8/AArch64,它们只支持ARMv7。尽管Windows 10本身显示出支持arm64的迹象(arm64有一些可执行文件和库),但据我所知,迄今为止发布的编译器版本中没有一个包含它。(VisualStudio2015社区至少没有包括它,几天前发布的新的VisualStudio“15”预览版2也没有包括它。)很明显,它存在于内部,但尚未成为任何公开发布的一部分

  • 至于要寻找什么;这一点目前还不清楚,因为arm64目标版本的编译器还没有公开文档,因为它还没有发布,也无法进行经验测试

我看不到微软在你的链接中有任何明确的声明说它将受到支持,但至少Windows10SDK确实显示出它正在开发的明显迹象


编辑:

<> P>即使编译器不可用,Windows 10 SDK(它本身包含用于ARM64的LIBS)标题和Visual C++ 2015头(没有匹配的ARM64 LIB)也包含对此的引用。与
\u M_ARM
类似,还有
\u 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

这个编译器预定义了
\u M_ARM64
,允许您识别它,从而回答了这个问题。

内部函数是一个编译器实现细节,与SDK无关。使用这样的旧编译器无法实现任何目的,VS版本15(不是VS2015)也正在预览中。不要期望alpha版本出现问题,而是向connect.microsoft.com报告bug和缺少的功能。或者等到它完成。@HansPassant-我不知道你在说什么关于报告bug???这是一个简单的问题:微软支持ARM64,那么我们如何检测它呢?对于堆栈溢出来说,这是一个完美的问题。这两个链接中都没有提到ARM64,都说“ARM”和最大4GB RAM(用于移动设备),在“工业”物联网版本上不支持ARM。@BenVoigt-ARMv8是AArch64。它还提供了AArch32执行环境,非常类似于Linux multiarch和Windows上的Windows(WoW64)。@jww是的,ARM32版本的Windows IoT在ARM64硬件上运行良好,包括RPi3。但这与WOW64不同,它更像x86_64 CPU模式。WOW64允许应用程序和操作系统之间不匹配,但我们讨论的是操作系统和CPU之间的不匹配。谢谢@mstorsjo。您有MSDN订阅吗?有人可以使用最新的工具,他们很可能知道答案。我不再有MSDN订阅,所以我必须询问堆栈溢出问题,并等待有权限的人回答。不,我没有MSDN订阅,所以我无法检查,但我测试了不到一周前发布的MSDN订阅。有一个官方请求Microsoft,如果你愿意,你可以升级投票。这可能是相关的:没有,那没有关系。在VisualStudio的公共版本中提供对arm64的支持之前,继续猜测是毫无意义的。它只是还没有公开,那些可能提前访问(如果有的话)的人可能不被允许告诉你。
**********************************************************************
** 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>