diff options
| author | 2014-05-20 18:50:16 -0400 | |
|---|---|---|
| committer | 2014-05-20 18:50:16 -0400 | |
| commit | 49dc2ce8ac4fc37a008fa28e0771c8c74c576b05 (patch) | |
| tree | 1640b629267273cb6afe73e7923833072ad55d7d /src/core/hle/kernel/thread.cpp | |
| parent | renamed "syscall" module to "svc" (more accurate naming) (diff) | |
| download | yuzu-49dc2ce8ac4fc37a008fa28e0771c8c74c576b05.tar.gz yuzu-49dc2ce8ac4fc37a008fa28e0771c8c74c576b05.tar.xz yuzu-49dc2ce8ac4fc37a008fa28e0771c8c74c576b05.zip | |
ARM_Interface: added SaveContext and LoadContext functions for HLE thread switching
Diffstat (limited to 'src/core/hle/kernel/thread.cpp')
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 38 |
1 files changed, 2 insertions, 36 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 136fff021..b3d306c53 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -98,46 +98,12 @@ inline void __SetCurrentThread(Thread* t) { | |||
| 98 | 98 | ||
| 99 | /// Saves the current CPU context | 99 | /// Saves the current CPU context |
| 100 | void __KernelSaveContext(ThreadContext& ctx) { | 100 | void __KernelSaveContext(ThreadContext& ctx) { |
| 101 | ctx.cpu_registers[0] = Core::g_app_core->GetReg(0); | 101 | Core::g_app_core->SaveContext(ctx); |
| 102 | ctx.cpu_registers[1] = Core::g_app_core->GetReg(1); | ||
| 103 | ctx.cpu_registers[2] = Core::g_app_core->GetReg(2); | ||
| 104 | ctx.cpu_registers[3] = Core::g_app_core->GetReg(3); | ||
| 105 | ctx.cpu_registers[4] = Core::g_app_core->GetReg(4); | ||
| 106 | ctx.cpu_registers[5] = Core::g_app_core->GetReg(5); | ||
| 107 | ctx.cpu_registers[6] = Core::g_app_core->GetReg(6); | ||
| 108 | ctx.cpu_registers[7] = Core::g_app_core->GetReg(7); | ||
| 109 | ctx.cpu_registers[8] = Core::g_app_core->GetReg(8); | ||
| 110 | ctx.cpu_registers[9] = Core::g_app_core->GetReg(9); | ||
| 111 | ctx.cpu_registers[10] = Core::g_app_core->GetReg(10); | ||
| 112 | ctx.cpu_registers[11] = Core::g_app_core->GetReg(11); | ||
| 113 | ctx.cpu_registers[12] = Core::g_app_core->GetReg(12); | ||
| 114 | ctx.sp = Core::g_app_core->GetReg(13); | ||
| 115 | ctx.lr = Core::g_app_core->GetReg(14); | ||
| 116 | ctx.pc = Core::g_app_core->GetPC(); | ||
| 117 | ctx.cpsr = Core::g_app_core->GetCPSR(); | ||
| 118 | } | 102 | } |
| 119 | 103 | ||
| 120 | /// Loads a CPU context | 104 | /// Loads a CPU context |
| 121 | void __KernelLoadContext(const ThreadContext& ctx) { | 105 | void __KernelLoadContext(const ThreadContext& ctx) { |
| 122 | Core::g_app_core->SetReg(0, ctx.cpu_registers[0]); | 106 | Core::g_app_core->LoadContext(ctx); |
| 123 | Core::g_app_core->SetReg(1, ctx.cpu_registers[1]); | ||
| 124 | Core::g_app_core->SetReg(2, ctx.cpu_registers[2]); | ||
| 125 | Core::g_app_core->SetReg(3, ctx.cpu_registers[3]); | ||
| 126 | Core::g_app_core->SetReg(4, ctx.cpu_registers[4]); | ||
| 127 | Core::g_app_core->SetReg(5, ctx.cpu_registers[5]); | ||
| 128 | Core::g_app_core->SetReg(6, ctx.cpu_registers[6]); | ||
| 129 | Core::g_app_core->SetReg(7, ctx.cpu_registers[7]); | ||
| 130 | Core::g_app_core->SetReg(8, ctx.cpu_registers[8]); | ||
| 131 | Core::g_app_core->SetReg(9, ctx.cpu_registers[9]); | ||
| 132 | Core::g_app_core->SetReg(10, ctx.cpu_registers[10]); | ||
| 133 | Core::g_app_core->SetReg(11, ctx.cpu_registers[11]); | ||
| 134 | Core::g_app_core->SetReg(12, ctx.cpu_registers[12]); | ||
| 135 | Core::g_app_core->SetReg(13, ctx.sp); | ||
| 136 | Core::g_app_core->SetReg(14, ctx.lr); | ||
| 137 | //Core::g_app_core->SetReg(15, ctx.pc); | ||
| 138 | |||
| 139 | Core::g_app_core->SetPC(ctx.pc); | ||
| 140 | Core::g_app_core->SetCPSR(ctx.cpsr); | ||
| 141 | } | 107 | } |
| 142 | 108 | ||
| 143 | /// Resets a thread | 109 | /// Resets a thread |