summaryrefslogtreecommitdiff
path: root/src/core/arm
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2020-03-01 12:14:17 -0400
committerGravatar Fernando Sahmkow2020-06-27 11:35:58 -0400
commit1567824d2da8e9b49b433f3d1d753d8ad84e65f9 (patch)
treec9553bb3f1693e430054695737d2f87ba4b58955 /src/core/arm
parentCore: Refactor ARM Interface. (diff)
downloadyuzu-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.h2
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp4
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.h1
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp4
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.h1
-rw-r--r--src/core/arm/unicorn/arm_unicorn.cpp4
-rw-r--r--src/core/arm/unicorn/arm_unicorn.h1
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
168void ARM_Dynarmic_32::ChangeProcessorId(std::size_t new_core_id) {
169 // jit->ChangeProcessorId(new_core_id);
170}
171
168void ARM_Dynarmic_32::SaveContext(ThreadContext32& ctx) { 172void 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
261void ARM_Dynarmic_64::ChangeProcessorId(std::size_t new_core_id) {
262 jit->ChangeProcessorId(new_core_id);
263}
264
261void ARM_Dynarmic_64::SaveContext(ThreadContext64& ctx) { 265void 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
162void ARM_Unicorn::ChangeProcessorId(std::size_t new_core_id) {
163 core_index = new_core_id;
164}
165
162void ARM_Unicorn::Run() { 166void 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);