diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.h b/src/core/arm/dynarmic/arm_dynarmic_32.h index 5e40d5d82a..d93cc1cfc9 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.h +++ b/src/core/arm/dynarmic/arm_dynarmic_32.h @@ -35,6 +35,9 @@ public: u32 MemoryRead32(u32 vaddr) override; u64 MemoryRead64(u32 vaddr) override; std::optional MemoryReadCode(u32 vaddr) override; + void InstructionSynchronizationBarrierRaised() override { + last_code_addr = 0; //reset back, force refetch + } void MemoryWrite8(u32 vaddr, u8 value) override; void MemoryWrite16(u32 vaddr, u16 value) override; void MemoryWrite32(u32 vaddr, u32 value) override; diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.h b/src/core/arm/dynarmic/arm_dynarmic_64.h index a756c63615..9eff17c5fe 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.h +++ b/src/core/arm/dynarmic/arm_dynarmic_64.h @@ -42,6 +42,9 @@ public: u64 MemoryRead64(u64 vaddr) override; Dynarmic::A64::Vector MemoryRead128(u64 vaddr) override; std::optional MemoryReadCode(u64 vaddr) override; + void InstructionSynchronizationBarrierRaised() override { + last_code_addr = 0; //reset back, force refetch + } void MemoryWrite8(u64 vaddr, u8 value) override; void MemoryWrite16(u64 vaddr, u16 value) override; void MemoryWrite32(u64 vaddr, u32 value) override; diff --git a/src/core/hle/service/jit/jit_context.cpp b/src/core/hle/service/jit/jit_context.cpp index 327825ee83..a927318a7c 100644 --- a/src/core/hle/service/jit/jit_context.cpp +++ b/src/core/hle/service/jit/jit_context.cpp @@ -56,6 +56,9 @@ public: } return cached_code_page.inst[(vaddr & Core::Memory::YUZU_PAGEMASK) / sizeof(u32)]; } + void InstructionSynchronizationBarrierRaised() override { + last_code_addr = 0; //reset back, force refetch + } u8 MemoryRead8(u64 vaddr) override { return ReadMemory(vaddr); }