From 3a51b3c6e38b511363eac2524f08410e078ed6d3 Mon Sep 17 00:00:00 2001 From: magumagu9 Date: Fri, 26 Dec 2008 08:56:17 +0000 Subject: [PATCH] Generalize SafeWriteRegToReg. The non-32-bit forms aren't yet used, but could be nice to have. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1673 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/PowerPC/Jit64/Jit_Util.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Util.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Util.cpp index 17b34afd34..ec626fdfb7 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Util.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Util.cpp @@ -110,12 +110,17 @@ void Jit64::SafeWriteRegToReg(X64Reg reg_value, X64Reg reg_addr, int accessSize, if (offset) ADD(32, R(reg_addr), Imm32(offset)); TEST(32, R(reg_addr), Imm32(0x0C000000)); - FixupBranch unsafe_addr = J_CC(CC_NZ); + FixupBranch argh = J_CC(CC_Z); + switch (accessSize) + { + case 32: ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U32, 2), reg_value, reg_addr); break; + case 16: ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U16, 2), reg_value, reg_addr); break; + case 8: ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U8, 2), reg_value, reg_addr); break; + } + FixupBranch arg2 = J(); + SetJumpTarget(argh); UnsafeWriteRegToReg(reg_value, reg_addr, accessSize, 0); - FixupBranch skip_call = J(); - SetJumpTarget(unsafe_addr); - ABI_CallFunctionRR(thunks.ProtectFunction((void *)&Memory::Write_U32, 2), ABI_PARAM1, ABI_PARAM2); - SetJumpTarget(skip_call); + SetJumpTarget(arg2); } void Jit64::WriteToConstRamAddress(int accessSize, const Gen::OpArg& arg, u32 address)