arm64ec-pc-windows-msvc
Tier: 2
Arm64EC ("Emulation Compatible"),适用于 AArch64 Windows 11 上混合架构(AArch64 和 x86_64)应用程序。 请参阅 https://learn.microsoft.com/en-us/windows/arm/arm64ec。
Target maintainers
Requirements
构建可在 AArch64 Windows 11 设备上运行的 Arm64EC 静态库、动态库和可执行文件。Arm64EC 静态库也可以链接到 Arm64X 动态库和可执行文件中。
唯一支持的后端是 LLVM 18 或更高版本
- 18.1.0 添加了对 Arm64EC 的初始支持。
- 18.1.2 修复了导入库生成问题(
raw-dylib
支持所需)。 - 18.1.4 修复了在
compiler_builtins
中实现的某些内部函数的链接问题。
需要安装 Visual Studio 2022(或更高版本),并包含“ARM64/ARM64EC 生成工具”组件和 Windows 11 SDK。
重用来自其他架构的代码 - x86_64 还是 AArch64?
Arm64EC 使用 arm64ec
作为其 target_arch
,但在大多数情况下可以重用现有的特定于架构的代码。 决定重用哪个架构的最佳心智模型是将 Arm64EC 视为一个 x86_64 进程,它恰好使用 AArch64 指令集(有一些注意事项)并具有完全自定义的 ABI。
To put this in practice
- Arm64EC 与操作系统、其他进程和其他 DLL 的交互方式与 x86_64 相同。
- 例如,在
backtrace
中,我们使用 x86_64 版本的CONTEXT
和RtlVirtualUnwind
。 - 如果您正在配置搜索路径以查找 DLL(例如,将插件或附加组件加载到您的应用程序中),则应使用与 x86_64 版本的应用程序相同的路径,而不是 AArch64 路径(因为 Arm64EC(即 x86_64)进程无法加载原生 AArch64 DLL)。
- 例如,在
- Arm64EC 使用 AArch64 intrinsics。
- AArch64 的汇编代码可能可以重用于 Arm64EC,但存在许多注意事项。 有关完整详细信息,请参阅 Microsoft 关于 Arm64EC ABI 的文档,但简而言之
- Arm64EC 使用 AArch64 寄存器的子集。
- Arm64EC 使用与 AArch64 不同的名称修饰方案。
- Arm64EC 要求为某些函数生成入口和出口 thunk。
- 间接调用必须通过调用检查器完成。
- Control Flow Guard 和堆栈检查使用与 AArch64 不同的函数。
Building the target
您可以通过将其添加到 config.toml
中的 target
列表来构建支持这些目标的 Rust
[build]
target = ["arm64ec-pc-windows-msvc"]
Building Rust programs
这些目标通过 rustup
分发,并且在其他方面不需要特殊配置。
Testing
测试可以在 AArch64 Windows 11 设备上运行。
Cross-compilation toolchains and C code
C 代码可以使用面向 Arm64 的 MSVC 或 Clang 工具链构建。
To compile
cl /arm64EC /c ...
To link
link /MACHINE:ARM64EC ...
Further reading: https://learn.microsoft.com/en-us/windows/arm/arm64ec-build