diff options
| author | 2020-03-01 12:14:17 -0400 | |
|---|---|---|
| committer | 2020-06-27 11:35:58 -0400 | |
| commit | 1567824d2da8e9b49b433f3d1d753d8ad84e65f9 (patch) | |
| tree | c9553bb3f1693e430054695737d2f87ba4b58955 /src/core/arm | |
| parent | Core: Refactor ARM Interface. (diff) | |
| download | yuzu-1567824d2da8e9b49b433f3d1d753d8ad84e65f9.tar.gz yuzu-1567824d2da8e9b49b433f3d1d753d8ad84e65f9.tar.xz yuzu-1567824d2da8e9b49b433f3d1d753d8ad84e65f9.zip | |
General: Move ARM_Interface into Threads.
Diffstat (limited to 'src/core/arm')
| -rw-r--r-- | src/core/arm/arm_interface.h | 2 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 4 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.h | 1 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 4 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.h | 1 | ||||
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.cpp | 4 | ||||
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.h | 1 |
7 files changed, 17 insertions, 0 deletions
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index dc9b2ff7b..e5c484336 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h | |||
| @@ -148,6 +148,8 @@ public: | |||
| 148 | */ | 148 | */ |
| 149 | virtual void SetTPIDR_EL0(u64 value) = 0; | 149 | virtual void SetTPIDR_EL0(u64 value) = 0; |
| 150 | 150 | ||
| 151 | virtual void ChangeProcessorId(std::size_t new_core_id) = 0; | ||
| 152 | |||
| 151 | virtual void SaveContext(ThreadContext32& ctx) = 0; | 153 | virtual void SaveContext(ThreadContext32& ctx) = 0; |
| 152 | virtual void SaveContext(ThreadContext64& ctx) = 0; | 154 | virtual void SaveContext(ThreadContext64& ctx) = 0; |
| 153 | virtual void LoadContext(const ThreadContext32& ctx) = 0; | 155 | virtual void LoadContext(const ThreadContext32& ctx) = 0; |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index f36c5f401..9c47c133c 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -165,6 +165,10 @@ void ARM_Dynarmic_32::SetTPIDR_EL0(u64 value) { | |||
| 165 | cp15->uprw = static_cast<u32>(value); | 165 | cp15->uprw = static_cast<u32>(value); |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | void ARM_Dynarmic_32::ChangeProcessorId(std::size_t new_core_id) { | ||
| 169 | // jit->ChangeProcessorId(new_core_id); | ||
| 170 | } | ||
| 171 | |||
| 168 | void ARM_Dynarmic_32::SaveContext(ThreadContext32& ctx) { | 172 | void ARM_Dynarmic_32::SaveContext(ThreadContext32& ctx) { |
| 169 | Dynarmic::A32::Context context; | 173 | Dynarmic::A32::Context context; |
| 170 | jit->SaveContext(context); | 174 | jit->SaveContext(context); |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.h b/src/core/arm/dynarmic/arm_dynarmic_32.h index 2dd9a4df0..bea4933c8 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.h +++ b/src/core/arm/dynarmic/arm_dynarmic_32.h | |||
| @@ -47,6 +47,7 @@ public: | |||
| 47 | void SetTlsAddress(VAddr address) override; | 47 | void SetTlsAddress(VAddr address) override; |
| 48 | void SetTPIDR_EL0(u64 value) override; | 48 | void SetTPIDR_EL0(u64 value) override; |
| 49 | u64 GetTPIDR_EL0() const override; | 49 | u64 GetTPIDR_EL0() const override; |
| 50 | void ChangeProcessorId(std::size_t new_core_id) override; | ||
| 50 | 51 | ||
| 51 | void SaveContext(ThreadContext32& ctx) override; | 52 | void SaveContext(ThreadContext32& ctx) override; |
| 52 | void SaveContext(ThreadContext64& ctx) override {} | 53 | void SaveContext(ThreadContext64& ctx) override {} |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 8401ba631..03b3313cf 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -258,6 +258,10 @@ void ARM_Dynarmic_64::SetTPIDR_EL0(u64 value) { | |||
| 258 | cb->tpidr_el0 = value; | 258 | cb->tpidr_el0 = value; |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | void ARM_Dynarmic_64::ChangeProcessorId(std::size_t new_core_id) { | ||
| 262 | jit->ChangeProcessorId(new_core_id); | ||
| 263 | } | ||
| 264 | |||
| 261 | void ARM_Dynarmic_64::SaveContext(ThreadContext64& ctx) { | 265 | void ARM_Dynarmic_64::SaveContext(ThreadContext64& ctx) { |
| 262 | ctx.cpu_registers = jit->GetRegisters(); | 266 | ctx.cpu_registers = jit->GetRegisters(); |
| 263 | ctx.sp = jit->GetSP(); | 267 | ctx.sp = jit->GetSP(); |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.h b/src/core/arm/dynarmic/arm_dynarmic_64.h index 1c6791d4e..c26b47249 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.h +++ b/src/core/arm/dynarmic/arm_dynarmic_64.h | |||
| @@ -46,6 +46,7 @@ public: | |||
| 46 | void SetTlsAddress(VAddr address) override; | 46 | void SetTlsAddress(VAddr address) override; |
| 47 | void SetTPIDR_EL0(u64 value) override; | 47 | void SetTPIDR_EL0(u64 value) override; |
| 48 | u64 GetTPIDR_EL0() const override; | 48 | u64 GetTPIDR_EL0() const override; |
| 49 | void ChangeProcessorId(std::size_t new_core_id) override; | ||
| 49 | 50 | ||
| 50 | void SaveContext(ThreadContext32& ctx) override {} | 51 | void SaveContext(ThreadContext32& ctx) override {} |
| 51 | void SaveContext(ThreadContext64& ctx) override; | 52 | void SaveContext(ThreadContext64& ctx) override; |
diff --git a/src/core/arm/unicorn/arm_unicorn.cpp b/src/core/arm/unicorn/arm_unicorn.cpp index d81d1b5b0..099229c8d 100644 --- a/src/core/arm/unicorn/arm_unicorn.cpp +++ b/src/core/arm/unicorn/arm_unicorn.cpp | |||
| @@ -159,6 +159,10 @@ void ARM_Unicorn::SetTPIDR_EL0(u64 value) { | |||
| 159 | CHECKED(uc_reg_write(uc, UC_ARM64_REG_TPIDR_EL0, &value)); | 159 | CHECKED(uc_reg_write(uc, UC_ARM64_REG_TPIDR_EL0, &value)); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | void ARM_Unicorn::ChangeProcessorId(std::size_t new_core_id) { | ||
| 163 | core_index = new_core_id; | ||
| 164 | } | ||
| 165 | |||
| 162 | void ARM_Unicorn::Run() { | 166 | void ARM_Unicorn::Run() { |
| 163 | if (GDBStub::IsServerEnabled()) { | 167 | if (GDBStub::IsServerEnabled()) { |
| 164 | ExecuteInstructions(std::max(4000000U, 0U)); | 168 | ExecuteInstructions(std::max(4000000U, 0U)); |
diff --git a/src/core/arm/unicorn/arm_unicorn.h b/src/core/arm/unicorn/arm_unicorn.h index e3da368de..f09b24a85 100644 --- a/src/core/arm/unicorn/arm_unicorn.h +++ b/src/core/arm/unicorn/arm_unicorn.h | |||
| @@ -36,6 +36,7 @@ public: | |||
| 36 | void SetTlsAddress(VAddr address) override; | 36 | void SetTlsAddress(VAddr address) override; |
| 37 | void SetTPIDR_EL0(u64 value) override; | 37 | void SetTPIDR_EL0(u64 value) override; |
| 38 | u64 GetTPIDR_EL0() const override; | 38 | u64 GetTPIDR_EL0() const override; |
| 39 | void ChangeProcessorId(std::size_t new_core_id) override; | ||
| 39 | void PrepareReschedule() override; | 40 | void PrepareReschedule() override; |
| 40 | void ClearExclusiveState() override; | 41 | void ClearExclusiveState() override; |
| 41 | void ExecuteInstructions(std::size_t num_instructions); | 42 | void ExecuteInstructions(std::size_t num_instructions); |