FEX 2410 Tagged
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.