mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 05:47:56 -07:00
[AArch64] Allow the other FPR push/pop routines to use a temporary register.
This commit is contained in:
parent
f1a9db9bdc
commit
81242dd4a7
@ -167,12 +167,12 @@ void JitArm64::SafeLoadToReg(u32 dest, s32 addr, s32 offsetReg, u32 flags, s32 o
|
|||||||
// Has a chance of being backpatched which will destroy our state
|
// Has a chance of being backpatched which will destroy our state
|
||||||
// push and pop everything in this instance
|
// push and pop everything in this instance
|
||||||
ABI_PushRegisters(regs_in_use);
|
ABI_PushRegisters(regs_in_use);
|
||||||
m_float_emit.ABI_PushRegisters(fprs_in_use);
|
m_float_emit.ABI_PushRegisters(fprs_in_use, X30);
|
||||||
EmitBackpatchRoutine(this, flags,
|
EmitBackpatchRoutine(this, flags,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
dest_reg, XA);
|
dest_reg, XA);
|
||||||
m_float_emit.ABI_PopRegisters(fprs_in_use);
|
m_float_emit.ABI_PopRegisters(fprs_in_use, X30);
|
||||||
ABI_PopRegisters(regs_in_use);
|
ABI_PopRegisters(regs_in_use);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -318,12 +318,12 @@ void JitArm64::SafeStoreFromReg(s32 dest, u32 value, s32 regOffset, u32 flags, s
|
|||||||
// Has a chance of being backpatched which will destroy our state
|
// Has a chance of being backpatched which will destroy our state
|
||||||
// push and pop everything in this instance
|
// push and pop everything in this instance
|
||||||
ABI_PushRegisters(regs_in_use);
|
ABI_PushRegisters(regs_in_use);
|
||||||
m_float_emit.ABI_PushRegisters(fprs_in_use);
|
m_float_emit.ABI_PushRegisters(fprs_in_use, X30);
|
||||||
EmitBackpatchRoutine(this, flags,
|
EmitBackpatchRoutine(this, flags,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
RS, XA);
|
RS, XA);
|
||||||
m_float_emit.ABI_PopRegisters(fprs_in_use);
|
m_float_emit.ABI_PopRegisters(fprs_in_use, X30);
|
||||||
ABI_PopRegisters(regs_in_use);
|
ABI_PopRegisters(regs_in_use);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,12 +190,12 @@ void JitArm64::lfXX(UGeckoInstruction inst)
|
|||||||
// Has a chance of being backpatched which will destroy our state
|
// Has a chance of being backpatched which will destroy our state
|
||||||
// push and pop everything in this instance
|
// push and pop everything in this instance
|
||||||
ABI_PushRegisters(regs_in_use);
|
ABI_PushRegisters(regs_in_use);
|
||||||
m_float_emit.ABI_PushRegisters(fprs_in_use);
|
m_float_emit.ABI_PushRegisters(fprs_in_use, X30);
|
||||||
EmitBackpatchRoutine(this, flags,
|
EmitBackpatchRoutine(this, flags,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
VD, XA);
|
VD, XA);
|
||||||
m_float_emit.ABI_PopRegisters(fprs_in_use);
|
m_float_emit.ABI_PopRegisters(fprs_in_use, X30);
|
||||||
ABI_PopRegisters(regs_in_use);
|
ABI_PopRegisters(regs_in_use);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,9 +406,9 @@ void JitArm64::stfXX(UGeckoInstruction inst)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ABI_PushRegisters(regs_in_use);
|
ABI_PushRegisters(regs_in_use);
|
||||||
m_float_emit.ABI_PushRegisters(fprs_in_use);
|
m_float_emit.ABI_PushRegisters(fprs_in_use, X30);
|
||||||
EmitBackpatchRoutine(this, flags, false, false, V0, XA);
|
EmitBackpatchRoutine(this, flags, false, false, V0, XA);
|
||||||
m_float_emit.ABI_PopRegisters(fprs_in_use);
|
m_float_emit.ABI_PopRegisters(fprs_in_use, X30);
|
||||||
ABI_PopRegisters(regs_in_use);
|
ABI_PopRegisters(regs_in_use);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -417,12 +417,12 @@ void JitArm64::stfXX(UGeckoInstruction inst)
|
|||||||
// Has a chance of being backpatched which will destroy our state
|
// Has a chance of being backpatched which will destroy our state
|
||||||
// push and pop everything in this instance
|
// push and pop everything in this instance
|
||||||
ABI_PushRegisters(regs_in_use);
|
ABI_PushRegisters(regs_in_use);
|
||||||
m_float_emit.ABI_PushRegisters(fprs_in_use);
|
m_float_emit.ABI_PushRegisters(fprs_in_use, X30);
|
||||||
EmitBackpatchRoutine(this, flags,
|
EmitBackpatchRoutine(this, flags,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem,
|
||||||
V0, XA);
|
V0, XA);
|
||||||
m_float_emit.ABI_PopRegisters(fprs_in_use);
|
m_float_emit.ABI_PopRegisters(fprs_in_use, X30);
|
||||||
ABI_PopRegisters(regs_in_use);
|
ABI_PopRegisters(regs_in_use);
|
||||||
}
|
}
|
||||||
gpr.Unlock(W0, W1, W30);
|
gpr.Unlock(W0, W1, W30);
|
||||||
|
@ -79,11 +79,11 @@ private:
|
|||||||
ARM64FloatEmitter float_emit(m_emit);
|
ARM64FloatEmitter float_emit(m_emit);
|
||||||
|
|
||||||
m_emit->ABI_PushRegisters(m_gprs_in_use);
|
m_emit->ABI_PushRegisters(m_gprs_in_use);
|
||||||
float_emit.ABI_PushRegisters(m_fprs_in_use);
|
float_emit.ABI_PushRegisters(m_fprs_in_use, X1);
|
||||||
m_emit->MOVI2R(W1, m_address);
|
m_emit->MOVI2R(W1, m_address);
|
||||||
m_emit->MOV(W2, m_src_reg);
|
m_emit->MOV(W2, m_src_reg);
|
||||||
m_emit->BLR(m_emit->ABI_SetupLambda(lambda));
|
m_emit->BLR(m_emit->ABI_SetupLambda(lambda));
|
||||||
float_emit.ABI_PopRegisters(m_fprs_in_use);
|
float_emit.ABI_PopRegisters(m_fprs_in_use, X1);
|
||||||
m_emit->ABI_PopRegisters(m_gprs_in_use);
|
m_emit->ABI_PopRegisters(m_gprs_in_use);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,10 +179,10 @@ private:
|
|||||||
ARM64FloatEmitter float_emit(m_emit);
|
ARM64FloatEmitter float_emit(m_emit);
|
||||||
|
|
||||||
m_emit->ABI_PushRegisters(m_gprs_in_use);
|
m_emit->ABI_PushRegisters(m_gprs_in_use);
|
||||||
float_emit.ABI_PushRegisters(m_fprs_in_use);
|
float_emit.ABI_PushRegisters(m_fprs_in_use, X1);
|
||||||
m_emit->MOVI2R(W1, m_address);
|
m_emit->MOVI2R(W1, m_address);
|
||||||
m_emit->BLR(m_emit->ABI_SetupLambda(lambda));
|
m_emit->BLR(m_emit->ABI_SetupLambda(lambda));
|
||||||
float_emit.ABI_PopRegisters(m_fprs_in_use);
|
float_emit.ABI_PopRegisters(m_fprs_in_use, X1);
|
||||||
m_emit->ABI_PopRegisters(m_gprs_in_use);
|
m_emit->ABI_PopRegisters(m_gprs_in_use);
|
||||||
|
|
||||||
if (m_sign_extend)
|
if (m_sign_extend)
|
||||||
|
Loading…
Reference in New Issue
Block a user