citra-emu
/
citra-canary
Archived
1
0
Fork 0

Fix VFP registers serialization (0 fps when loading etc.)

This commit is contained in:
Hamish Milne 2020-04-10 19:36:38 +01:00
parent 432ac24503
commit 7988978661
2 changed files with 13 additions and 4 deletions

View File

@ -236,6 +236,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeThread::GetChildren() const {
break; break;
} }
list.push_back(std::make_unique<WaitTreeText>(tr("object id = %1").arg(thread.GetObjectId())));
list.push_back(std::make_unique<WaitTreeText>(tr("processor = %1").arg(processor))); list.push_back(std::make_unique<WaitTreeText>(tr("processor = %1").arg(processor)));
list.push_back(std::make_unique<WaitTreeText>(tr("thread id = %1").arg(thread.GetThreadId()))); list.push_back(std::make_unique<WaitTreeText>(tr("thread id = %1").arg(thread.GetThreadId())));
list.push_back(std::make_unique<WaitTreeText>(tr("priority = %1(current) / %2(normal)") list.push_back(std::make_unique<WaitTreeText>(tr("priority = %1(current) / %2(normal)")

View File

@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include <boost/serialization/shared_ptr.hpp> #include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/split_member.hpp> #include <boost/serialization/split_member.hpp>
#include <boost/serialization/version.hpp>
#include "common/common_types.h" #include "common/common_types.h"
#include "core/arm/skyeye_common/arm_regformat.h" #include "core/arm/skyeye_common/arm_regformat.h"
#include "core/arm/skyeye_common/vfp/asm_vfp.h" #include "core/arm/skyeye_common/vfp/asm_vfp.h"
@ -30,7 +31,8 @@ public:
const auto r = GetCpuRegister(i); const auto r = GetCpuRegister(i);
ar << r; 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); const auto r = GetFpuRegister(i);
ar << r; ar << r;
} }
@ -49,7 +51,8 @@ public:
ar >> r; ar >> r;
SetCpuRegister(i, 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; ar >> r;
SetFpuRegister(i, r); SetFpuRegister(i, r);
} }
@ -254,7 +257,8 @@ private:
ar << pc; ar << pc;
const auto cpsr = GetCPSR(); const auto cpsr = GetCPSR();
ar << cpsr; 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); const auto r = GetVFPReg(i);
ar << r; ar << r;
} }
@ -285,7 +289,8 @@ private:
SetPC(r); SetPC(r);
ar >> r; ar >> r;
SetCPSR(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; ar >> r;
SetVFPReg(i, r); SetVFPReg(i, r);
} }
@ -301,3 +306,6 @@ private:
BOOST_SERIALIZATION_SPLIT_MEMBER() BOOST_SERIALIZATION_SPLIT_MEMBER()
}; };
BOOST_CLASS_VERSION(ARM_Interface, 1)
BOOST_CLASS_VERSION(ARM_Interface::ThreadContext, 1)