diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-09-10 23:05:24 +0200 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-09-10 23:05:24 +0200 |
commit | abc34ddb88a43ae0f764536b720c58677ca16a48 (patch) | |
tree | ef8e7f7fe3b7a9fc1fb530bdbd06744874c66931 | |
parent | Merge pull request #1128 from yuriks/cmake-options (diff) | |
parent | memory: Get rid of pointer casts (diff) | |
download | yuzu-abc34ddb88a43ae0f764536b720c58677ca16a48.tar yuzu-abc34ddb88a43ae0f764536b720c58677ca16a48.tar.gz yuzu-abc34ddb88a43ae0f764536b720c58677ca16a48.tar.bz2 yuzu-abc34ddb88a43ae0f764536b720c58677ca16a48.tar.lz yuzu-abc34ddb88a43ae0f764536b720c58677ca16a48.tar.xz yuzu-abc34ddb88a43ae0f764536b720c58677ca16a48.tar.zst yuzu-abc34ddb88a43ae0f764536b720c58677ca16a48.zip |
-rw-r--r-- | src/core/memory.cpp | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index cde390b8a..b80795e0c 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include <array> +#include <cstring> #include "common/assert.h" #include "common/common_types.h" @@ -95,7 +96,9 @@ template <typename T> T Read(const VAddr vaddr) { const u8* page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS]; if (page_pointer) { - return *reinterpret_cast<const T*>(page_pointer + (vaddr & PAGE_MASK)); + T value; + std::memcpy(&value, &page_pointer[vaddr & PAGE_MASK], sizeof(T)); + return value; } PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; @@ -117,7 +120,7 @@ template <typename T> void Write(const VAddr vaddr, const T data) { u8* page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS]; if (page_pointer) { - *reinterpret_cast<T*>(page_pointer + (vaddr & PAGE_MASK)) = data; + std::memcpy(&page_pointer[vaddr & PAGE_MASK], &data, sizeof(T)); return; } @@ -183,19 +186,9 @@ void Write64(const VAddr addr, const u64 data) { } void WriteBlock(const VAddr addr, const u8* data, const size_t size) { - u32 offset = 0; - while (offset < (size & ~3)) { - Write32(addr + offset, *(u32*)&data[offset]); - offset += 4; - } - - if (size & 2) { - Write16(addr + offset, *(u16*)&data[offset]); - offset += 2; - } - - if (size & 1) + for (u32 offset = 0; offset < size; offset++) { Write8(addr + offset, data[offset]); + } } PAddr VirtualToPhysicalAddress(const VAddr addr) { |