diff options
author | RSDuck <rsduck@users.noreply.github.com> | 2020-02-04 19:07:30 +0100 |
---|---|---|
committer | RSDuck <rsduck@users.noreply.github.com> | 2020-04-26 13:05:12 +0200 |
commit | 42d67c8145fdedc62acc7daa3e756b771b81e7b6 (patch) | |
tree | e6b7a1e2c67151631e37a815c0aac3487215c728 /src | |
parent | 2dbb9840fb4bba05d14d4df526c6a8ff2051d85c (diff) |
fix LDM usermode for aarch64 as well
Diffstat (limited to 'src')
-rw-r--r-- | src/ARMJIT_A64/ARMJIT_Compiler.cpp | 3 | ||||
-rw-r--r-- | src/ARMJIT_A64/ARMJIT_Compiler.h | 2 | ||||
-rw-r--r-- | src/ARMJIT_A64/ARMJIT_LoadStore.cpp | 2 |
3 files changed, 5 insertions, 2 deletions
diff --git a/src/ARMJIT_A64/ARMJIT_Compiler.cpp b/src/ARMJIT_A64/ARMJIT_Compiler.cpp index b598ac8..d61cc9c 100644 --- a/src/ARMJIT_A64/ARMJIT_Compiler.cpp +++ b/src/ARMJIT_A64/ARMJIT_Compiler.cpp @@ -357,7 +357,8 @@ const Compiler::CompileFunc A_Comp[ARMInstrInfo::ak_Count] = // Branch F(BranchImm), F(BranchImm), F(BranchImm), F(BranchXchangeReg), F(BranchXchangeReg), // Special - NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + F(Nop) }; #undef F #define F(x) &Compiler::T_Comp_##x diff --git a/src/ARMJIT_A64/ARMJIT_Compiler.h b/src/ARMJIT_A64/ARMJIT_Compiler.h index 7e13507..5c9ef41 100644 --- a/src/ARMJIT_A64/ARMJIT_Compiler.h +++ b/src/ARMJIT_A64/ARMJIT_Compiler.h @@ -103,6 +103,8 @@ public: void LoadCPSR(); void SaveCPSR(bool markClean = true); + void Nop() {} + void A_Comp_ALUTriOp(); void A_Comp_ALUMovOp(); void A_Comp_ALUCmpOp(); diff --git a/src/ARMJIT_A64/ARMJIT_LoadStore.cpp b/src/ARMJIT_A64/ARMJIT_LoadStore.cpp index a5d0e3f..4fd8559 100644 --- a/src/ARMJIT_A64/ARMJIT_LoadStore.cpp +++ b/src/ARMJIT_A64/ARMJIT_LoadStore.cpp @@ -639,7 +639,7 @@ s32 Compiler::Comp_MemAccessBlock(int rn, BitSet16 regs, bool store, bool preinc int reg = *it; - if (usermode && reg >= 8 && reg < 15) + if (usermode && !regs[15] && reg >= 8 && reg < 15) { if (RegCache.Mapping[reg] != INVALID_REG) MOV(W3, MapReg(reg)); |