JitArm64: Move all FLUSH_MAINTAIN_STATE to the far cache
This commit is contained in:
parent
b8dd68beef
commit
7196901b40
|
@ -401,6 +401,10 @@ const u8* JitArm64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitB
|
|||
LDR(INDEX_UNSIGNED, WA, X29, PPCSTATE_OFF(msr));
|
||||
FixupBranch b1 = TBNZ(WA, 13); // Test FP enabled bit
|
||||
|
||||
FixupBranch far = B();
|
||||
SwitchToFarCode();
|
||||
SetJumpTarget(far);
|
||||
|
||||
gpr.Flush(FLUSH_MAINTAIN_STATE);
|
||||
fpr.Flush(FLUSH_MAINTAIN_STATE);
|
||||
|
||||
|
@ -411,6 +415,8 @@ const u8* JitArm64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitB
|
|||
MOVI2R(WA, js.compilerPC);
|
||||
WriteExceptionExit(WA);
|
||||
|
||||
SwitchToNearCode();
|
||||
|
||||
SetJumpTarget(b1);
|
||||
|
||||
js.firstFPInstructionFound = true;
|
||||
|
|
|
@ -142,6 +142,10 @@ void JitArm64::bcx(UGeckoInstruction inst)
|
|||
!(inst.BO_2 & BO_BRANCH_IF_TRUE));
|
||||
}
|
||||
|
||||
FixupBranch far = B();
|
||||
SwitchToFarCode();
|
||||
SetJumpTarget(far);
|
||||
|
||||
if (inst.LK)
|
||||
{
|
||||
u32 Jumpto = js.compilerPC + 4;
|
||||
|
@ -161,6 +165,8 @@ void JitArm64::bcx(UGeckoInstruction inst)
|
|||
|
||||
WriteExit(destination);
|
||||
|
||||
SwitchToNearCode();
|
||||
|
||||
if ((inst.BO & BO_DONT_CHECK_CONDITION) == 0)
|
||||
SetJumpTarget( pConditionDontBranch );
|
||||
if ((inst.BO & BO_DONT_DECREMENT_FLAG) == 0)
|
||||
|
@ -235,6 +241,10 @@ void JitArm64::bclrx(UGeckoInstruction inst)
|
|||
!(inst.BO_2 & BO_BRANCH_IF_TRUE));
|
||||
}
|
||||
|
||||
FixupBranch far = B();
|
||||
SwitchToFarCode();
|
||||
SetJumpTarget(far);
|
||||
|
||||
LDR(INDEX_UNSIGNED, WA, X29, PPCSTATE_OFF(spr[SPR_LR]));
|
||||
AND(WA, WA, 30, 29); // Wipe the bottom 2 bits.
|
||||
|
||||
|
@ -252,6 +262,8 @@ void JitArm64::bclrx(UGeckoInstruction inst)
|
|||
|
||||
WriteExitDestInR(WA);
|
||||
|
||||
SwitchToNearCode();
|
||||
|
||||
if ((inst.BO & BO_DONT_CHECK_CONDITION) == 0)
|
||||
SetJumpTarget( pConditionDontBranch );
|
||||
if ((inst.BO & BO_DONT_DECREMENT_FLAG) == 0)
|
||||
|
|
|
@ -411,6 +411,10 @@ void JitArm64::lXX(UGeckoInstruction inst)
|
|||
// if it's still 0, we can wait until the next event
|
||||
FixupBranch noIdle = CBNZ(gpr.R(d));
|
||||
|
||||
FixupBranch far = B();
|
||||
SwitchToFarCode();
|
||||
SetJumpTarget(far);
|
||||
|
||||
gpr.Flush(FLUSH_MAINTAIN_STATE);
|
||||
fpr.Flush(FLUSH_MAINTAIN_STATE);
|
||||
|
||||
|
@ -423,6 +427,8 @@ void JitArm64::lXX(UGeckoInstruction inst)
|
|||
gpr.Unlock(WA);
|
||||
WriteExceptionExit();
|
||||
|
||||
SwitchToNearCode();
|
||||
|
||||
SetJumpTarget(noIdle);
|
||||
|
||||
//js.compilerPC += 8;
|
||||
|
|
|
@ -184,6 +184,10 @@ void JitArm64::twx(UGeckoInstruction inst)
|
|||
SetJumpTarget(fixup);
|
||||
}
|
||||
|
||||
FixupBranch far = B();
|
||||
SwitchToFarCode();
|
||||
SetJumpTarget(far);
|
||||
|
||||
gpr.Flush(FlushMode::FLUSH_MAINTAIN_STATE);
|
||||
fpr.Flush(FlushMode::FLUSH_MAINTAIN_STATE);
|
||||
|
||||
|
@ -196,6 +200,8 @@ void JitArm64::twx(UGeckoInstruction inst)
|
|||
// WA is unlocked in this function
|
||||
WriteExceptionExit(WA);
|
||||
|
||||
SwitchToNearCode();
|
||||
|
||||
SetJumpTarget(dont_trap);
|
||||
|
||||
if (!analyzer.HasOption(PPCAnalyst::PPCAnalyzer::OPTION_CONDITIONAL_CONTINUE))
|
||||
|
|
Loading…
Reference in New Issue