Jit: Skip discarded registers when flushing for interpreter fallback #12682
+58
−24
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Normally, the asserts added in 34b0a6e are only triggered when something actually went wrong in Dolphin. But there is one exception: In FallBackToInterpreter, we flush all registers regardless of whether they're discarded. This is fine as long as none of the discarded registers are inputs to the instruction that the interpreter will run.
To avoid false positive asserts, this change adds a parameter to Flush that controls whether to skip the asserts for discarded registers.
Additionally, an assert for discarded registers is added to Arm64FPRCache::Flush. (Previously JitArm64 asserted for GPRs (and CRs) only, whereas Jit64 asserted both for GPRs and FPRs. I most likely didn't think of FPRs when writing 34b0a6e.)