FEX 2112 Tagged!

A lot of changed things this month.

  • New instructions & fixes (BZHI, MULX, RORX, SARX/SHLX/SHRX)
  • steamwebhelper now works
  • Linux emulation updated to 5.16, sched_getaffinity, MAP_32BIT, 32-bit DRM emulation improvements
  • Several other bug fixes and optimizations


  • Reduce the chance of hanging on reentrant allocations (8ab6830f)
  • Adds an inline syscall optimization (f7468703)
  • COND_FGT should map to gt, not hi, as it is not FGTU (b45603d1)
    • Fixes steamwebhelper burning all CPU cores!


  • Fixes CompileService race condition on thread creation (5345f7fa)
  • Centralize alignment utility functions in one header (966272ce)
  • Fixes ERROR_AND_DIE (fbd14b65)
  • Supports guest SIGILL (6e1ea92c)
    • Call handler functions directly (ffee22d3)
  • OpcodeDispatcher
    • Remove debug message (d883b4bf)
    • Implement BZHI (50c8d9ed)
    • Amend return types of BitSize helpers (c63c5fb6)
    • Implement MULX (498a845c)
    • Resolve sign mismatches in loops (ad864e0e)
    • Add helper for getting bit sizes (3a3cbf2b)
    • Handle RORX (51d21d86)
    • Implement BMI2 SARX/SHLX/SHRX (e37a0bbd)
    • Removes usage of SignalFrame stack on JITs (d81d5e21)
    • Use std::vector as the underlying container for std::stack (61ccec37)
    • Partial support for RIP adjust in signal handler (77093a7f)
    • Resolve unused variable warnings (a04cc4dc)
  • OpcodeDecoder
    • Shorten up GPR and MM base offset retrieval (59ed91c5)
    • Convert enums into enum classes where applicable (d1fa8bcf)
    • Add support for ADX (d3cd354c)
  • Frontend
    • Handle VEX RXB bits (d47182b6)
    • Mark modrm function LUT as static (c6662a46)
  • GDBStub
  • Fixes a few hangs and crashes (e027b83a)
  • Interpreter
    • Build op handler table at compile-time (63f9e0b4)
    • Mark F80CMP array as static constexpr (13ad5b66)
  • JIT
    • Eliminate redundant jump target map lookups (8ef02783)
    • Ensures signals in compileservice JIT space is handled (97e3a364)
  • JitSymbols
    • Make use of fmt (db0740be)
  • IR
    • Make some interface functions accept pointers to const (8c38f936)
    • Convert NodeID into a strong type (b93871ff)
    • Add type alias for Node IDs (1f306d66)
  • RegisterAllocationPass
    • Resolve sign comparison mismatch in CalculateNodeInterference() (597e4e1d)
    • Reduce usages of NodeIDs where applicable (19a06519)


  • Updates syscalls to 5.16 syscalls (c4d05fb8)
  • Fixes sched_getaffinity (d5bf6414)
  • Fixes MAP_32BIT error case (92ae6ae2)
  • Fixes sigprocmask with new and old set being the same address (7bb78912)
  • Passthrough 32-bit syscalls that can be (3dc938b8)
  • Emulate MAP_32BIT on mmap (081d0169)
  • SignalDelegator update signal mask on return from sigsuspend (90511ddd)
  • Updates 32-bit DRM emulation (a92233c7)


  • Fail loudly if thunking is enabled for a library that isn’t installed (b1b61608)
  • ThunksDB
    • Updates file to include local libs (e0d40dd4)


  • Enables 32-bit host runner (cabb58ad)
  • Minor cleanup (2a894bc1)
  • Various thunk library cleanups (3730a428)


  • BucketList
    • Minor API touchups (baadf0b9)
  • CMake
    • Adds option to enable time-trace compile option (919e2bc3)
  • CompileService
    • Store WorkItem instances as unique_ptr (ef772c3e)
  • ELFCodeLoader
    • Fixes BRK allocation on some ELF loading (b327daf5)
  • EnumUtils
    • Remove shift operators from helper macro (977d92b7)
  • General
    • Migrate logging over to fmt where possible (513b02fd)
  • RootFS
    • Keep rootfs around while in container (16f1ad46)
  • IR.json/json_ir_generator: Minor touchups to generated IR utilities (9b43f94f)
  • Various packaging improvements (23e583e1)


  • Adds Socket logger and tool (6c93b6f7)
  • FEXLoader
    • Change 32-bit memory check error to warning (82ebdf52)
    • Print memory map when 32-bit intersect happens (e6d285a7)
  • Syscalls
    • Move construction of syscall name map into GetSyscallName() (0560e9be)

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

Written on December 5, 2021