From d8b60c5d456aabd427f23018c5621b4158b1ccb4 Mon Sep 17 00:00:00 2001 From: lizzie Date: Wed, 19 Nov 2025 03:38:35 +0000 Subject: [PATCH] [nce] try fixing slowdown on various games --- src/core/arm/nce/arm_nce.cpp | 9 ++------- src/core/arm/nce/interpreter_visitor.cpp | 5 ++--- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/core/arm/nce/arm_nce.cpp b/src/core/arm/nce/arm_nce.cpp index f0b61f8042..21c6a0e9d3 100644 --- a/src/core/arm/nce/arm_nce.cpp +++ b/src/core/arm/nce/arm_nce.cpp @@ -388,16 +388,11 @@ void ArmNce::SignalInterrupt(Kernel::KThread* thread) { const std::size_t CACHE_PAGE_SIZE = 4096; void ArmNce::ClearInstructionCache() { -#ifdef __aarch64__ - // Ensure all previous memory operations complete - asm volatile("dmb ish" ::: "memory"); - asm volatile("dsb ish" ::: "memory"); - asm volatile("isb" ::: "memory"); -#endif + std::atomic_thread_fence(std::memory_order_acquire); } void ArmNce::InvalidateCacheRange(u64 addr, std::size_t size) { - this->ClearInstructionCache(); + std::atomic_thread_fence(std::memory_order_acquire); } } // namespace Core diff --git a/src/core/arm/nce/interpreter_visitor.cpp b/src/core/arm/nce/interpreter_visitor.cpp index 78b78f8067..cbbbad4604 100644 --- a/src/core/arm/nce/interpreter_visitor.cpp +++ b/src/core/arm/nce/interpreter_visitor.cpp @@ -183,17 +183,16 @@ bool InterpreterVisitor::Ordered(size_t size, bool L, bool o0, Reg Rn, Reg Rt) { u64 address = (Rn == Reg::SP) ? this->GetSp() : this->GetReg(Rn); switch (memop) { case MemOp::Store: { - std::atomic_thread_fence(std::memory_order_seq_cst); + std::atomic_thread_fence(std::memory_order_release); u64 value = this->GetReg(Rt); m_memory.WriteBlock(address, &value, dbytes); - std::atomic_thread_fence(std::memory_order_seq_cst); break; } case MemOp::Load: { u64 value = 0; m_memory.ReadBlock(address, &value, dbytes); + std::atomic_thread_fence(std::memory_order_acquire); this->SetReg(Rt, value); - std::atomic_thread_fence(std::memory_order_seq_cst); break; } default: