From 79889786615fb5d37237b368341fa58998a24e3c Mon Sep 17 00:00:00 2001 From: Hamish Milne Date: Fri, 10 Apr 2020 19:36:38 +0100 Subject: [PATCH] Fix VFP registers serialization (0 fps when loading etc.) --- src/citra_qt/debugger/wait_tree.cpp | 1 + src/core/arm/arm_interface.h | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/citra_qt/debugger/wait_tree.cpp b/src/citra_qt/debugger/wait_tree.cpp index 15a7ada03..30c1b00b5 100644 --- a/src/citra_qt/debugger/wait_tree.cpp +++ b/src/citra_qt/debugger/wait_tree.cpp @@ -236,6 +236,7 @@ std::vector> WaitTreeThread::GetChildren() const { break; } + list.push_back(std::make_unique(tr("object id = %1").arg(thread.GetObjectId()))); list.push_back(std::make_unique(tr("processor = %1").arg(processor))); list.push_back(std::make_unique(tr("thread id = %1").arg(thread.GetThreadId()))); list.push_back(std::make_unique(tr("priority = %1(current) / %2(normal)") diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index a6b8a279a..967c672e6 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h @@ -8,6 +8,7 @@ #include #include #include +#include #include "common/common_types.h" #include "core/arm/skyeye_common/arm_regformat.h" #include "core/arm/skyeye_common/vfp/asm_vfp.h" @@ -30,7 +31,8 @@ public: const auto r = GetCpuRegister(i); ar << r; } - for (std::size_t i = 0; i < 16; i++) { + std::size_t fpu_reg_count = file_version == 0 ? 16 : 64; + for (std::size_t i = 0; i < fpu_reg_count; i++) { const auto r = GetFpuRegister(i); ar << r; } @@ -49,7 +51,8 @@ public: ar >> r; SetCpuRegister(i, r); } - for (std::size_t i = 0; i < 16; i++) { + std::size_t fpu_reg_count = file_version == 0 ? 16 : 64; + for (std::size_t i = 0; i < fpu_reg_count; i++) { ar >> r; SetFpuRegister(i, r); } @@ -254,7 +257,8 @@ private: ar << pc; const auto cpsr = GetCPSR(); ar << cpsr; - for (int i = 0; i < 32; i++) { + int vfp_reg_count = file_version == 0 ? 32 : 64; + for (int i = 0; i < vfp_reg_count; i++) { const auto r = GetVFPReg(i); ar << r; } @@ -285,7 +289,8 @@ private: SetPC(r); ar >> r; SetCPSR(r); - for (int i = 0; i < 32; i++) { + int vfp_reg_count = file_version == 0 ? 32 : 64; + for (int i = 0; i < vfp_reg_count; i++) { ar >> r; SetVFPReg(i, r); } @@ -301,3 +306,6 @@ private: BOOST_SERIALIZATION_SPLIT_MEMBER() }; + +BOOST_CLASS_VERSION(ARM_Interface, 1) +BOOST_CLASS_VERSION(ARM_Interface::ThreadContext, 1)