diff options
| author | 2016-08-28 22:21:24 -0700 | |
|---|---|---|
| committer | 2016-08-28 22:21:24 -0700 | |
| commit | 474586bc53eb6fda40fb0db23ea1d50d32af28b6 (patch) | |
| tree | 49df9979f3351f3eac26d8a74e25c5181ba35e6c /src/core/arm | |
| parent | Merge pull request #1987 from Lectem/ipcdescriptors (diff) | |
| parent | LDR: Implement CRO (diff) | |
| download | yuzu-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.h | 3 | ||||
| -rw-r--r-- | src/core/arm/dyncom/arm_dyncom.cpp | 6 | ||||
| -rw-r--r-- | src/core/arm/dyncom/arm_dyncom.h | 2 |
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) { | |||
| 23 | ARM_DynCom::~ARM_DynCom() { | 24 | ARM_DynCom::~ARM_DynCom() { |
| 24 | } | 25 | } |
| 25 | 26 | ||
| 27 | void ARM_DynCom::ClearInstructionCache() { | ||
| 28 | state->instruction_cache.clear(); | ||
| 29 | trans_cache_buf_top = 0; | ||
| 30 | } | ||
| 31 | |||
| 26 | void ARM_DynCom::SetPC(u32 pc) { | 32 | void 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; |