summaryrefslogtreecommitdiff
path: root/src/core/arm/dynarmic
diff options
context:
space:
mode:
authorGravatar Subv2018-07-20 19:57:45 -0500
committerGravatar Subv2018-07-20 19:57:45 -0500
commitd84eb9dac64f314adcef2c374de245012f658b1d (patch)
tree56720a5bce5d1a285dda01c16bfcb1dd57e53054 /src/core/arm/dynarmic
parentMerge pull request #730 from lioncash/string (diff)
downloadyuzu-d84eb9dac64f314adcef2c374de245012f658b1d.tar.gz
yuzu-d84eb9dac64f314adcef2c374de245012f658b1d.tar.xz
yuzu-d84eb9dac64f314adcef2c374de245012f658b1d.zip
CPU: Save and restore the TPIDR_EL0 system register on every context switch.
Note that there's currently a dynarmic bug preventing this register from being written.
Diffstat (limited to 'src/core/arm/dynarmic')
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp8
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.h2
2 files changed, 10 insertions, 0 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index 3572ee7b9..df47d5ee8 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -196,6 +196,14 @@ void ARM_Dynarmic::SetTlsAddress(u64 address) {
196 cb->tpidrro_el0 = address; 196 cb->tpidrro_el0 = address;
197} 197}
198 198
199u64 ARM_Dynarmic::GetTPIDR_EL0() const {
200 return cb->tpidr_el0;
201}
202
203void ARM_Dynarmic::SetTPIDR_EL0(u64 value) {
204 cb->tpidr_el0 = value;
205}
206
199void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) { 207void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) {
200 ctx.cpu_registers = jit->GetRegisters(); 208 ctx.cpu_registers = jit->GetRegisters();
201 ctx.sp = jit->GetSP(); 209 ctx.sp = jit->GetSP();
diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h
index ed724c3f1..a9891ac4f 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.h
+++ b/src/core/arm/dynarmic/arm_dynarmic.h
@@ -34,6 +34,8 @@ public:
34 void SetCPSR(u32 cpsr) override; 34 void SetCPSR(u32 cpsr) override;
35 VAddr GetTlsAddress() const override; 35 VAddr GetTlsAddress() const override;
36 void SetTlsAddress(VAddr address) override; 36 void SetTlsAddress(VAddr address) override;
37 void SetTPIDR_EL0(u64 value) override;
38 u64 GetTPIDR_EL0() const override;
37 39
38 void SaveContext(ThreadContext& ctx) override; 40 void SaveContext(ThreadContext& ctx) override;
39 void LoadContext(const ThreadContext& ctx) override; 41 void LoadContext(const ThreadContext& ctx) override;