summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
authorGravatar MerryMage2018-01-27 15:16:39 +0000
committerGravatar MerryMage2018-01-27 15:16:39 +0000
commit738f91a57da7c129d1ee85b7abbf6858f8669ee3 (patch)
tree3ef164d8e79c0aea6ab72dc9b8fa78877a82338a /src/tests
parentexternals: Update dynarmic (diff)
downloadyuzu-738f91a57da7c129d1ee85b7abbf6858f8669ee3.tar.gz
yuzu-738f91a57da7c129d1ee85b7abbf6858f8669ee3.tar.xz
yuzu-738f91a57da7c129d1ee85b7abbf6858f8669ee3.zip
memory: Replace all memory hooking with Special regions
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/core/arm/arm_test_common.cpp32
-rw-r--r--src/tests/core/arm/arm_test_common.h22
2 files changed, 29 insertions, 25 deletions
diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp
index 2339bdfb8..88bbbc95c 100644
--- a/src/tests/core/arm/arm_test_common.cpp
+++ b/src/tests/core/arm/arm_test_common.cpp
@@ -19,8 +19,8 @@ TestEnvironment::TestEnvironment(bool mutable_memory_)
19 page_table = &Kernel::g_current_process->vm_manager.page_table; 19 page_table = &Kernel::g_current_process->vm_manager.page_table;
20 20
21 page_table->pointers.fill(nullptr); 21 page_table->pointers.fill(nullptr);
22 page_table->special_regions.clear();
22 page_table->attributes.fill(Memory::PageType::Unmapped); 23 page_table->attributes.fill(Memory::PageType::Unmapped);
23 page_table->cached_res_count.fill(0);
24 24
25 Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory); 25 Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory);
26 Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory); 26 Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory);
@@ -62,11 +62,11 @@ void TestEnvironment::ClearWriteRecords() {
62 62
63TestEnvironment::TestMemory::~TestMemory() {} 63TestEnvironment::TestMemory::~TestMemory() {}
64 64
65bool TestEnvironment::TestMemory::IsValidAddress(VAddr addr) { 65boost::optional<bool> TestEnvironment::TestMemory::IsValidAddress(VAddr addr) {
66 return true; 66 return true;
67} 67}
68 68
69u8 TestEnvironment::TestMemory::Read8(VAddr addr) { 69boost::optional<u8> TestEnvironment::TestMemory::Read8(VAddr addr) {
70 auto iter = data.find(addr); 70 auto iter = data.find(addr);
71 if (iter == data.end()) { 71 if (iter == data.end()) {
72 return addr; // Some arbitrary data 72 return addr; // Some arbitrary data
@@ -74,16 +74,16 @@ u8 TestEnvironment::TestMemory::Read8(VAddr addr) {
74 return iter->second; 74 return iter->second;
75} 75}
76 76
77u16 TestEnvironment::TestMemory::Read16(VAddr addr) { 77boost::optional<u16> TestEnvironment::TestMemory::Read16(VAddr addr) {
78 return Read8(addr) | static_cast<u16>(Read8(addr + 1)) << 8; 78 return *Read8(addr) | static_cast<u16>(*Read8(addr + 1)) << 8;
79} 79}
80 80
81u32 TestEnvironment::TestMemory::Read32(VAddr addr) { 81boost::optional<u32> TestEnvironment::TestMemory::Read32(VAddr addr) {
82 return Read16(addr) | static_cast<u32>(Read16(addr + 2)) << 16; 82 return *Read16(addr) | static_cast<u32>(*Read16(addr + 2)) << 16;
83} 83}
84 84
85u64 TestEnvironment::TestMemory::Read64(VAddr addr) { 85boost::optional<u64> TestEnvironment::TestMemory::Read64(VAddr addr) {
86 return Read32(addr) | static_cast<u64>(Read32(addr + 4)) << 32; 86 return *Read32(addr) | static_cast<u64>(*Read32(addr + 4)) << 32;
87} 87}
88 88
89bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) { 89bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) {
@@ -91,34 +91,38 @@ bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, s
91 u8* data = static_cast<u8*>(dest_buffer); 91 u8* data = static_cast<u8*>(dest_buffer);
92 92
93 for (size_t i = 0; i < size; i++, addr++, data++) { 93 for (size_t i = 0; i < size; i++, addr++, data++) {
94 *data = Read8(addr); 94 *data = *Read8(addr);
95 } 95 }
96 96
97 return true; 97 return true;
98} 98}
99 99
100void TestEnvironment::TestMemory::Write8(VAddr addr, u8 data) { 100bool TestEnvironment::TestMemory::Write8(VAddr addr, u8 data) {
101 env->write_records.emplace_back(8, addr, data); 101 env->write_records.emplace_back(8, addr, data);
102 if (env->mutable_memory) 102 if (env->mutable_memory)
103 env->SetMemory8(addr, data); 103 env->SetMemory8(addr, data);
104 return true;
104} 105}
105 106
106void TestEnvironment::TestMemory::Write16(VAddr addr, u16 data) { 107bool TestEnvironment::TestMemory::Write16(VAddr addr, u16 data) {
107 env->write_records.emplace_back(16, addr, data); 108 env->write_records.emplace_back(16, addr, data);
108 if (env->mutable_memory) 109 if (env->mutable_memory)
109 env->SetMemory16(addr, data); 110 env->SetMemory16(addr, data);
111 return true;
110} 112}
111 113
112void TestEnvironment::TestMemory::Write32(VAddr addr, u32 data) { 114bool TestEnvironment::TestMemory::Write32(VAddr addr, u32 data) {
113 env->write_records.emplace_back(32, addr, data); 115 env->write_records.emplace_back(32, addr, data);
114 if (env->mutable_memory) 116 if (env->mutable_memory)
115 env->SetMemory32(addr, data); 117 env->SetMemory32(addr, data);
118 return true;
116} 119}
117 120
118void TestEnvironment::TestMemory::Write64(VAddr addr, u64 data) { 121bool TestEnvironment::TestMemory::Write64(VAddr addr, u64 data) {
119 env->write_records.emplace_back(64, addr, data); 122 env->write_records.emplace_back(64, addr, data);
120 if (env->mutable_memory) 123 if (env->mutable_memory)
121 env->SetMemory64(addr, data); 124 env->SetMemory64(addr, data);
125 return true;
122} 126}
123 127
124bool TestEnvironment::TestMemory::WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) { 128bool TestEnvironment::TestMemory::WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) {
diff --git a/src/tests/core/arm/arm_test_common.h b/src/tests/core/arm/arm_test_common.h
index 592c28594..b66922d61 100644
--- a/src/tests/core/arm/arm_test_common.h
+++ b/src/tests/core/arm/arm_test_common.h
@@ -7,7 +7,7 @@
7#include <vector> 7#include <vector>
8 8
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "core/mmio.h" 10#include "core/memory_hook.h"
11 11
12namespace ArmTests { 12namespace ArmTests {
13 13
@@ -51,25 +51,25 @@ public:
51 51
52private: 52private:
53 friend struct TestMemory; 53 friend struct TestMemory;
54 struct TestMemory final : Memory::MMIORegion { 54 struct TestMemory final : Memory::MemoryHook {
55 explicit TestMemory(TestEnvironment* env_) : env(env_) {} 55 explicit TestMemory(TestEnvironment* env_) : env(env_) {}
56 TestEnvironment* env; 56 TestEnvironment* env;
57 57
58 ~TestMemory() override; 58 ~TestMemory() override;
59 59
60 bool IsValidAddress(VAddr addr) override; 60 boost::optional<bool> IsValidAddress(VAddr addr) override;
61 61
62 u8 Read8(VAddr addr) override; 62 boost::optional<u8> Read8(VAddr addr) override;
63 u16 Read16(VAddr addr) override; 63 boost::optional<u16> Read16(VAddr addr) override;
64 u32 Read32(VAddr addr) override; 64 boost::optional<u32> Read32(VAddr addr) override;
65 u64 Read64(VAddr addr) override; 65 boost::optional<u64> Read64(VAddr addr) override;
66 66
67 bool ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) override; 67 bool ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) override;
68 68
69 void Write8(VAddr addr, u8 data) override; 69 bool Write8(VAddr addr, u8 data) override;
70 void Write16(VAddr addr, u16 data) override; 70 bool Write16(VAddr addr, u16 data) override;
71 void Write32(VAddr addr, u32 data) override; 71 bool Write32(VAddr addr, u32 data) override;
72 void Write64(VAddr addr, u64 data) override; 72 bool Write64(VAddr addr, u64 data) override;
73 73
74 bool WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) override; 74 bool WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) override;
75 75