summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/arm_interface.h19
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp4
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.h8
-rw-r--r--src/core/arm/dyncom/arm_dyncom.cpp4
-rw-r--r--src/core/arm/dyncom/arm_dyncom.h8
-rw-r--r--src/core/core.h11
-rw-r--r--src/core/hle/kernel/thread.cpp6
-rw-r--r--src/core/hle/kernel/thread.h3
8 files changed, 26 insertions, 37 deletions
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h
index e466b21b2..ccd43f431 100644
--- a/src/core/arm/arm_interface.h
+++ b/src/core/arm/arm_interface.h
@@ -8,15 +8,22 @@
8#include "core/arm/skyeye_common/arm_regformat.h" 8#include "core/arm/skyeye_common/arm_regformat.h"
9#include "core/arm/skyeye_common/vfp/asm_vfp.h" 9#include "core/arm/skyeye_common/vfp/asm_vfp.h"
10 10
11namespace Core {
12struct ThreadContext;
13}
14
15/// Generic ARM11 CPU interface 11/// Generic ARM11 CPU interface
16class ARM_Interface : NonCopyable { 12class ARM_Interface : NonCopyable {
17public: 13public:
18 virtual ~ARM_Interface() {} 14 virtual ~ARM_Interface() {}
19 15
16 struct ThreadContext {
17 u32 cpu_registers[13];
18 u32 sp;
19 u32 lr;
20 u32 pc;
21 u32 cpsr;
22 u32 fpu_registers[64];
23 u32 fpscr;
24 u32 fpexc;
25 };
26
20 /** 27 /**
21 * Runs the CPU for the given number of instructions 28 * Runs the CPU for the given number of instructions
22 * @param num_instructions Number of instructions to run 29 * @param num_instructions Number of instructions to run
@@ -124,13 +131,13 @@ public:
124 * Saves the current CPU context 131 * Saves the current CPU context
125 * @param ctx Thread context to save 132 * @param ctx Thread context to save
126 */ 133 */
127 virtual void SaveContext(Core::ThreadContext& ctx) = 0; 134 virtual void SaveContext(ThreadContext& ctx) = 0;
128 135
129 /** 136 /**
130 * Loads a CPU context 137 * Loads a CPU context
131 * @param ctx Thread context to load 138 * @param ctx Thread context to load
132 */ 139 */
133 virtual void LoadContext(const Core::ThreadContext& ctx) = 0; 140 virtual void LoadContext(const ThreadContext& ctx) = 0;
134 141
135 /// Prepare core for thread reschedule (if needed to correctly handle state) 142 /// Prepare core for thread reschedule (if needed to correctly handle state)
136 virtual void PrepareReschedule() = 0; 143 virtual void PrepareReschedule() = 0;
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index fc4254670..5290382ff 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -137,7 +137,7 @@ void ARM_Dynarmic::ExecuteInstructions(int num_instructions) {
137 AddTicks(ticks_executed); 137 AddTicks(ticks_executed);
138} 138}
139 139
140void ARM_Dynarmic::SaveContext(Core::ThreadContext& ctx) { 140void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) {
141 memcpy(ctx.cpu_registers, jit->Regs().data(), sizeof(ctx.cpu_registers)); 141 memcpy(ctx.cpu_registers, jit->Regs().data(), sizeof(ctx.cpu_registers));
142 memcpy(ctx.fpu_registers, jit->ExtRegs().data(), sizeof(ctx.fpu_registers)); 142 memcpy(ctx.fpu_registers, jit->ExtRegs().data(), sizeof(ctx.fpu_registers));
143 143
@@ -150,7 +150,7 @@ void ARM_Dynarmic::SaveContext(Core::ThreadContext& ctx) {
150 ctx.fpexc = interpreter_state->VFP[VFP_FPEXC]; 150 ctx.fpexc = interpreter_state->VFP[VFP_FPEXC];
151} 151}
152 152
153void ARM_Dynarmic::LoadContext(const Core::ThreadContext& ctx) { 153void ARM_Dynarmic::LoadContext(const ARM_Interface::ThreadContext& ctx) {
154 memcpy(jit->Regs().data(), ctx.cpu_registers, sizeof(ctx.cpu_registers)); 154 memcpy(jit->Regs().data(), ctx.cpu_registers, sizeof(ctx.cpu_registers));
155 memcpy(jit->ExtRegs().data(), ctx.fpu_registers, sizeof(ctx.fpu_registers)); 155 memcpy(jit->ExtRegs().data(), ctx.fpu_registers, sizeof(ctx.fpu_registers));
156 156
diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h
index ced86d29b..87ab53d81 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.h
+++ b/src/core/arm/dynarmic/arm_dynarmic.h
@@ -10,10 +10,6 @@
10#include "core/arm/arm_interface.h" 10#include "core/arm/arm_interface.h"
11#include "core/arm/skyeye_common/armstate.h" 11#include "core/arm/skyeye_common/armstate.h"
12 12
13namespace Core {
14struct ThreadContext;
15}
16
17class ARM_Dynarmic final : public ARM_Interface { 13class ARM_Dynarmic final : public ARM_Interface {
18public: 14public:
19 ARM_Dynarmic(PrivilegeMode initial_mode); 15 ARM_Dynarmic(PrivilegeMode initial_mode);
@@ -33,8 +29,8 @@ public:
33 29
34 void AddTicks(u64 ticks) override; 30 void AddTicks(u64 ticks) override;
35 31
36 void SaveContext(Core::ThreadContext& ctx) override; 32 void SaveContext(ThreadContext& ctx) override;
37 void LoadContext(const Core::ThreadContext& ctx) override; 33 void LoadContext(const ThreadContext& ctx) override;
38 34
39 void PrepareReschedule() override; 35 void PrepareReschedule() override;
40 void ExecuteInstructions(int num_instructions) override; 36 void ExecuteInstructions(int num_instructions) override;
diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp
index 34c7f945e..81f9bf99e 100644
--- a/src/core/arm/dyncom/arm_dyncom.cpp
+++ b/src/core/arm/dyncom/arm_dyncom.cpp
@@ -89,7 +89,7 @@ void ARM_DynCom::ExecuteInstructions(int num_instructions) {
89 AddTicks(ticks_executed); 89 AddTicks(ticks_executed);
90} 90}
91 91
92void ARM_DynCom::SaveContext(Core::ThreadContext& ctx) { 92void ARM_DynCom::SaveContext(ThreadContext& ctx) {
93 memcpy(ctx.cpu_registers, state->Reg.data(), sizeof(ctx.cpu_registers)); 93 memcpy(ctx.cpu_registers, state->Reg.data(), sizeof(ctx.cpu_registers));
94 memcpy(ctx.fpu_registers, state->ExtReg.data(), sizeof(ctx.fpu_registers)); 94 memcpy(ctx.fpu_registers, state->ExtReg.data(), sizeof(ctx.fpu_registers));
95 95
@@ -102,7 +102,7 @@ void ARM_DynCom::SaveContext(Core::ThreadContext& ctx) {
102 ctx.fpexc = state->VFP[VFP_FPEXC]; 102 ctx.fpexc = state->VFP[VFP_FPEXC];
103} 103}
104 104
105void ARM_DynCom::LoadContext(const Core::ThreadContext& ctx) { 105void ARM_DynCom::LoadContext(const ThreadContext& ctx) {
106 memcpy(state->Reg.data(), ctx.cpu_registers, sizeof(ctx.cpu_registers)); 106 memcpy(state->Reg.data(), ctx.cpu_registers, sizeof(ctx.cpu_registers));
107 memcpy(state->ExtReg.data(), ctx.fpu_registers, sizeof(ctx.fpu_registers)); 107 memcpy(state->ExtReg.data(), ctx.fpu_registers, sizeof(ctx.fpu_registers));
108 108
diff --git a/src/core/arm/dyncom/arm_dyncom.h b/src/core/arm/dyncom/arm_dyncom.h
index 65db1f0f9..62c174f3c 100644
--- a/src/core/arm/dyncom/arm_dyncom.h
+++ b/src/core/arm/dyncom/arm_dyncom.h
@@ -10,10 +10,6 @@
10#include "core/arm/skyeye_common/arm_regformat.h" 10#include "core/arm/skyeye_common/arm_regformat.h"
11#include "core/arm/skyeye_common/armstate.h" 11#include "core/arm/skyeye_common/armstate.h"
12 12
13namespace Core {
14struct ThreadContext;
15}
16
17class ARM_DynCom final : public ARM_Interface { 13class ARM_DynCom final : public ARM_Interface {
18public: 14public:
19 ARM_DynCom(PrivilegeMode initial_mode); 15 ARM_DynCom(PrivilegeMode initial_mode);
@@ -36,8 +32,8 @@ public:
36 32
37 void AddTicks(u64 ticks) override; 33 void AddTicks(u64 ticks) override;
38 34
39 void SaveContext(Core::ThreadContext& ctx) override; 35 void SaveContext(ThreadContext& ctx) override;
40 void LoadContext(const Core::ThreadContext& ctx) override; 36 void LoadContext(const ThreadContext& ctx) override;
41 37
42 void PrepareReschedule() override; 38 void PrepareReschedule() override;
43 void ExecuteInstructions(int num_instructions) override; 39 void ExecuteInstructions(int num_instructions) override;
diff --git a/src/core/core.h b/src/core/core.h
index b0f8df441..1015e8847 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -19,17 +19,6 @@ class AppLoader;
19 19
20namespace Core { 20namespace Core {
21 21
22struct ThreadContext {
23 u32 cpu_registers[13];
24 u32 sp;
25 u32 lr;
26 u32 pc;
27 u32 cpsr;
28 u32 fpu_registers[64];
29 u32 fpscr;
30 u32 fpexc;
31};
32
33class System { 22class System {
34public: 23public:
35 /** 24 /**
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index 60b7bea70..5fb95dada 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -384,9 +384,9 @@ std::tuple<u32, u32, bool> GetFreeThreadLocalSlot(std::vector<std::bitset<8>>& t
384 * @param entry_point Address of entry point for execution 384 * @param entry_point Address of entry point for execution
385 * @param arg User argument for thread 385 * @param arg User argument for thread
386 */ 386 */
387static void ResetThreadContext(Core::ThreadContext& context, u32 stack_top, u32 entry_point, 387static void ResetThreadContext(ARM_Interface::ThreadContext& context, u32 stack_top,
388 u32 arg) { 388 u32 entry_point, u32 arg) {
389 memset(&context, 0, sizeof(Core::ThreadContext)); 389 memset(&context, 0, sizeof(ARM_Interface::ThreadContext));
390 390
391 context.cpu_registers[0] = arg; 391 context.cpu_registers[0] = arg;
392 context.pc = entry_point; 392 context.pc = entry_point;
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h
index 89acc12c1..c77ac644d 100644
--- a/src/core/hle/kernel/thread.h
+++ b/src/core/hle/kernel/thread.h
@@ -10,6 +10,7 @@
10#include <boost/container/flat_map.hpp> 10#include <boost/container/flat_map.hpp>
11#include <boost/container/flat_set.hpp> 11#include <boost/container/flat_set.hpp>
12#include "common/common_types.h" 12#include "common/common_types.h"
13#include "core/arm/arm_interface.h"
13#include "core/core.h" 14#include "core/core.h"
14#include "core/hle/kernel/kernel.h" 15#include "core/hle/kernel/kernel.h"
15#include "core/hle/result.h" 16#include "core/hle/result.h"
@@ -157,7 +158,7 @@ public:
157 return !wait_objects.empty(); 158 return !wait_objects.empty();
158 } 159 }
159 160
160 Core::ThreadContext context; 161 ARM_Interface::ThreadContext context;
161 162
162 u32 thread_id; 163 u32 thread_id;
163 164