summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2024-01-07 04:50:06 +0100
committerGravatar Liam2024-01-18 21:12:30 -0500
commit067284733075fb0604dbcdc6238d23cfa27c5355 (patch)
tree3f554af90fd6e120b156f037485641c620829a46 /src
parentSMMU: Fix 8Gb layout. (diff)
downloadyuzu-067284733075fb0604dbcdc6238d23cfa27c5355.tar.gz
yuzu-067284733075fb0604dbcdc6238d23cfa27c5355.tar.xz
yuzu-067284733075fb0604dbcdc6238d23cfa27c5355.zip
SMMU: Fix Right Shift UB.
Diffstat (limited to 'src')
-rw-r--r--src/core/device_memory_manager.h4
-rw-r--r--src/core/device_memory_manager.inc4
2 files changed, 4 insertions, 4 deletions
diff --git a/src/core/device_memory_manager.h b/src/core/device_memory_manager.h
index f9cb13a7a..cc9fd023f 100644
--- a/src/core/device_memory_manager.h
+++ b/src/core/device_memory_manager.h
@@ -62,13 +62,13 @@ public:
62 DAddr subbits = static_cast<DAddr>(address & page_mask); 62 DAddr subbits = static_cast<DAddr>(address & page_mask);
63 const u32 base = compressed_device_addr[(address >> page_bits)]; 63 const u32 base = compressed_device_addr[(address >> page_bits)];
64 if ((base >> MULTI_FLAG_BITS) == 0) [[likely]] { 64 if ((base >> MULTI_FLAG_BITS) == 0) [[likely]] {
65 const DAddr d_address = static_cast<DAddr>(base << page_bits) + subbits; 65 const DAddr d_address = (static_cast<DAddr>(base) << page_bits) + subbits;
66 operation(d_address); 66 operation(d_address);
67 return; 67 return;
68 } 68 }
69 InnerGatherDeviceAddresses(buffer, address); 69 InnerGatherDeviceAddresses(buffer, address);
70 for (u32 value : buffer) { 70 for (u32 value : buffer) {
71 operation(static_cast<DAddr>(value << page_bits) + subbits); 71 operation((static_cast<DAddr>(value) << page_bits) + subbits);
72 } 72 }
73 } 73 }
74 74
diff --git a/src/core/device_memory_manager.inc b/src/core/device_memory_manager.inc
index 5241293b6..d7b4abacc 100644
--- a/src/core/device_memory_manager.inc
+++ b/src/core/device_memory_manager.inc
@@ -301,7 +301,7 @@ template <typename Traits>
301u8* DeviceMemoryManager<Traits>::GetSpan(const DAddr src_addr, const std::size_t size) { 301u8* DeviceMemoryManager<Traits>::GetSpan(const DAddr src_addr, const std::size_t size) {
302 size_t page_index = src_addr >> page_bits; 302 size_t page_index = src_addr >> page_bits;
303 size_t subbits = src_addr & page_mask; 303 size_t subbits = src_addr & page_mask;
304 if ((continuity_tracker[page_index] << page_bits) >= size + subbits) { 304 if ((static_cast<size_t>(continuity_tracker[page_index]) << page_bits) >= size + subbits) {
305 return GetPointer<u8>(src_addr); 305 return GetPointer<u8>(src_addr);
306 } 306 }
307 return nullptr; 307 return nullptr;
@@ -311,7 +311,7 @@ template <typename Traits>
311const u8* DeviceMemoryManager<Traits>::GetSpan(const DAddr src_addr, const std::size_t size) const { 311const u8* DeviceMemoryManager<Traits>::GetSpan(const DAddr src_addr, const std::size_t size) const {
312 size_t page_index = src_addr >> page_bits; 312 size_t page_index = src_addr >> page_bits;
313 size_t subbits = src_addr & page_mask; 313 size_t subbits = src_addr & page_mask;
314 if ((continuity_tracker[page_index] << page_bits) >= size + subbits) { 314 if ((static_cast<size_t>(continuity_tracker[page_index]) << page_bits) >= size + subbits) {
315 return GetPointer<u8>(src_addr); 315 return GetPointer<u8>(src_addr);
316 } 316 }
317 return nullptr; 317 return nullptr;