【发布时间】:2016-09-11 16:03:58
【问题描述】:
根据微软(here 和here)的说法,该公司将在即将推出的 Windows 10 版本中支持 ARMv8/Aarch64(ARM-64)。此外,微软有already supplied previews,所以我猜工具支持是到位。
对于那些不知道的人,images provided with the article 清楚地显示了 Qualcomm Snapdragon 410。那是 A-53 内核及其 Aarch64/ARM-64。
Microsoft 为 ARM-32 定义了_M_ARM,我们目前使用它来检测 NEON 的可用性。 ARMv8 支持可选扩展 CRC32、AES、SHA-1 和 SHA-2。我们已经为 Apple 和 Linux 编写了代码,我们希望在 Microsoft 平台上启用它。
微软也有__M_ARM_FP,但不清楚用它来检测ARM64。我也不清楚 x86 的相关性:
扩展为一个整数文字值,指示哪个 /arch 编译器 使用了选项:
- 如果未指定 /arch ARM 选项,则在 30-39 范围内,表示使用了 ARM 的默认架构 (VFPv3)。
- 如果使用 /arch:VFPv4,则在 40-49 范围内。
- 有关详细信息,请参阅 /arch (x86)。
我对可用的 Microsoft 编译器进行了一些快速测试(所有这些编译器都可以追溯到 VC++ 5.0)。他们未能使用 ARMv8 内在函数,这并不奇怪。我猜我需要 MSDN 订阅才能使用最新工具进行测试,但我不再订阅了。
我的问题是:
- 我们如何在预处理器中检测 ARMv8/Aarch64 (
_M_ARM64?) - 什么版本的编译器 (
_MSC_VER) 支持 ARMv8 指令
【问题讨论】:
-
Intrinsics 是编译器实现细节,与 SDK 无关。使用这样的旧编译器无法让您获得任何好处,VS 版本 15(不是 VS2015)现在也处于预览状态。预计 alpha 版本会出现问题,向 connect.microsoft.com 报告错误和缺少的功能,而不是 SO。或者只是等到它完成。
-
@HansPassant - 我不确定你在说什么关于报告错误???这是一个简单的问题:微软正在支持 ARM64,那么我们如何检测它呢?对于 Stack Overflow 来说,这是一个完美的问题。
-
这些链接中都没有提到 ARM64,都说“ARM”和最大 4GB RAM(用于移动设备),“工业”物联网版本不支持 ARM。
-
@BenVoigt - ARMv8 是 AArch64。它还提供了一个 AArch32 执行环境,这很像 Linux 多架构和 Windows on Windows (WoW64)。
-
@jww 是的,ARM32 版本的 Windows IoT 在 ARM64 硬件(包括 RPi3)上运行良好。但这一点不像WOW64,它更像x86_64 CPU模式。 WOW64 允许应用程序和操作系统之间的不匹配,但我们正在谈论的是操作系统和 CPU 之间的不匹配。
标签: visual-studio macros arm 64-bit c-preprocessor