aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRSDuck <rsduck@users.noreply.github.com>2020-02-04 19:07:30 +0100
committerRSDuck <rsduck@users.noreply.github.com>2020-04-26 13:05:12 +0200
commit42d67c8145fdedc62acc7daa3e756b771b81e7b6 (patch)
treee6b7a1e2c67151631e37a815c0aac3487215c728 /src
parent2dbb9840fb4bba05d14d4df526c6a8ff2051d85c (diff)
fix LDM usermode for aarch64 as well
Diffstat (limited to 'src')
-rw-r--r--src/ARMJIT_A64/ARMJIT_Compiler.cpp3
-rw-r--r--src/ARMJIT_A64/ARMJIT_Compiler.h2
-rw-r--r--src/ARMJIT_A64/ARMJIT_LoadStore.cpp2
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));