What's Changed
This version added many important refactors: the opcode prefix decoder for Dynarec, libGL and Vulkan, the FSGSBASE support, making segments handling easier and faster.
=> Improved compatibility across all architecture, allowing more DRM protected game to run
=> the prefix refactor helped removed lots of redundant source file, simplifying maintenance
=> BOX32 is getting more and more stable, even if still not 100% ok. But Steam is more stable than before, runs on all architecture. And some gameoverlay UI works, on OpenGL games.
More details in New release blog
Contributions
- Added preliminary unit test runner by @ksco in #3045
- [LA64_DYNAREC] Fix SSE CMPPD, wrong reg operand for cUN cOR. by @phorcys in #3068
- Bundle OpenSSL by @LukeShortCloud in #3069
- [BUNDLE] Add libgcc by @LukeShortCloud in #3070
- [TEST] Some minor fixes to the test runner by @ksco in #3072
- [BOX32] Enlarged xcb connects size again for Linux Steam by @ksco in #3074
- [WRAPPER] Fix no more slot for glib2 GSourceFunc callback by @xiangzhai in #3075
- [ENV] Added a new BOX64_ARCH option by @ksco in #3076
- [RCFILE] Added steamwebhelper entry for RISC-V by @ksco in #3077
- [LA64_DYNAREC] Added x87 support by @ksco in #3078
- [LA64_DYNAREC] Added more opcodes by @ksco in #3079
- [LA64] Fixed LBT signal handling, also refined la64noext support by @ksco in #3080
- [LA64_DYNAREC] Added a few more opcodes by @ksco in #3081
- [RV64_DYNAREC] Added DB /2 FIST opcode by @ksco in #3082
- [DYNAREC] Fixed native_fprem/native_fprem1 (fixed the camera issue of FlatOut/FlatOut2) by @ksco in #3083
- [LA64_DYNAREC] Added unaligned F0 81/83 /0,5 LOCK ADD/SUB opcodes by @ksco in #3084
- [DYNAREC] Fixed getX64Address empty block handling by @ksco in #3085
- [ENV] Introduced BOX64_PCLMULQDQ by @ksco in #3086
- [RCFILE] Optimized Windows Steam download speed for LA64 and RV64 by @ksco in #3087
- [TRACE] Fix flags output for better parsing by @ckrinitsin in #3090
- [LA64_DYNAREC] Add more base ops. by @phorcys in #3091
- [LA64] Fixed LBT signal handling for ABI 1.0 by @ksco in #3088
- [LA64_DYNAREC] Add more 00 opcodes. by @phorcys in #3092
- [WRAPPER] Add some wrappers for libm by @xiangzhai in #3094
- [WRAPPER] Add wrapper for rintl by @xiangzhai in #3097
- [LA64_DYNAREC] Add more ops. by @phorcys in #3096
- [LA64_DYNAREC] Replaced the ADDSL macro from RV64 to ALSL_D by @ksco in #3098
- [LA64_DYNAREC] Fixed a typo in last commit by @ksco in #3099
- [LA64_DYNAREC] Add LOCK BTS/BTR. by @phorcys in #3093
- [STEAM] Added docs and some tweaks for Linux Steam, also added a new env var for it by @ksco in #3101
- [LA64_DYNAREC] Add more 64 opcodes. by @phorcys in #3100
- [TEST] Added cputype option by @ksco in #3102
- [LA64_DYNAREC] Add more opcodes for steam. by @phorcys in #3104
- [TEST] Added flags checking by @ksco in #3105
- [LA64_DYNAREC] Add ADX opcodes. by @phorcys in #3103
- [RV64_DYNAREC] Refined SHL/SHR opcodes OF handling by @ksco in #3106
- [RV64_DYNAREC] Refined ROL/ROR opcodes OF handling by @ksco in #3109
- [LA64_DYNAREC] Add rol16/rol16c opcodes. by @phorcys in #3110
- [RV64_DYNAREC] Refined SHLD/SHRD flags emulation by @ksco in #3111
- [RV64_DYNAREC] Refined MUL/DIV flags emulation by @ksco in #3112
- [RV64_DYNAREC] Refined LZCNT/TZCNT flags emulation by @ksco in #3113
- [LA64_DYNAREC] Add macros help unaligned lock opcodes. by @phorcys in #3107
- [RV64_DYNAREC] Refined BSF/BSR opcodes flags emulation by @ksco in #3114
- [INTERP] Refined BSF/BSR ud value by @ksco in #3115
- [INTERP] Refined UD behaviour of 16bit ROL/ROR opcodes by @ksco in #3116
- [ARM64_DYNAREC] Refined UD behaviour of 16bit ROL/ROR opcodes by @ksco in #3117
- [CMAKE] Fix typo by @Red54 in #3122
- [BOX32][WRAPPER] Added a missing 32bits function to libc by @Azkali in #3124
- [LA64_DYNAREC] Add more 32/64 bits arith lock opcodes. by @phorcys in #3118
- [LA64_DYNAREC] Add rol8 opcodes. by @phorcys in #3120
- [LA64_DYNAREC] Fix avx V{/P}GATHER{DD/DQ/DPD/DPS/QD/QPS}. by @phorcys in #3121
- [LA64_DYNAREC] Add more 32/64 lock opcodes. by @phorcys in #3126
- [RV64_DYNAREC] Refined more flags computation by @ksco in #3129
- [DOCS] fix typos by @Red54 in #3131
- [RV64_DYNAREC] Refined some more flags computation by @ksco in #3133
- [RV64_DYNAREC] Small improvments on some invalid opcodes handling by @ksco in #3134
- [LA64_DYNAREC] Opt rol with LBT insts. by @phorcys in #3130
- [LA64_DYNAREC] Add 8bits lock op macros. by @phorcys in #3127
- [ARM64_DYNAREC] Refined BSR/BSF undefined behaviour by @ksco in #3135
- [RV64_DYNAREC] Refined BSR/BSF undefined behaviour by @ksco in #3136
- [CORE] Print logs to stderr by default by @ksco in #3137
- [LA64_DYNAREC] Update lock 32/64 macro. by @phorcys in #3139
- [LA64_DYNAREC] Refined register names by @ksco in #3140
- [LA64_DYNAREC] Refined BSF/BSR opcodes and fixed some typos by @ksco in #3141
- [LA64_DYNAREC] Refined some more flags computation by @ksco in #3142
- [DYNAREC] Fixed some safeflags testing code by @ksco in #3143
- [LA64_DYNAREC] Refined more flags computation by @ksco in #3144
- [LA64_DYNAREC] Refined more flags computation by @ksco in #3145
- [LA64_DYNAREC] Fixed more regressions introduced in 14e3d05 and 44822bb by @ksco in #3147
- [RCFILE] Removed some obsolete hacks on Linux Steam by @ksco in #3148
- [LA64_DYNAREC] Refined more flags computation by @ksco in #3151
- [RV64_DYNAREC] Fixed some minor issues for 16bit SHLD/SHRD opcodes by @ksco in #3150
- [LA64_DYNAREC] Refined more flags computation by @ksco in #3152
- [RV64_DYNAREC] Fixed some typos for nativeflags by @ksco in #3153
- [INTERP] Refined BSF/BSR undefined behaviour by @ksco in #3154
- [LA64_DYNAREC] Add 66 F0 0F B1 LOCK CMPXCHG Ew, Gw. by @phorcys in #3149
- [LA64_DYNAREC] Refined more flags computation by @ksco in #3156
- [LA64_DYNAREC] Add 66 8C MOV Ew, Seg. by @phorcys in #3155
- [LA64_DYNAREC] Added more opcodes by @ksco in #3158
- [LA64_DYNAREC] Add 66 87 (LOCK) XCHG Ew, Gw. by @phorcys in #3157
- Add block lookup cache to optimize findBlock() by @devarajabc in #3160
- [LA64_DYNAREC] Added a few more opcodes by @ksco in #3161
- [LA64] Optimized CRC chksum with native instructions by @ksco in #3163
- [LA64] Fixed a typo in last PR by @ksco in #3164
- [RV64_DYNAREC][LA64_DYNAREC] Fixed a wrong modreg test in nativeflags by @ksco in #3165
- [CORE] Added back the logging prefix by @ksco in #3166
- [TRACE][BOX32] Fixed a crash in nanosleep tracing by @ksco in #3167
- [BOX32] Silence a false warning by @ksco in #3169
- [BOX32] Implemented getdents syscall by @ksco in #3168
- [Docs] Update outdated information in rbtree.h by @devarajabc in #3170
- [RV64_DYNAREC] Added more lock opcodes by @ksco in #3171
- [WRAPPER] Wrap libicu76 by @a9ix in #3172
- [RV64_DYNAREC] Added a few more 16bit opcodes and some fixes too by @ksco in #3173
- [LA64_DYNAREC] Optimized some emit functions by @ksco in #3174
- [LA64_DYNAREC] Added more opcodes by @ksco in #3175
- [DOCS] Refined usage documentation with recent changes by @ksco in #3176
- [WRAPPER] Wrapped 1 more glib2 function by @ksco in #3177
- [LA64_DYNAREC] Fixed a regression introduced in 14e3d05 by @ksco in #3178
- [INTERP] Fixed 67 prefix handling for LEA opcode by @ksco in #3179
- [LA64_DYNAREC] Refined IMUL opcodes flags computation by @ksco in #3180
- [WRAPPER] Wrapped 2 more symbols by @ksco in #3181
- [LA64_DYNAREC] Fix incorrect stack alignment by @xiangzhai in #3183
- [DYNAREC_PURGE] Decrement in_used before longjmp by @devarajabc in #3184
- [LA64_DYNAREC] Fix avx V{P,}GATHER{DD,DPD,QPS,QD}. by @phorcys in #3185
- [LA64_DYNAREC] Fix avx VAES{IMC,INC,INCLAST,DEC,DECLAST}. by @phorcys in #3186
- [LA64_DYNAREC] Fix avx VCVTPH2PS,VCVTDQ2PD. by @phorcys in #3187
- [BOX32] Slient some warnings on padding fields by @ksco in #3189
- [LA64_DYNAREC] Fix 8-bit lock macros, Add F0 08 LOCK OR Eb, Gb. by @phorcys in #3188
- Add support for NVIDIA GB10/DGX Spark platform by @leonpano2006 in #3191
- [LA64_DYNAREC] Added more opcodes by @ksco in #3194
- [WRAPPER] Wrapped more symbols by @ksco in #3195
- [CI] Removed os from the matrix by @ksco in #3196
- [CMAKE] Fixed git_head dependencies by @ksco in #3197
- Fixed a typo introduced in last block optimisation by @ksco in #3198
- Implemented a few more libc syscalls by @ksco in #3199
- [RCFILE] Updated an obsolete steam option by @ksco in #3201
- Fixed my___tls_get_addr by @ksco in #3202
- [RCFILE] Added a new option BOX64_STEAM_VULKAN by @ksco in #3203
- [CMAKE] Fixed a typo by @ksco in #3204
- [CMake] Fix typo 'Snapragon' by @docgalaxyblock in #3205
- Reverted some commits by @ksco in #3206
- Small optimization to steam_vulkan hack by @ksco in #3207
- [WRAPPER] Fixed a regression in myStackAlignGVariantNew by @ksco in #3208
- [RCFILE] Disabled libcef detection by default by @ksco in #3209
- [STEAM] Enabled x86_64 python workaround only for Arm by @ksco in #3211
- [RV64_DYNAREC] Fixed some scratch register conflictions, [LA64_DYNAREC] too by @ksco in #3213
- [LA64_DYNAREC] Some small fixes. by @phorcys in #3212
- [LA64_DYNAREC] Added a few more 66 opcodes by @ksco in #3214
- [SYSCALL] Added io_uring syscalls by @ksco in #3215
- [RCFILE] Added discord profile by @ksco in #3216
- [WRAPPER] Re-wrapped libtasn1 by @ksco in #3217
- [LA64_DYNAREC] Added an unaligned path to 16bit XCHG opcode by @ksco in #3218
- [LA64_DYNAREC] Added more opcodes by @ksco in #3219
- [WRAPPER][LA64] Added basic simple wrapper support by @ksco in #3221
- [LA64_DYNAREC] Added more opcodes by @ksco in #3223
- [LA64_DYNAREC] Added more opcodes by @ksco in #3224
- [CORE] Slightly better help message by @ksco in #3225
- [LA64_DYNAREC] Fixed an incomplete macro by @ksco in #3226
- [LA64_DYNAREC] Enabled native flags optimization for SETcc opcodes by @ksco in #3229
- [LA64_DYNAREC] Enable nativeflags optimization for more patterns by @ksco in #3230
- Reimplement my32_mkstemps64 by @Buggem in #3231
- [INTERP][DYNAREC] Added F3 0F 4X CMOVcc opcodes by @ksco in #3232
- [LA64_DYNAREC] Added more opcodes by @ksco in #3233
- [BOX32] Wrapped more symbols for libc by @ksco in #3234
- [WRAPPER] Silent garbage dlerrors when nogtk is used by @ksco in #3236
- [BOX32] Fixed some inplace shrink/enlarge functions for libxrandr by @ksco in #3239
- [ARM_DYNAREC] Fixed a regression introduced in commit c64a431 by @ksco in #3241
- Add lookup cache for customMalloc by @devarajabc in #3244
- [RV64_DYNAREC] Better handling for invalid lock opcodes by @ksco in #3246
- [LA64_DYNAREC] Refactored opcode prefix decoding by @ksco in #3247
- [RCFILE] Refined BOX64_STEAM_VULKAN to support more cases by @ksco in #3248
- [DYNAREC_PURGE] Tick-Based Cache Purge System by @devarajabc in #3249
- [LA64_DYNAREC] Opt REP STOSB for withcher3. by @phorcys in #3250
- [INTERP] Small fix to F0 0F B1 CMPXCHG opcode by @ksco in #3251
- [LA64_DYNAREC] Fixed a regression in IMUL opcodes flags computation by @ksco in #3252
- [LA64_DYNAREC] Added more push/pop opcodes by @ksco in #3254
- [LA64_DYNAREC] Refined prefetch opcodes by @ksco in #3255
- [DOCS] Add BOX64_DYNAREC_PURGE_AGE documentation by @devarajabc in #3253
- [ARM64_DYNAREC] Refined CLFLUSH family opcodes by @ksco in #3257
- [WRAPPER] Wrapped 1 more vulkan extension by @ksco in #3258
- [LA64_DYNAREC] Refined CLFLUSH family opcodes ([RV64_DYNAREC] too) by @ksco in #3259
- [INTERP] Refined CLFLUSH family opcodes by @ksco in #3260
- [WRAPPER] Added 1 more extension to libGL by @ksco in #3261
- [LA64_DYNAREC] Fixed 1 more UD behaviour ([RV64_DYNAREC] too) by @ksco in #3262
- [LA64_DYNAREC] Refined more flags computation for LBT path by @ksco in #3263
- [DYNAREC] Fixed uninitlized lock flag for 16-bit opcodes by @ksco in #3264
- [LA64_DYNAREC] Fixed 1 more regression intoduced by the prefix refactor by @ksco in #3265
- [CORE] Removed BOX64_ARG0 env var after use, fixed Heroic with Proton on LoongArch by @ksco in #3266
- [CPUID] Refined the CPU branding display by @ksco in #3267
- [Box32] Check allocation end address by @devarajabc in #3268
- [WRAPPER] Added 2 more listeners to waylandclient for wine-wayland and HDR support by @ksco in #3269
- [WRAPPER] Reworked libxkbcommon wrapping, added a few new symbols too by @ksco in #3270
- [CI] Added nocosim label to longjumpInSignals test by @ksco in #3271
- [LA64_DYNAREC] Small improvements to strongmem emulation by @ksco in #3272
- [LA64_DYNAREC] Some improvements to safeflags=2, more to expect by @ksco in #3273
- [SYSCALL] Added 1 more syscall epoll_pwait2 by @ksco in #3276
- [LA64_DYNAREC] Ported the BARRIER_FLOAT refactor from Arm64 by @ksco in #3278
- [LA64_DYNAREC] Add F0 FE /{0,1} LOCK {INC,DEC} Eb. by @phorcys in #3279
- [RCFILE] Added a new option BOX64_PROFILE by @ksco in #3280
- [RV64_DYNAREC] Refactored opcode prefix decoding by @ksco in #3282
- [BOX64][INTERP] Fixed idiv boundary tests by @luoqiaoling in #3283
- [LA64_DYNAREC] Fixed a potential issue of the ADDxREGy macro ([RV64_DYNAREC] too) by @ksco in #3284
- [DYNACHCHE] correct dynacache typo by @luoqiaoling in #3286
- [LA64_DYNAREC] Fixed various typos ([RV64_DYNAREC] too) by @ksco in #3287
- [LA64_DYNAREC] Refacfored the handling of deferred flags by @ksco in #3288
- [ENV] Fixed race condition of init/uninit of rolling logs by @ksco in #3289
- [WRAPPER] Wrapped more symbols for libfreetype by @ksco in #3290
- [LA64_DYNAREC] Fixed some minor typos of SQRTSD and XCHG opcodes by @ksco in #3291
- [BOX64] Fixed my_box64signalhandler, convert native signal to x64 by @luoqiaoling in #3292
- [LA64_DYNAREC] Fixed a regression in emit_sub32c by @ksco in #3294
- [WRAPPER] Wrapped 1 more glib2 symbol by @ksco in #3296
- [WRAPPER] Wrapped more gtk3 and related symbols by @ksco in #3295
- [CORE] Refined tracing file header info by @ksco in #3298
- [LA64_DYNAREC] Optimized RCR opcodes by @ksco in #3299
- [RCFILE][LA64] Added Risk of Rain 2 profile by @ksco in #3300
- [LA64_DYNAREC] Small improvments to ALSL printer by @ksco in #3303
- More wrapped symbols for SDL2 by @Neltharion01 in #3297
- Make sure managed memory blocks are always aligned to 16 bytes by @ksco in #3305
- [WRAPPER][BOX32] Minor fix and improvement to XGetICValues by @ksco in #3306
- Fix a lot of GCC warnings by @rajdakin in #3309
- [LA64_DYNAREC] Some refactor and cleanups on rotate opcodes by @ksco in #3310
- [RCFILE] Removed some obsolete env. var. by @ksco in #3311
- [RCFILE] A small improvement for Battle.net client by @ksco in #3312
- [RCFILE] Added a profile for StarCraft II by @ksco in #3313
- [LA64_DYNAREC] Added some missing SM=2 store hints by @ksco in #3314
- [RCFILE] Enable callret for gb6 by @ksco in #3315
- [LA64_DYNAREC] Refined rcr8/16 /imm opcodes by @ksco in #3316
- [LA64_DYNAREC] Micro-optimization for emit_shr32c by @ksco in #3317
- [LA64_DYNAREC] Micro-optimization for emit_test32c by @ksco in #3318
- [STEAM] Minor refactoring by @Buggem in #3320
- [CMAKE] Fixed an uninstall script warning by @ksco in #3323
- [LA64_DYNAREC] Refined RCL8/16/32/64 /imm opcodes by @ksco in #3324
- Fixed non-dynarec build on dynarec available platforms by @ksco in #3325
- [LA64_DYNAREC] Small fix to geted and micro-optimization to LEA opcode by @ksco in #3326
- [LA64_DYNAREC] Refined more rotate opcodes flags computation by @ksco in #3327
- [RCFILE] Added a profile for Total War: Three Kingdoms by @ksco in #3328
- [BOX32][WRAPPER] Fixed XPeekIfEvent wrapping by @ksco in #3329
New Contributors
- @ckrinitsin made their first contribution in #3090
- @Red54 made their first contribution in #3122
- @a9ix made their first contribution in #3172
- @docgalaxyblock made their first contribution in #3205
- @luoqiaoling made their first contribution in #3283
- @Neltharion01 made their first contribution in #3297
Full Changelog: v0.3.8...v0.4.0