FEX 2508 Tagged

You thought we were done with optimizations? Too bad, we had some massive improvements this month! Let’s jump in!

Big juicy JIT optimizations!

The improvements this month can’t be understated for how much performance have been lifted. To start off, let’s show off some performance graphs for a handful of games!

And a chart for the averaged FPS numbers recorded from each of these games.

As you can see from the tested games, the improvements can be wild depending on what the game is doing! A nearly 39% FPS uplift in Cyberpunk 2077 is wacky! From various testing we have done, the uplift tends to be closer to Cyberpunk but there are of course other games like God Of War where the uplift is minimal!

The majority of this performance uplift has come from call-return stack optimizations, where we are now able to take advantage of the ARM CPU’s own call-return prediction hardware, but we have had a variety of optimizations this month that improve both JIT compilation time in addition to execution time! Additionally now we compile significantly less code since we would have combinatorial explosion of JIT compiles when multiblock was enabled. We have now made it so each individual block of JIT code is freestanding and usually only gets compiled once.

Another improvement this month is the WINE wow64/arm64ec libraries can now take advantage of Apple Silicon’s hardware TSO feature. This happened to not be implemented with the wow64/arm64ec code path. This will significantly improve performance on that hardware in the case that someone spent the effort to run a game in that environment.

There’s a few other JIT improvements but we could spend all day here if we talked about everything! Have fun gaming with the performance improvements!

Implement NX bit

This is a fun little security feature which prevents games from executing code that isn’t mapped executable. This is a feature that has been around for a long time in hardware, but FEX has finally implemented it! This fixed a single game that we know of, where it tests to ensure this security feature is enabled. This usually isn’t a problem for most games, but it is kind of funny that a game using NaCL didn’t work because of it.

More anti-debugger/tamper improvements

This month has also gotten a bunch of improvements around behaviour of code that only shows up in anti-tamper or debugger code. Specifically we found that Peggle Deluxe and Crysis 2: Maximum Edition usually worked under FEX, but it relied on some subtle self-modifying code that happened to work. These are either for anti-tamper, or anti-debugging, or maybe even a way to block data mining. We don’t know for sure but since the game relies on it, we just need to support those forms of self-modifying code.

This may also happen to get some versions of Denuvo anti-tamper working under FEX, but it isn’t guaranteed and will depending on the game and the particular flavour of that anti-tamper software.

Upload WINE DLL artifacts

This is a minor thing, but we are trying out uploading the WINE wow64/arm64ec DLL files for every commit. This can be found on our github actions page. This is for people that want to tinker with the main branch under arm64 wine. As usual we will recommend the official releases on our Launchpad PPA but adventerous users always want more.

See the 2508 Release Notes or the detailed change log in Github.

Written on August 1, 2025