summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2019-07-24 13:14:47 +0200
committerLioncash <mathew1800@gmail.com>2019-08-30 01:28:57 +0200
commit785c4946ddf79c0c4454c003baa20cab6ebb63ca (patch)
treedddd0b62fd968b39b84ae72892e18ab4b214aa5a /src/core
parentkernel/vm_manager: Simplify some std::vector constructor calls (diff)
downloadyuzu-785c4946ddf79c0c4454c003baa20cab6ebb63ca.tar
yuzu-785c4946ddf79c0c4454c003baa20cab6ebb63ca.tar.gz
yuzu-785c4946ddf79c0c4454c003baa20cab6ebb63ca.tar.bz2
yuzu-785c4946ddf79c0c4454c003baa20cab6ebb63ca.tar.lz
yuzu-785c4946ddf79c0c4454c003baa20cab6ebb63ca.tar.xz
yuzu-785c4946ddf79c0c4454c003baa20cab6ebb63ca.tar.zst
yuzu-785c4946ddf79c0c4454c003baa20cab6ebb63ca.zip
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/kernel/vm_manager.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp
index 231e42baa..e86796ba5 100644
--- a/src/core/hle/kernel/vm_manager.cpp
+++ b/src/core/hle/kernel/vm_manager.cpp
@@ -757,19 +757,22 @@ void VMManager::MergeAdjacentVMA(VirtualMemoryArea& left, const VirtualMemoryAre
// Always merge allocated memory blocks, even when they don't share the same backing block.
if (left.type == VMAType::AllocatedMemoryBlock &&
(left.backing_block != right.backing_block || left.offset + left.size != right.offset)) {
+ const auto right_begin = right.backing_block->begin() + right.offset;
+ const auto right_end = right_begin + right.size;
+
// Check if we can save work.
if (left.offset == 0 && left.size == left.backing_block->size()) {
// Fast case: left is an entire backing block.
- left.backing_block->insert(left.backing_block->end(),
- right.backing_block->begin() + right.offset,
- right.backing_block->begin() + right.offset + right.size);
+ left.backing_block->insert(left.backing_block->end(), right_begin, right_end);
} else {
+ const auto left_begin = left.backing_block->begin() + left.offset;
+ const auto left_end = left_begin + left.size;
+
// Slow case: make a new memory block for left and right.
auto new_memory = std::make_shared<PhysicalMemory>();
- new_memory->insert(new_memory->end(), left.backing_block->begin() + left.offset,
- left.backing_block->begin() + left.offset + left.size);
- new_memory->insert(new_memory->end(), right.backing_block->begin() + right.offset,
- right.backing_block->begin() + right.offset + right.size);
+ new_memory->insert(new_memory->end(), left_begin, left_end);
+ new_memory->insert(new_memory->end(), right_begin, right_end);
+
left.backing_block = new_memory;
left.offset = 0;
}