RELEASE NOTES · OCTOBER 7, 2026
MacRunner 1.0.9
A speed release of the 64-bit CPU translator: faster integer division and scalar SSE arithmetic, and exact unaligned lock operations.
Download MacRunner 1.0.9 from GitHub →
What changed since 1.0.8
| Area | Change |
|---|---|
| Integer division | The common cases of div and idiv now use the processor's own division directly; the rare cases that must raise a divide error (division by zero, quotient overflow) are handled on a separate cold path and still raise the same Windows exception as on a real processor. |
| Unaligned lock operations | In 1.0.8 two threads updating the same unaligned memory cell with lock-prefixed instructions could lose updates: our stress test failed in 5–8 runs out of 10. It now passes 10 out of 10. |
| Read-modify-write instructions | For instructions like add [mem], reg the flags are now computed after the store, which removes host instructions from one of the most frequent x86 forms. |
| Scalar SSE arithmetic | In the processor's x86-compatible mode addss, subss, mulss and divss (and the sd forms) keep the upper part of the register the way x86 does, so the translator no longer adds a separate merge step. |
| Calls into the system | The floating-point control register is no longer rewritten on every transition from translated code when it already holds the right value. |
| x87 | A faster x87 path is included but still off. It stays disabled by default until its results agree with real hardware in every tested case. |
Measured on this package
October 7, 21 micro-loops, five alternating runs of the 1.0.8 and 1.0.9 packages on an M1 Pro, fastest run of each: xor edx,edx; div ecx takes 0.92 ns per iteration instead of 2.09 ns, cqo; idiv rcx 0.81 ns instead of 1.96 ns, and a chain of addss 0.94 ns instead of 1.57 ns. The other 18 loops are unchanged within 1%; rep movsb came out 3% faster, which is inside the run-to-run spread. These are micro-loops, not game frame rates, and the Mac was in use during the session.
How it was checked
This build was accepted on test stands rather than by replaying games by hand. CPU stand: 500,595 recorded processor states with no new differences against 1.0.8. Hardware-mode stands on the signed build: 812,402 flag states with no new differences, and 919,405 SIMD states pass, with 18,968 already-known differences from the hardware reference still listed. Games stand: the recorded translations of eight games compile without errors. 32-bit application stand: 21 of 21 cells through the app itself, including audio decoding whose output is byte-identical to Windows.
This build was compiled on our own Mac. Rebuilding it from the public repositories on a clean cloud machine is in progress and is not finished.
Known limits
There is no Direct3D 12 in this build, so games that need it (for example Elden Ring) cannot be started from it; Elden Ring is the target of the next version. 32-bit support is experimental: x87 floating-point code, common in 32-bit games, is still slow. The first launch after updating takes about a minute while the app updates each bottle for the new engine; removing this wait is planned for the next version. Floating-point exception flags and the NaN sign in some SSE operations differ from Windows.
Indiana Jones and the Great Circle is not part of this build — it has a separate experimental preview.
Tested games
Games were not replayed for 1.0.9. Results are tied to the runtime and settings used for each check.
Read the tested games and their limits →