mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-09-20 00:08:42 +00:00
Merge pull request #4708 from degasus/PIE
Jit64: Use a temporary register for memory references.
This commit is contained in:
commit
45e4a048ea
5 changed files with 14 additions and 8 deletions
|
@ -780,7 +780,8 @@ const u8* Jit64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitBloc
|
|||
SetJumpTarget(extException);
|
||||
TEST(32, PPCSTATE(msr), Imm32(0x0008000));
|
||||
FixupBranch noExtIntEnable = J_CC(CC_Z, true);
|
||||
TEST(32, M(&ProcessorInterface::m_InterruptCause),
|
||||
MOV(64, R(RSCRATCH), ImmPtr(&ProcessorInterface::m_InterruptCause));
|
||||
TEST(32, MatR(RSCRATCH),
|
||||
Imm32(ProcessorInterface::INT_CAUSE_CP | ProcessorInterface::INT_CAUSE_PE_TOKEN |
|
||||
ProcessorInterface::INT_CAUSE_PE_FINISH));
|
||||
FixupBranch noCPInt = J_CC(CC_Z, true);
|
||||
|
@ -854,7 +855,8 @@ const u8* Jit64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitBloc
|
|||
ABI_PushRegistersAndAdjustStack({}, 0);
|
||||
ABI_CallFunction(PowerPC::CheckBreakPoints);
|
||||
ABI_PopRegistersAndAdjustStack({}, 0);
|
||||
TEST(32, M(CPU::GetStatePtr()), Imm32(0xFFFFFFFF));
|
||||
MOV(64, R(RSCRATCH), ImmPtr(CPU::GetStatePtr()));
|
||||
TEST(32, MatR(RSCRATCH), Imm32(0xFFFFFFFF));
|
||||
FixupBranch noBreakpoint = J_CC(CC_Z);
|
||||
|
||||
WriteExit(ops[i].address);
|
||||
|
|
|
@ -84,12 +84,14 @@ void Jit64AsmRoutineManager::Generate()
|
|||
|
||||
if (SConfig::GetInstance().bEnableDebugging)
|
||||
{
|
||||
TEST(32, M(CPU::GetStatePtr()), Imm32(static_cast<u32>(CPU::State::Stepping)));
|
||||
MOV(64, R(RSCRATCH), ImmPtr(CPU::GetStatePtr()));
|
||||
TEST(32, MatR(RSCRATCH), Imm32(static_cast<u32>(CPU::State::Stepping)));
|
||||
FixupBranch notStepping = J_CC(CC_Z);
|
||||
ABI_PushRegistersAndAdjustStack({}, 0);
|
||||
ABI_CallFunction(PowerPC::CheckBreakPoints);
|
||||
ABI_PopRegistersAndAdjustStack({}, 0);
|
||||
TEST(32, M(CPU::GetStatePtr()), Imm32(0xFFFFFFFF));
|
||||
MOV(64, R(RSCRATCH), ImmPtr(CPU::GetStatePtr()));
|
||||
TEST(32, MatR(RSCRATCH), Imm32(0xFFFFFFFF));
|
||||
dbg_exit = J_CC(CC_NZ, true);
|
||||
SetJumpTarget(notStepping);
|
||||
}
|
||||
|
@ -187,7 +189,8 @@ void Jit64AsmRoutineManager::Generate()
|
|||
|
||||
// Check the state pointer to see if we are exiting
|
||||
// Gets checked on at the end of every slice
|
||||
TEST(32, M(CPU::GetStatePtr()), Imm32(0xFFFFFFFF));
|
||||
MOV(64, R(RSCRATCH), ImmPtr(CPU::GetStatePtr()));
|
||||
TEST(32, MatR(RSCRATCH), Imm32(0xFFFFFFFF));
|
||||
J_CC(CC_Z, outerLoop);
|
||||
|
||||
// Landing pad for drec space
|
||||
|
|
|
@ -410,7 +410,8 @@ void Jit64::mtmsr(UGeckoInstruction inst)
|
|||
FixupBranch noExceptionsPending = J_CC(CC_Z);
|
||||
|
||||
// Check if a CP interrupt is waiting and keep the GPU emulation in sync (issue 4336)
|
||||
TEST(32, M(&ProcessorInterface::m_InterruptCause), Imm32(ProcessorInterface::INT_CAUSE_CP));
|
||||
MOV(64, R(RSCRATCH), ImmPtr(&ProcessorInterface::m_InterruptCause));
|
||||
TEST(32, MatR(RSCRATCH), Imm32(ProcessorInterface::INT_CAUSE_CP));
|
||||
FixupBranch cpInt = J_CC(CC_NZ);
|
||||
|
||||
MOV(32, PPCSTATE(pc), Imm32(js.compilerPC + 4));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue