In June 2021, Microsoft announced ARM64EC for Windows 11. It described ARM64EC as a new way to upgrade your existing x64 apps with the native performance you expect on ARM, even if you’re using plugins and dependencies that don’t support still in charge of the architecture. More than a year after the initial announcement, ARM64EC is now fully supported on Windows 11.
For those who don’t know, the “EC” in the name is an abbreviation for “Emulation Compatible”. The idea is to provide an Application Binary Interface (ABI) that allows developers to create applications using both x64 and ARM code. This means that ARM code will run natively on a Windows 11 device on ARM, while x64-specific code will run through emulation. This is also a milestone for Windows 11 on ARM, as it is the only supported Microsoft operating system to offer x64 emulation, which is the backbone of ARM64EC.
Microsoft noted that the ARM64EC ABI is different from the ARM64 ABI in the following ways:
The ARM64EC ABI differs slightly from the existing ARM64 ABI in a way that makes it binary compatible with x64 code. Specifically, the ARM64EC ABI follows x64 software conventions, including calling convention, stack usage, and data alignment, which makes ARM64EC and x64 interoperable. Applications built as ARM64EC may contain x64 code, but this is not required, as ARM64EC is its own comprehensive, first-class ABI for Windows.
After spending more than a year in development, Microsoft believes that the ABI is now stable enough to move from its experimental phase to the general release. This happened with the availability of ARM64EC version 17.3.
ARM64EC brings major benefits to developers. Instead of following an all-or-nothing approach where they would have to make sure their entire code base is ARM compatible, developers can now update their code incrementally and run x64 and ARM functionality simultaneously. Of course, on a Windows device on ARM, the latter will have better performance, so the idea is to continuously update the codebase to improve native ARM performance without losing any functionality in the process.
Microsoft noted that it was targeting performance improvements in later versions of ARM64EC. You can find more details on how to get started here.