diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 5d7efc9b6a..47ac614bfa 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -86,7 +86,9 @@ public: } void AddTicks(u64 ticks) override { - CoreTiming::AddTicks(ticks - num_interpreted_instructions); + if (parent.IsMainCore()) { + CoreTiming::AddTicks(ticks - num_interpreted_instructions); + } num_interpreted_instructions = 0; } u64 GetTicksRemaining() override { @@ -128,8 +130,9 @@ void ARM_Dynarmic::Step() { cb->InterpreterFallback(jit->GetPC(), 1); } -ARM_Dynarmic::ARM_Dynarmic() - : cb(std::make_unique(*this)), jit(MakeJit(cb)) { +ARM_Dynarmic::ARM_Dynarmic(size_t core_index) + : cb(std::make_unique(*this)), jit(MakeJit(cb)), + core_index(core_index) { ARM_Interface::ThreadContext ctx; inner_unicorn.SaveContext(ctx); LoadContext(ctx); diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index a9891ac4fb..e5227cd41d 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h @@ -14,7 +14,7 @@ class ARM_Dynarmic_Callbacks; class ARM_Dynarmic final : public ARM_Interface { public: - ARM_Dynarmic(); + ARM_Dynarmic(size_t core_index); ~ARM_Dynarmic(); void MapBackingMemory(VAddr address, size_t size, u8* memory, @@ -46,6 +46,10 @@ public: void ClearInstructionCache() override; void PageTableChanged() override; + const bool IsMainCore() const { + return core_index == 0; + } + private: friend class ARM_Dynarmic_Callbacks; std::unique_ptr cb; @@ -53,4 +57,5 @@ private: ARM_Unicorn inner_unicorn; Memory::PageTable* current_page_table = nullptr; + size_t core_index; }; diff --git a/src/core/core_cpu.cpp b/src/core/core_cpu.cpp index f22d6a9d06..56ff1b8dc6 100644 --- a/src/core/core_cpu.cpp +++ b/src/core/core_cpu.cpp @@ -53,7 +53,7 @@ Cpu::Cpu(std::shared_ptr cpu_barrier, size_t core_index) if (Settings::values.use_cpu_jit) { #ifdef ARCHITECTURE_x86_64 - arm_interface = std::make_shared(); + arm_interface = std::make_shared(core_index); #else cpu_core = std::make_shared(); LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");