From 81242dd4a7a219dfb0995a709c20ce4e2ee9f4a2 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Mon, 2 Mar 2015 21:38:09 -0600 Subject: [PATCH] [AArch64] Allow the other FPR push/pop routines to use a temporary register. --- .../Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp | 8 ++++---- .../PowerPC/JitArm64/JitArm64_LoadStoreFloating.cpp | 12 ++++++------ Source/Core/Core/PowerPC/JitArm64/Jit_Util.cpp | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp index 99fe6a1581..0e10fcbb52 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp @@ -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 // push and pop everything in this instance 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, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, 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); } @@ -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 // push and pop everything in this instance 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, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, RS, XA); - m_float_emit.ABI_PopRegisters(fprs_in_use); + m_float_emit.ABI_PopRegisters(fprs_in_use, X30); ABI_PopRegisters(regs_in_use); } diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStoreFloating.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStoreFloating.cpp index 21da40da3f..1247dacd6d 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStoreFloating.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStoreFloating.cpp @@ -190,12 +190,12 @@ void JitArm64::lfXX(UGeckoInstruction inst) // Has a chance of being backpatched which will destroy our state // push and pop everything in this instance 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, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, VD, XA); - m_float_emit.ABI_PopRegisters(fprs_in_use); + m_float_emit.ABI_PopRegisters(fprs_in_use, X30); ABI_PopRegisters(regs_in_use); } @@ -406,9 +406,9 @@ void JitArm64::stfXX(UGeckoInstruction inst) else { 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); - m_float_emit.ABI_PopRegisters(fprs_in_use); + m_float_emit.ABI_PopRegisters(fprs_in_use, X30); 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 // push and pop everything in this instance 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, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, SConfig::GetInstance().m_LocalCoreStartupParameter.bFastmem, V0, XA); - m_float_emit.ABI_PopRegisters(fprs_in_use); + m_float_emit.ABI_PopRegisters(fprs_in_use, X30); ABI_PopRegisters(regs_in_use); } gpr.Unlock(W0, W1, W30); diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit_Util.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit_Util.cpp index 6c35cc0649..20606a9554 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit_Util.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/Jit_Util.cpp @@ -79,11 +79,11 @@ private: ARM64FloatEmitter float_emit(m_emit); 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->MOV(W2, m_src_reg); 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); } @@ -179,10 +179,10 @@ private: ARM64FloatEmitter float_emit(m_emit); 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->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); if (m_sign_extend)