mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-18 00:40:30 +02:00
The IR frontend compiles on past a conditional branch that isn't taken, so the IR cores don't check downcount there, while the interpreter ended its block at every branch. Events then landed on different instructions, and a game's trace left the interpreter's within a few hundred syscalls. The interpreter now applies the same rule at run time: not likely, the operands not decided by their registers, no branch in the delay slot, no prefix pending after the delay slot, and the same instruction and branch limits, counted the same way. It also goes on past a beql/bnel over a break, which the IR frontend drops. The limits move to IRInst.h so both use them. With it, the interpreter, IR interpreter and ARM64 JIT produce the same trace of syscalls and thread switches over 5 emulated seconds of God of War, Tekken 6 and Daxter. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>