Repository navigation
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
-
Externals
- Update vixl (9bbdb35)
-
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)
- InstallFEX
-
Steam
- Enable DiskCache by default (0df84d3)
-
Tests
-
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
-
Windows
-
X86Tables
- Give REX2 a name (7813c7a)
-
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