New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cached Interpreter 2.0 #12723
base: master
Are you sure you want to change the base?
Cached Interpreter 2.0 #12723
Conversation
99dc22b
to
bcd8df8
Compare
This PR conflicts with #12714, and I would prefer if this PR were merged first. The virtual member functions added to |
aeda4f4
to
508f2e7
Compare
910a7b4
to
4a3a1e9
Compare
I tried to run this on my M1 MacBook Pro but it crashes as soon as I start a game. I tested this with Mario Kart Wii and the Wii Menu. Edit: oops I didn't see that you just pushed something I'll re-try with the latest changes shortly. |
The latest commit was to avoid some baggage from sub-classing |
4a3a1e9
to
61f5e86
Compare
I simplified the |
61f5e86
to
54eb65b
Compare
997eb03
to
802c344
Compare
It now supports variable-sized data payloads and memory range freeing. It's a little faster, too.
This saves two register pushes / pops.
WritePC is now needed far less, only for instructions that end the block. Unfortunately, WritePC still needs to update `PowerPCState::npc` to support the false path of conditional branch instructions. Both drawbacks should be smoothed over by optimized cached instructions in the future.
This was a bigger performance boost than I expected.
I tried making InterpretAndCheckExceptions test only the relevant exceptions (EXCEPTION_DSI, EXCEPTION_PROGRAM, or both) using templating, but didn't find a significant performance boost in it. As I am learning, the biggest bottleneck is the number of callbacks emitted, not usually the actual contents of them.
802c344
to
7a01bd6
Compare
In my non-scientific tests, this PR also gives me +1.5-2.0 FPS increase on a Retroid Pocket 2S. Dolphin is getting so ridiculously optimized that more and more games are becoming playable on potato ARM hardware. Amazing work, guys! |
It now supports variable-sized data payloads and memory range freeing. It's a little faster, too.