From 12629beff8d9e1eb9a23f1f5ac05d6b56abf946f Mon Sep 17 00:00:00 2001 From: JosJuice Date: Mon, 26 Jul 2021 17:34:00 +0200 Subject: [PATCH] JitArm64: Call swap variants of memory write functions Write_U16_Swap leaves the upper 32 bits alone. Reimplementing this correctly in the JIT would require more than one instruction, so let's just call Write_U16_Swap instead, like Jit64 does. --- .../Core/Core/PowerPC/JitArm64/JitArm64_BackPatch.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_BackPatch.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_BackPatch.cpp index b45bbfc35a..51fa36b7b0 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_BackPatch.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_BackPatch.cpp @@ -197,18 +197,16 @@ void JitArm64::EmitBackpatchRoutine(u32 flags, bool fastmem, bool do_farcode, AR } else if (flags & BackPatchInfo::FLAG_STORE) { - ARM64Reg temp = ARM64Reg::W0; - temp = ByteswapBeforeStore(this, temp, RS, flags, false); - if (temp != ARM64Reg::W0) - MOV(ARM64Reg::W0, temp); + const bool reverse = (flags & BackPatchInfo::FLAG_REVERSE) != 0; if (flags & BackPatchInfo::FLAG_SIZE_32) - MOVP2R(ARM64Reg::X8, &PowerPC::Write_U32); + MOVP2R(ARM64Reg::X8, reverse ? &PowerPC::Write_U32_Swap : &PowerPC::Write_U32); else if (flags & BackPatchInfo::FLAG_SIZE_16) - MOVP2R(ARM64Reg::X8, &PowerPC::Write_U16); + MOVP2R(ARM64Reg::X8, reverse ? &PowerPC::Write_U16_Swap : &PowerPC::Write_U16); else MOVP2R(ARM64Reg::X8, &PowerPC::Write_U8); + MOV(ARM64Reg::W0, RS); BLR(ARM64Reg::X8); } else if (flags & BackPatchInfo::FLAG_ZERO_256)