summaryrefslogtreecommitdiff
path: root/src/core/arm
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2016-08-28 22:21:24 -0700
committerGravatar GitHub2016-08-28 22:21:24 -0700
commit474586bc53eb6fda40fb0db23ea1d50d32af28b6 (patch)
tree49df9979f3351f3eac26d8a74e25c5181ba35e6c /src/core/arm
parentMerge pull request #1987 from Lectem/ipcdescriptors (diff)
parentLDR: Implement CRO (diff)
downloadyuzu-474586bc53eb6fda40fb0db23ea1d50d32af28b6.tar.gz
yuzu-474586bc53eb6fda40fb0db23ea1d50d32af28b6.tar.xz
yuzu-474586bc53eb6fda40fb0db23ea1d50d32af28b6.zip
Merge pull request #1948 from wwylele/cro++
Implemented CRO
Diffstat (limited to 'src/core/arm')
-rw-r--r--src/core/arm/arm_interface.h3
-rw-r--r--src/core/arm/dyncom/arm_dyncom.cpp6
-rw-r--r--src/core/arm/dyncom/arm_dyncom.h2
3 files changed, 11 insertions, 0 deletions
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h
index d8abe5aeb..de5e9c8fa 100644
--- a/src/core/arm/arm_interface.h
+++ b/src/core/arm/arm_interface.h
@@ -32,6 +32,9 @@ public:
32 Run(1); 32 Run(1);
33 } 33 }
34 34
35 /// Clear all instruction cache
36 virtual void ClearInstructionCache() = 0;
37
35 /** 38 /**
36 * Set the Program Counter to an address 39 * Set the Program Counter to an address
37 * @param addr Address to set PC to 40 * @param addr Address to set PC to
diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp
index 13492a08b..ab77da965 100644
--- a/src/core/arm/dyncom/arm_dyncom.cpp
+++ b/src/core/arm/dyncom/arm_dyncom.cpp
@@ -12,6 +12,7 @@
12#include "core/arm/dyncom/arm_dyncom.h" 12#include "core/arm/dyncom/arm_dyncom.h"
13#include "core/arm/dyncom/arm_dyncom_interpreter.h" 13#include "core/arm/dyncom/arm_dyncom_interpreter.h"
14#include "core/arm/dyncom/arm_dyncom_run.h" 14#include "core/arm/dyncom/arm_dyncom_run.h"
15#include "core/arm/dyncom/arm_dyncom_trans.h"
15 16
16#include "core/core.h" 17#include "core/core.h"
17#include "core/core_timing.h" 18#include "core/core_timing.h"
@@ -23,6 +24,11 @@ ARM_DynCom::ARM_DynCom(PrivilegeMode initial_mode) {
23ARM_DynCom::~ARM_DynCom() { 24ARM_DynCom::~ARM_DynCom() {
24} 25}
25 26
27void ARM_DynCom::ClearInstructionCache() {
28 state->instruction_cache.clear();
29 trans_cache_buf_top = 0;
30}
31
26void ARM_DynCom::SetPC(u32 pc) { 32void ARM_DynCom::SetPC(u32 pc) {
27 state->Reg[15] = pc; 33 state->Reg[15] = pc;
28} 34}
diff --git a/src/core/arm/dyncom/arm_dyncom.h b/src/core/arm/dyncom/arm_dyncom.h
index 3664fd728..e763abc24 100644
--- a/src/core/arm/dyncom/arm_dyncom.h
+++ b/src/core/arm/dyncom/arm_dyncom.h
@@ -21,6 +21,8 @@ public:
21 ARM_DynCom(PrivilegeMode initial_mode); 21 ARM_DynCom(PrivilegeMode initial_mode);
22 ~ARM_DynCom(); 22 ~ARM_DynCom();
23 23
24 void ClearInstructionCache() override;
25
24 void SetPC(u32 pc) override; 26 void SetPC(u32 pc) override;
25 u32 GetPC() const override; 27 u32 GetPC() const override;
26 u32 GetReg(int index) const override; 28 u32 GetReg(int index) const override;