6 ms·
I'd be curious to know the compiler used by the Geekbench version they tested. MSVC2019+ now include "volatile metadata" to the output executables to make emul
by MayeulC 3d ago
I'd be curious to know the compiler used by the Geekbench version they tested.
MSVC2019+ now include "volatile metadata" to the output executables to make emulation on ARM faster[0][1], though it seems to be off by default since MSVC2022, I am curious to know why they disabled it.
Microsoft now also offers an "Arm64EC" ABI, that, as I understand it, helps calling into native ARM libraries from emulated x86 code by avoiding the need to translate calling conventions, but that's mostly relevant for third-party libraries in this context (I imagine that Microsoft ships all system libraries with the "emulation compatible" ABI with Prism?).
I'd be curious to see some Prism vs FEX (vs Rosetta vs Box64) benchmarks.
[0]: https://fex-emu.com/FEX-2504/#windows-pe-volatile-metadata-support https://fex-emu.com/FEX-2504/#windows-pe-volatile-metadata-s...
[1]: https://learn.microsoft.com/en-us/cpp/build/reference/volatile?view=msvc-170 https://learn.microsoft.com/en-us/cpp/build/reference/volati...
- ack_complete 3d ago> though it seems to be off by default since MSVC2022 This seems to be a typo in the docs, VS2022 is 17.x and still generates volatile metadata. VS2026 is 18.x. Last time I tested it, the penalty in Prism for running x64 code without volatile metadata was ~25% on Snapdragon X. ARM64EC code is essentially x64 code pre-translated to ARM64. It's built against the x64 emulation ABI conventions but runs directly as native ARM64 code. Translation thunking conventions allow for cross-calling between ARM64EC and emulated x64 code. A lot of the OS libs are shipped in Windows 11 ARM as ARM64X, so they're hybrid ARM64EC+ARM64. x86 libs like MSVCRT.DLL do still seem to be compiled with volatile metadata. DUMPBIN /LOADCONFIG reveals if volatile metadata has been included.