aboutsummaryrefslogtreecommitdiff
path: root/src/ARM.cpp
diff options
context:
space:
mode:
authorRSDuck <rsduck@users.noreply.github.com>2020-05-09 00:45:05 +0200
committerRSDuck <rsduck@users.noreply.github.com>2020-06-16 12:01:08 +0200
commit052ff7367211728209d6eb5f8f0f6d02cfab321e (patch)
treeb9c99618a88d3a30846200a96077e7c7d9357c3e /src/ARM.cpp
parentb902cd1b8e0b5509f108e2b60ded3ec38b1c53fc (diff)
rewrite JIT memory emulation
Diffstat (limited to 'src/ARM.cpp')
-rw-r--r--src/ARM.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/ARM.cpp b/src/ARM.cpp
index 6b8df30..92a3a9e 100644
--- a/src/ARM.cpp
+++ b/src/ARM.cpp
@@ -622,7 +622,8 @@ void ARMv5::ExecuteJIT()
while (NDS::ARM9Timestamp < NDS::ARM9Target)
{
u32 instrAddr = R[15] - ((CPSR&0x20)?2:4);
- if (!ARMJIT::IsMapped<0>(instrAddr))
+ u32 translatedAddr = ARMJIT::TranslateAddr9(instrAddr);
+ if (!translatedAddr)
{
NDS::ARM9Timestamp = NDS::ARM9Target;
printf("ARMv5 PC in non executable region %08X\n", R[15]);
@@ -632,7 +633,7 @@ void ARMv5::ExecuteJIT()
// hack so Cycles <= 0 becomes Cycles < 0
Cycles = NDS::ARM9Target - NDS::ARM9Timestamp - 1;
- ARMJIT::JitBlockEntry block = ARMJIT::LookUpBlockEntry(ARMJIT::TranslateAddr<0>(instrAddr));
+ ARMJIT::JitBlockEntry block = ARMJIT::LookUpBlockEntry<0>(translatedAddr);
if (block)
ARM_Dispatch(this, block);
else
@@ -765,7 +766,8 @@ void ARMv4::ExecuteJIT()
while (NDS::ARM7Timestamp < NDS::ARM7Target)
{
u32 instrAddr = R[15] - ((CPSR&0x20)?2:4);
- if (!ARMJIT::IsMapped<1>(instrAddr))
+ u32 translatedAddr = ARMJIT::TranslateAddr7(instrAddr);
+ if (!translatedAddr)
{
NDS::ARM7Timestamp = NDS::ARM7Target;
printf("ARMv4 PC in non executable region %08X\n", R[15]);
@@ -774,7 +776,7 @@ void ARMv4::ExecuteJIT()
Cycles = NDS::ARM7Target - NDS::ARM7Timestamp - 1;
- ARMJIT::JitBlockEntry block = ARMJIT::LookUpBlockEntry(ARMJIT::TranslateAddr<1>(instrAddr));
+ ARMJIT::JitBlockEntry block = ARMJIT::LookUpBlockEntry<1>(translatedAddr);
if (block)
ARM_Dispatch(this, block);
else