summaryrefslogtreecommitdiff
path: root/src/core/file_sys
diff options
context:
space:
mode:
authorGravatar Lioncash2020-09-15 09:10:55 -0400
committerGravatar Lioncash2020-09-15 09:10:58 -0400
commit66fc037ef2181cdddc1588032be18cb368fb3e97 (patch)
treedd29407fa8cb9e61683e3f0250a3d88b55910fdf /src/core/file_sys
parentnca_patch: Make SearchBucketEntry() internally linked (diff)
downloadyuzu-66fc037ef2181cdddc1588032be18cb368fb3e97.tar.gz
yuzu-66fc037ef2181cdddc1588032be18cb368fb3e97.tar.xz
yuzu-66fc037ef2181cdddc1588032be18cb368fb3e97.zip
nca_patch: Significantly reduce the stack usage size within SearchBucketEntry()
Previously this function was using ~16KB of stack (16528 bytes), which was caused by the function arguments being taken by value rather than by reference. We can make this significantly lighter on the stack by taking them by reference.
Diffstat (limited to 'src/core/file_sys')
-rw-r--r--src/core/file_sys/nca_patch.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/file_sys/nca_patch.cpp b/src/core/file_sys/nca_patch.cpp
index fd7b69e11..5990a2fd5 100644
--- a/src/core/file_sys/nca_patch.cpp
+++ b/src/core/file_sys/nca_patch.cpp
@@ -14,10 +14,10 @@
14namespace FileSys { 14namespace FileSys {
15namespace { 15namespace {
16template <bool Subsection, typename BlockType, typename BucketType> 16template <bool Subsection, typename BlockType, typename BucketType>
17std::pair<std::size_t, std::size_t> SearchBucketEntry(u64 offset, BlockType block, 17std::pair<std::size_t, std::size_t> SearchBucketEntry(u64 offset, const BlockType& block,
18 BucketType buckets) { 18 const BucketType& buckets) {
19 if constexpr (Subsection) { 19 if constexpr (Subsection) {
20 const auto last_bucket = buckets[block.number_buckets - 1]; 20 const auto& last_bucket = buckets[block.number_buckets - 1];
21 if (offset >= last_bucket.entries[last_bucket.number_entries].address_patch) { 21 if (offset >= last_bucket.entries[last_bucket.number_entries].address_patch) {
22 return {block.number_buckets - 1, last_bucket.number_entries}; 22 return {block.number_buckets - 1, last_bucket.number_entries};
23 } 23 }
@@ -29,7 +29,7 @@ std::pair<std::size_t, std::size_t> SearchBucketEntry(u64 offset, BlockType bloc
29 block.base_offsets.begin() + 1, block.base_offsets.begin() + block.number_buckets, 29 block.base_offsets.begin() + 1, block.base_offsets.begin() + block.number_buckets,
30 [&offset](u64 base_offset) { return base_offset <= offset; }); 30 [&offset](u64 base_offset) { return base_offset <= offset; });
31 31
32 const auto bucket = buckets[bucket_id]; 32 const auto& bucket = buckets[bucket_id];
33 33
34 if (bucket.number_entries == 1) { 34 if (bucket.number_entries == 1) {
35 return {bucket_id, 0}; 35 return {bucket_id, 0};