Compare commits

...

1 Commits

Author SHA1 Message Date
bunnei
49bfd49702 arm_dynarmic: Only advance core timing on main CPU core. 2018-07-21 22:21:32 -04:00
3 changed files with 13 additions and 5 deletions

View File

@@ -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<ARM_Dynarmic_Callbacks>(*this)), jit(MakeJit(cb)) {
ARM_Dynarmic::ARM_Dynarmic(size_t core_index)
: cb(std::make_unique<ARM_Dynarmic_Callbacks>(*this)), jit(MakeJit(cb)),
core_index(core_index) {
ARM_Interface::ThreadContext ctx;
inner_unicorn.SaveContext(ctx);
LoadContext(ctx);

View File

@@ -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<ARM_Dynarmic_Callbacks> cb;
@@ -53,4 +57,5 @@ private:
ARM_Unicorn inner_unicorn;
Memory::PageTable* current_page_table = nullptr;
size_t core_index;
};

View File

@@ -53,7 +53,7 @@ Cpu::Cpu(std::shared_ptr<CpuBarrier> cpu_barrier, size_t core_index)
if (Settings::values.use_cpu_jit) {
#ifdef ARCHITECTURE_x86_64
arm_interface = std::make_shared<ARM_Dynarmic>();
arm_interface = std::make_shared<ARM_Dynarmic>(core_index);
#else
cpu_core = std::make_shared<ARM_Unicorn>();
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");