FEX Release FEX-2410
Read the blog post at FEX-Emu's Site!
A bit of a slower month for this release as our developers prepare for the X.Org Developer's Conference 2024 and
the GStreamer Conference 2024!We're going to keep this release short and sweet as GStreamer conference has already started and XDC is kicking off in two days.
ARM64EC changes
This month we had some ARM64EC changes to fix some AVX bugs around state saving and restoring when running under Wine. In addition some changes to dynamically determine Windows syscall numbers under WINE rather than hardcoding it.
Additionally some fixes around the how the call checker works, which fixes issues when applications hook function calls early using the Win32 APIs.For any user that wants to tinker with these, you can find instructions for how to build & install on our wiki.
JIT optimizations
We had some optimizations land in the JIT this month which speeds up the time it takes the JIT to emit code. In some microbenchmarks this has shown up
to 9% less CPU time spent JIT'ing code. This is very important for reducing stutters when encountering new code inside of applications.JIT fixes
We fixed multiple bugs in the JIT emulation this month, one of which was fixing the x87 FPREM instruction. This instruction is interesting because x87
actually offers another variant called FPREM1, which FEX did emulate correctly. Once we found the bug in the implementation, it actually managed to
fix a major issue where Steam's login was super flaky and had to attempt it about a dozen times before it worked. This also happened to fix
Touhou Luna Nights which rendered its 2D tiles incorrectly before this change.We also fixed an issue where Halls of Torment was copying data from a thread-local object using vector instructions and FEX had mistakenly broken
vector memory accesses to TLS objects. Fixing this solves this game problem, and probably many other games that happens to inline a memcpy accelerated
using vector operations!We also happened to fix a bug with the SSE MAXSS instruction where in the face of NaNs we were returning the incorrect result. Only affected some edge
case behaviour, but nice to see little bug fixes like this.An aside
Make sure to check out the XDC livestreams over the next few days! You definitely won't want to miss it!
See the 2410 Release Notes or the detailed change log in Github.
Raw Changes
FEX Release FEX-2410
AOTIR
Move debugdata structure to internal header ( 304b5de)
ARM64EC
Dynamically determine syscall numbers under wine. ( 967c04e)
AVX register save/restore support under wine ( e9d34c7)
Patch the call checker before calling any syscall exports ( 2672e06)
Switch to exception-based native syscall dispatch ( 07f117b)
Arm64
Fix warning ( ebae1bf)
CMake
Disable vixl compiling if not enabled ( f99900b)
Compile with system libraries for xxhash, Catch2, and fmt, if available ( a4acd64)
CPUBackend
Remove unused functions ( 5f79761)
CPUID
Update to something a little more modern ( 5bd0afa)
Config
Be a bit smarter in ReloadMetaLayer ( b5c9eb3)
Fixes stack usage in EnvLoader ( 4f8d7cb)
ConstProp
speed it up ( 36e4f9a)
FEXConfig
Add the ability to watch and configure global rootfs ( f49d82d)
FEXCore
Remove BlockSamplingData ( 9310ac5)
Convert Base tables over to constexpr ( 20fb0da)
Remove Context header include when unneeded ( 4cb4c0e)
Delete ThreadsState struct ( 219a477)
Move
CustomIRResult
to internal header ( 29f0e9b)Move
JITSymbolBuffer
to internal header ( b75efc4)Context
Removes unused features ( 05be944)
FEXLoader
Drop the binfmt_misc
I
flag ( e190d02)FEXRootFSFetcher
Fallback to TTY if zenity isn't installed ( bebd740)
XXHash
Fix double fd close ( 360ea53)
FEXServer
PipeScanner
Stop writing null to incoming pipes ( 0a35029)
JIT
always use 64-bit moves for SRA ( cd4c224)
Linux
Optimize CreateNewThread and HandleNewClone stack usage ( d547f2b)
LinuxEmulation
Update syscalls for v6.11 ( aaa8eef)
Update DRM for v6.11 ( c036868)
LinuxSyscalls
Update max reported kernel version to 6.11 ( 9716fc7)
With poll syscall, ensure fds is writable only if nfds is not zero ( f77841d)
OpcodeDispatcher
Fixes segment prefixing on vector element loadstores ( 2726f35)
Constexpr-ify all the tables possible ( 9d6865f)
Do not forbid INT 2E syscalls on 64-bit Windows ( bbef4d7)
SignalDelegator
Let the frontend inform AVX support ( 9100235)
Thunks
Move to the frontend ( f640dcc)
Vulkan
Updates thunks to v1.3.296 ( 1670c89)
Tools
Delete imgui FEXConfig ( c0b8a0d)
VDSO
Implements v6.11 vdso getrandom ( e902ad5)
VDSOEmulation
Stop using dlopen for VDSO ( 5745b41)
Windows
Switch supported MinGW CRT to UCRT ( c2f2c58)
Don't assume the log file was successfully opened ( f20e626)
Misc
speed up the JIT ( e82d2c7)
Fixes fprem ( b89f5b8)
x87 small cleanups; NFC ( 5e9c211)
Build host tools without jemalloc ( 49de1fa)
Fix FScale'ing zero that should return zero ( 4d62e75)
Stop installing binfmt_misc on x86 ( b6d3df0)
Fix (v)maxss on non-AFP platforms ( 9e4de3b)
Support for emulated overcommit on Windows ( 4a2b4be)
Bunch of little things reported by coverity ( b4c797c)
Global flag optimizations ( 1c59bfe)
gitignore
ignore build symlink ( 90dbd47)
unittests
Be more strict with -- separator ( 3c205eb)
Fixes incorrect argument ( c8f3fe3)
FEX-2410, a tool for executing x86 and x86-64 binaries on an AArch64 host, has been released. This is a slower release as developers gear up for the X.Org Developer's Conference 2024 and the GStreamer Conference 2024. ARM64EC modifications were made to fix AVX problems related to state saving and restoring while running under Wine, as well as to dynamically determine Windows syscall numbers under WINE. The call checker also helped to resolve difficulties caused by applications hooking function calls too early utilizing the Win32 APIs.