summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-07-24 02:33:15 +0200
committerLioncash <mathew1800@gmail.com>2018-07-24 02:54:57 +0200
commite12c84d5c542c07e6ea62c23a85c76d6f4c7c07f (patch)
treea68b0f4781b750d1f8bad0b8522a43c82fcc8e16
parentMerge pull request #695 from DarkLordZach/nro-asset (diff)
downloadyuzu-e12c84d5c542c07e6ea62c23a85c76d6f4c7c07f.tar
yuzu-e12c84d5c542c07e6ea62c23a85c76d6f4c7c07f.tar.gz
yuzu-e12c84d5c542c07e6ea62c23a85c76d6f4c7c07f.tar.bz2
yuzu-e12c84d5c542c07e6ea62c23a85c76d6f4c7c07f.tar.lz
yuzu-e12c84d5c542c07e6ea62c23a85c76d6f4c7c07f.tar.xz
yuzu-e12c84d5c542c07e6ea62c23a85c76d6f4c7c07f.tar.zst
yuzu-e12c84d5c542c07e6ea62c23a85c76d6f4c7c07f.zip
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp13
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.h13
-rw-r--r--src/core/arm/exclusive_monitor.h14
3 files changed, 18 insertions, 22 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index 83c09db2b..d23adb28a 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -257,7 +257,7 @@ void ARM_Dynarmic::PageTableChanged() {
DynarmicExclusiveMonitor::DynarmicExclusiveMonitor(size_t core_count) : monitor(core_count) {}
DynarmicExclusiveMonitor::~DynarmicExclusiveMonitor() = default;
-void DynarmicExclusiveMonitor::SetExclusive(size_t core_index, u64 addr) {
+void DynarmicExclusiveMonitor::SetExclusive(size_t core_index, VAddr addr) {
// Size doesn't actually matter.
monitor.Mark(core_index, addr, 16);
}
@@ -266,28 +266,27 @@ void DynarmicExclusiveMonitor::ClearExclusive() {
monitor.Clear();
}
-bool DynarmicExclusiveMonitor::ExclusiveWrite8(size_t core_index, u64 vaddr, u8 value) {
+bool DynarmicExclusiveMonitor::ExclusiveWrite8(size_t core_index, VAddr vaddr, u8 value) {
return monitor.DoExclusiveOperation(core_index, vaddr, 1,
[&] { Memory::Write8(vaddr, value); });
}
-bool DynarmicExclusiveMonitor::ExclusiveWrite16(size_t core_index, u64 vaddr, u16 value) {
+bool DynarmicExclusiveMonitor::ExclusiveWrite16(size_t core_index, VAddr vaddr, u16 value) {
return monitor.DoExclusiveOperation(core_index, vaddr, 2,
[&] { Memory::Write16(vaddr, value); });
}
-bool DynarmicExclusiveMonitor::ExclusiveWrite32(size_t core_index, u64 vaddr, u32 value) {
+bool DynarmicExclusiveMonitor::ExclusiveWrite32(size_t core_index, VAddr vaddr, u32 value) {
return monitor.DoExclusiveOperation(core_index, vaddr, 4,
[&] { Memory::Write32(vaddr, value); });
}
-bool DynarmicExclusiveMonitor::ExclusiveWrite64(size_t core_index, u64 vaddr, u64 value) {
+bool DynarmicExclusiveMonitor::ExclusiveWrite64(size_t core_index, VAddr vaddr, u64 value) {
return monitor.DoExclusiveOperation(core_index, vaddr, 8,
[&] { Memory::Write64(vaddr, value); });
}
-bool DynarmicExclusiveMonitor::ExclusiveWrite128(size_t core_index, u64 vaddr,
- std::array<std::uint64_t, 2> value) {
+bool DynarmicExclusiveMonitor::ExclusiveWrite128(size_t core_index, VAddr vaddr, u128 value) {
return monitor.DoExclusiveOperation(core_index, vaddr, 16, [&] {
Memory::Write64(vaddr, value[0]);
Memory::Write64(vaddr, value[1]);
diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h
index 0fa8b417c..350f61fd2 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.h
+++ b/src/core/arm/dynarmic/arm_dynarmic.h
@@ -68,15 +68,14 @@ public:
explicit DynarmicExclusiveMonitor(size_t core_count);
~DynarmicExclusiveMonitor();
- void SetExclusive(size_t core_index, u64 addr) override;
+ void SetExclusive(size_t core_index, VAddr addr) override;
void ClearExclusive() override;
- bool ExclusiveWrite8(size_t core_index, u64 vaddr, u8 value) override;
- bool ExclusiveWrite16(size_t core_index, u64 vaddr, u16 value) override;
- bool ExclusiveWrite32(size_t core_index, u64 vaddr, u32 value) override;
- bool ExclusiveWrite64(size_t core_index, u64 vaddr, u64 value) override;
- bool ExclusiveWrite128(size_t core_index, u64 vaddr,
- std::array<std::uint64_t, 2> value) override;
+ bool ExclusiveWrite8(size_t core_index, VAddr vaddr, u8 value) override;
+ bool ExclusiveWrite16(size_t core_index, VAddr vaddr, u16 value) override;
+ bool ExclusiveWrite32(size_t core_index, VAddr vaddr, u32 value) override;
+ bool ExclusiveWrite64(size_t core_index, VAddr vaddr, u64 value) override;
+ bool ExclusiveWrite128(size_t core_index, VAddr vaddr, u128 value) override;
private:
friend class ARM_Dynarmic;
diff --git a/src/core/arm/exclusive_monitor.h b/src/core/arm/exclusive_monitor.h
index acfcdb94c..13671ed7a 100644
--- a/src/core/arm/exclusive_monitor.h
+++ b/src/core/arm/exclusive_monitor.h
@@ -4,20 +4,18 @@
#pragma once
-#include <array>
#include "common/common_types.h"
class ExclusiveMonitor {
public:
virtual ~ExclusiveMonitor();
- virtual void SetExclusive(size_t core_index, u64 addr) = 0;
+ virtual void SetExclusive(size_t core_index, VAddr addr) = 0;
virtual void ClearExclusive() = 0;
- virtual bool ExclusiveWrite8(size_t core_index, u64 vaddr, u8 value) = 0;
- virtual bool ExclusiveWrite16(size_t core_index, u64 vaddr, u16 value) = 0;
- virtual bool ExclusiveWrite32(size_t core_index, u64 vaddr, u32 value) = 0;
- virtual bool ExclusiveWrite64(size_t core_index, u64 vaddr, u64 value) = 0;
- virtual bool ExclusiveWrite128(size_t core_index, u64 vaddr,
- std::array<std::uint64_t, 2> value) = 0;
+ virtual bool ExclusiveWrite8(size_t core_index, VAddr vaddr, u8 value) = 0;
+ virtual bool ExclusiveWrite16(size_t core_index, VAddr vaddr, u16 value) = 0;
+ virtual bool ExclusiveWrite32(size_t core_index, VAddr vaddr, u32 value) = 0;
+ virtual bool ExclusiveWrite64(size_t core_index, VAddr vaddr, u64 value) = 0;
+ virtual bool ExclusiveWrite128(size_t core_index, VAddr vaddr, u128 value) = 0;
};