Software 43918 Published by

The latest version of FEX, known as FEX-2510, features several improvements that make it easier to run x86 apps on ARM64 Linux devices, including better compatibility and performance settings. The release includes an advanced binary recompiler that optimizes code using a custom Intermediate Representation (IR) and a complete translation layer for system calls to address differences between emulated and host operating systems. Significant changes have been made to the JIT compiler, including bug fixes and improvements to its performance, such as reducing unnecessary flushing of registers and caching intermediate results. Additionally, FEX now supports "Extended Volatile Metadata" (EVMD), which allows users to manually mark code blocks that can safely turn off TSO emulation, greatly speeding up performance.



FEX 2510 released

FEX-2510 is the most recent version of FEX. It has many new features that make it easier to run x86 apps on ARM64 Linux devices.

FEX can run both 32-bit and 64-bit binaries with a lot of compatibility, which is one of its main features. This makes it similar to other tools like QEMU-user and Box64. You can also use it with Wine or Proton to play Windows games. FEX can also send API calls to host system libraries like OpenGL or Vulkan to lower the cost of emulation.

The per-app configuration system that lets users change performance settings for each app is a big improvement in this release. This includes things like skipping expensive memory model emulation, which can help reduce stuttering in the game. In addition, there is a user-friendly GUI called FEXConfig that makes it easy to look at and change these settings.

FEX has an advanced binary recompiler that works with modern x86(-64) instruction set extensions like AVX and AVX2. This recompiler makes optimized code using a custom Intermediate Representation (IR), which is faster than regular just-in-time (JIT) compilers. There is also a complete translation layer for system calls to address the differences between the emulated and host operating systems.

This release has made many changes to the JIT compiler, including fixing bugs and making it run faster. Here are some important changes:

  • Fixing potential crashes with x87 load/store operations
  • Implementing support for SSE4a instructions
  • Improving NaN propagation behavior in x87 arithmetic
  • Avoiding unnecessary flushing of MMX registers

Caching intermediate results in the "slow path" significantly improves the translation of x87 stack-based architecture to ARM's register-based architecture. This change has cut down on the number of ARM instructions needed for some games by a lot. For example, Half-Life went from 169 to 72, Oblivion went from 3165 to 1743, and Psychonauts went from 5270 to 2809.

FEX developers are also looking for problems with memory use, which can cause problems on devices with less power. This work has made some minor changes in the current release, but we anticipate larger savings in the future.

Linux now also supports "Extended Volatile Metadata" (EVMD), which is like a feature in Windows. With EVMD, users can manually mark parts of code that can safely turn off TSO emulation, which greatly speeds up performance. This feature needs users to figure out which code blocks are "hot," and it may take a lot of work from developers or users.

Finally, FEX has taken out the extra FEXLoader binary, which makes it easier to keep the project up to date. The old name, FEXInterpreter, has been changed to just "FEX," but there is still an alias for people who want to use it.

Release FEX Release FEX-2510 · FEX-Emu/FEX

Read the blog post at FEX-Emu's Site! We're just gonna kick out this little release and be on our way. There might be some interesting things this month, read and find out! JIT Improvements This mo...

Release FEX Release FEX-2510 · FEX-Emu/FEX