github FEX-Emu/FEX FEX-2610
FEX Release FEX-2610

4 hours ago

Read the blog post at FEX-Emu's Site!

We were a bit distracted this month with the X.Org Developer's Conference happening but we still managed
to get some work done. Let's jump in and see what has changed.

JIT changes

This month brought some improvements to the JIT although less than typical. We added support for AVX-VNNI which is starting to get used by some game
libraries. We also optimized the SSE4.2 string operations so these are quite a bit faster. 3DNow! has been enabled again since we fixed the last known
bug with it. We also improved emulation on the x87 FXAM instruction since apparently Mono uses it to detect denormals for some reason. Additionally a
peephole optimization to improve a common case of an unmasked AVX gather instruction which some sound libraries rely on.

We also now have a software fallback for RDRAND and RDSEED instructions. This isn't enabled by default as the performance isn't as good as a hardware
implementation but it's useful for programs that mandate these instructions to exist. Also useful for platforms with Qualcomm Oryon where their RNG
implementation is bugged and doesn't return real values.

Plus a couple of other minor changes for future work. In total a fairly light month for JIT improvements.

Disk cache improvements

This month also had a large smattering of disk cache improvements. Now when the disk cache is enabled it will automatically limit its cache size to
1GB, where we will then stop caching at that point. This is configurable in the INI options for more or less space to be consumed, but because some
edge cases allow it to have unbounded growth, it seems like a good balance at 1GB. We also added an optional memory buffer for caching; this allows an
in-memory cache for hot blocks. This is only worth using if a game stutters frequently from JIT invocations and you have spare RAM to allow some
additional caching.

Another important change that landed is that when FEX updates, it will automatically remove old disk caches that aren't relevant to the new version.
This makes sure users don't have multiple 1GB cache files laying around as they upgrade over time.

A small improvement on the Linux side ensures that for ELF files being cached, that if there is an embeded GNU build-id hash, we will use that as a
partial key for the file. This helps the case where a file could have been replaced and we would incorrectly use an outdated cache file.

Minor Vulkan thunk fixes

We upgraded our Vulkan thunks this month to fix a few minor bugs with newer Vulkan drivers. This fixes some games running on DGX Spark where they were
supporting newer vulkan extensions primarily.

Raw Changes

FEX Release FEX-2610

  • CMake

    • Stop searching for a bunch of projects when building for Steam (902d433)
  • CPUInfo

    • Adds new AVX extensions (48d7175)
  • Config

    • Add check to see if a config option is default (177542e)
  • DiskCache

    • Support FileID hash with gnu build-id (d2b6e37)
    • adjust key strategy (72b2ff8)
    • configurable max file size (08f451d)
    • optional memory buffer for faster lookups (06b7f3b)
    • patch a bunch of disp32s in anon code (98516b5)
    • allow relocations within the same ELF image (e431bfe)
  • Externals

  • FEXCore

    • Update readme with supported ISAs (7d3090f)

    • Adds a utility function for deleting a directory (4e5c181)

    • Have ThreadRemoveCodeEntry IR op jump to dispatcher (37d83d9)

    • Have the Syscall IR op jump to the dispatcher (64a6da9)

    • Migrate internal DiskCache header to internal (7723c47)

    • Moves crc32 helper to a shared location (fd7b749)

    • Allocator

      • Don't hang when /proc/self/maps can't be opened (12326d7)
    • DiskCache

      • Prune old entries automatically (d3dcc74)
    • OpcodeDispatcher

      • Fixes syscall instruction on Linux (794a118)
    • Utils

      • Make crc32 match between architectures (4bc4d78)
  • Frontend

  • HostFeatures

    • Reenable 3DNow! now that it is fixed (184c952)
  • InstcountCI

    • Add big moffset instructions (5d6609a)
  • JIT

    • Let DiskCache patch ValidateCode guest CRC (and other small fixes 👼) (5a24152)
  • LinuxSyscalls

    • Preserve argv and path across portable reexec (79a7afe)
  • Readme

    • Update with minspec update (cfafd89)
  • Scripts

    • InstallFEX
      • Add new ubuntu versions (992349f)
  • Steam

    • Enable DiskCache by default (0df84d3)
  • Tests

    • Enable a handful of tests, and fix small bug in python test runner script (d58a4e0)
    • add 'ninja tests' which runs all tests, with large pages (f11c8c7)
  • Threads

    • Support setting thread names through creation (208e9c3)
  • Thunks

    • allow self-lookups in vkGetDeviceProcAddr and vkGetInstanceProcAddr (3397eb9)
  • Vector

    • Inline PCMPXSTRX SSE4.2 Instructions (e2f973f)
  • WOW64

    • Use correct thread's CPU area in BTCpuThreadTerm (e320e1d)
    • Use CHPEv2 for suspend and exception support (f18599d)
  • Windows

    • Don't hardcode NT syscall numbers for ARM64EC (47be6ad)
    • On unimplemented print a log (59f85d6)
  • X86Tables

  • X87

    • Implement full FXAM support (7325cb0)
  • Misc

    • Peephole optimization for VPCMPEQD + VGATHERDPS (e9373bf)
    • Externals/code-format-helper: Update for dependabot (3648ee9)
    • gitlab-ci: Wow, failed to notice the single quotes (c747be4)
    • gitlab-ci: Only auto-promote on pushes to the main branch (3aa38d1)
    • A couple JITSymbol fixes (555e8bd)
    • Add software fallback for RDRAND/RDSEED (1405755)
    • Add regression test for consecutive syscalls (ca1fb3f)
    • Rebase and add test to #5887 (19df181)
    • Update functional.h (fd208da)
    • Removes subflag SRC_RAX (82510eb)
    • Implement ISA extension AVX-VNNI (4b652eb)
    • Bump Vulkan-Headers to 1.4.362 and update generated Vulkan thunks (86f363d)
  • unittests

    • Make sure to test another system instruction (eb41dac)

    • ASM

      • Manually encode some smsw tests (c3e9c3f)

Don't miss a new FEX release

NewReleases is sending notifications on new releases.