diff options
| author | bunnei <bunneidev@gmail.com> | 2018-07-21 10:48:30 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-21 10:48:30 -0700 |
| commit | fe2498a65038bdea6ac5e4a2fad4fc992d4ff4ba (patch) | |
| tree | e4d5cfdca67efdf79956f275f346f68292629ade /src/core/hle/kernel/scheduler.cpp | |
| parent | 3d938b8c602d3e9ea44fd4144fa7a6daeb1affac (diff) | |
| parent | d84eb9dac64f314adcef2c374de245012f658b1d (diff) | |
Merge pull request #751 from Subv/tpidr_el0
CPU: Save and restore the TPIDR_EL0 system register on every context switch
Diffstat (limited to 'src/core/hle/kernel/scheduler.cpp')
| -rw-r--r-- | src/core/hle/kernel/scheduler.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp index f7e25cbf5..e307eec98 100644 --- a/src/core/hle/kernel/scheduler.cpp +++ b/src/core/hle/kernel/scheduler.cpp @@ -56,6 +56,8 @@ void Scheduler::SwitchContext(Thread* new_thread) { if (previous_thread) { previous_thread->last_running_ticks = CoreTiming::GetTicks(); cpu_core->SaveContext(previous_thread->context); + // Save the TPIDR_EL0 system register in case it was modified. + previous_thread->tpidr_el0 = cpu_core->GetTPIDR_EL0(); if (previous_thread->status == ThreadStatus::Running) { // This is only the case when a reschedule is triggered without the current thread @@ -87,6 +89,7 @@ void Scheduler::SwitchContext(Thread* new_thread) { cpu_core->LoadContext(new_thread->context); cpu_core->SetTlsAddress(new_thread->GetTLSAddress()); + cpu_core->SetTPIDR_EL0(new_thread->GetTPIDR_EL0()); cpu_core->ClearExclusiveState(); } else { current_thread = nullptr; |
