From 3687697d0ee38d200a3d15c5fd5e03a4caaaa4db Mon Sep 17 00:00:00 2001 From: Stenzek Date: Wed, 15 Jan 2025 17:35:28 +1000 Subject: [PATCH] CPU/CodeCache: Only reset used portion of buffer Saves writing 48MB every reset. --- src/core/cpu_code_cache.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/core/cpu_code_cache.cpp b/src/core/cpu_code_cache.cpp index f85c6f62b..40985ecd8 100644 --- a/src/core/cpu_code_cache.cpp +++ b/src/core/cpu_code_cache.cpp @@ -1432,6 +1432,25 @@ void CPU::CodeCache::UnlinkBlockExits(Block* block) void CPU::CodeCache::ResetCodeBuffer() { + if (s_code_used > 0 || s_far_code_used > 0) + { + MemMap::BeginCodeWrite(); + + if (s_code_used > 0) + { + std::memset(s_code_ptr, 0, s_code_used); + MemMap::FlushInstructionCache(s_code_ptr, s_code_used); + } + + if (s_far_code_used > 0) + { + std::memset(s_far_code_ptr, 0, s_far_code_used); + MemMap::FlushInstructionCache(s_far_code_ptr, s_far_code_used); + } + + MemMap::EndCodeWrite(); + } + s_code_ptr = static_cast(s_code_buffer_ptr); s_free_code_ptr = s_code_ptr; s_code_size = RECOMPILER_CODE_CACHE_SIZE - RECOMPILER_FAR_CODE_CACHE_SIZE; @@ -1444,13 +1463,6 @@ void CPU::CodeCache::ResetCodeBuffer() s_far_code_ptr = (far_code_size > 0) ? (static_cast(s_code_ptr) + s_code_size) : nullptr; s_free_far_code_ptr = s_far_code_ptr; s_far_code_used = 0; - - MemMap::BeginCodeWrite(); - - std::memset(s_code_ptr, 0, RECOMPILER_CODE_CACHE_SIZE); - MemMap::FlushInstructionCache(s_code_ptr, RECOMPILER_CODE_CACHE_SIZE); - - MemMap::EndCodeWrite(); } u8* CPU::CodeCache::GetFreeCodePointer()