JitArm64: Optimize a few tail calls
Maybe "tail call" isn't quite the right term for what this code is doing, since it's jumping to the dispatcher rather than returning, but it's the same optimization as for a tail call.
This commit is contained in:
parent
dbf5dca11c
commit
351d095fff
|
@ -344,8 +344,9 @@ void JitArm64::IntializeSpeculativeConstants()
|
|||
STR(IndexType::Unsigned, DISPATCHER_PC, PPC_REG, PPCSTATE_OFF(pc));
|
||||
MOVP2R(ARM64Reg::X8, &JitInterface::CompileExceptionCheck);
|
||||
MOVI2R(ARM64Reg::W0, static_cast<u32>(JitInterface::ExceptionType::SpeculativeConstants));
|
||||
BLR(ARM64Reg::X8);
|
||||
B(dispatcher_no_check);
|
||||
// Write dispatcher_no_check to LR for tail call
|
||||
MOVP2R(ARM64Reg::X30, dispatcher_no_check);
|
||||
BR(ARM64Reg::X8);
|
||||
SwitchToNearCode();
|
||||
}
|
||||
|
||||
|
@ -837,10 +838,11 @@ bool JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
|
|||
SetJumpTarget(fail);
|
||||
MOVI2R(DISPATCHER_PC, js.blockStart);
|
||||
STR(IndexType::Unsigned, DISPATCHER_PC, PPC_REG, PPCSTATE_OFF(pc));
|
||||
MOVP2R(ARM64Reg::X8, &JitInterface::CompileExceptionCheck);
|
||||
MOVI2R(ARM64Reg::W0, static_cast<u32>(JitInterface::ExceptionType::PairedQuantize));
|
||||
MOVP2R(ARM64Reg::X1, &JitInterface::CompileExceptionCheck);
|
||||
BLR(ARM64Reg::X1);
|
||||
B(dispatcher_no_check);
|
||||
// Write dispatcher_no_check to LR for tail call
|
||||
MOVP2R(ARM64Reg::X30, dispatcher_no_check);
|
||||
BR(ARM64Reg::X8);
|
||||
SwitchToNearCode();
|
||||
SetJumpTarget(no_fail);
|
||||
js.assumeNoPairedQuantize = true;
|
||||
|
|
Loading…
Reference in New Issue