diff options
Diffstat (limited to 'src/ARMJIT_x64')
| -rw-r--r-- | src/ARMJIT_x64/ARMJIT_Compiler.h | 2 | ||||
| -rw-r--r-- | src/ARMJIT_x64/ARMJIT_LoadStore.cpp | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/ARMJIT_x64/ARMJIT_Compiler.h b/src/ARMJIT_x64/ARMJIT_Compiler.h index 0fe0147..9a64d09 100644 --- a/src/ARMJIT_x64/ARMJIT_Compiler.h +++ b/src/ARMJIT_x64/ARMJIT_Compiler.h @@ -179,7 +179,7 @@ public: Gen::OpArg MapReg(int reg) { - if (reg == 15 && RegCache.Mapping[reg] == Gen::INVALID_REG) + if (reg == 15 && !(RegCache.LoadedRegs & (1 << 15))) return Gen::Imm32(R15); assert(RegCache.Mapping[reg] != Gen::INVALID_REG); diff --git a/src/ARMJIT_x64/ARMJIT_LoadStore.cpp b/src/ARMJIT_x64/ARMJIT_LoadStore.cpp index aa84105..57d98cc 100644 --- a/src/ARMJIT_x64/ARMJIT_LoadStore.cpp +++ b/src/ARMJIT_x64/ARMJIT_LoadStore.cpp @@ -183,6 +183,12 @@ void Compiler::Comp_MemAccess(int rd, int rn, const Op2& op2, int size, int flag if (Config::JIT_FastMemory && ((!Thumb && CurInstr.Cond() != 0xE) || ARMJIT_Memory::IsFastmemCompatible(expectedTarget))) { + if (rdMapped.IsImm()) + { + MOV(32, R(RSCRATCH4), rdMapped); + rdMapped = R(RSCRATCH4); + } + u8* memopStart = GetWritableCodePtr(); LoadStorePatch patch; |