|
|
|
@ -0,0 +1,62 @@ |
|
|
|
// Copyright 2020 yuzu Emulator Project |
|
|
|
// Licensed under GPLv2 or any later version |
|
|
|
// Refer to the license.txt file included. |
|
|
|
|
|
|
|
#pragma once |
|
|
|
|
|
|
|
namespace Kernel { |
|
|
|
class Scheduler; |
|
|
|
} // namespace Kernel |
|
|
|
|
|
|
|
class ARM_Interface; |
|
|
|
class ExclusiveMonitor; |
|
|
|
|
|
|
|
namespace Kernel { |
|
|
|
|
|
|
|
class PhysicalCore { |
|
|
|
public: |
|
|
|
PhysicalCore(KernelCore& kernel, std::size_t id, ExclusiveMonitor& exclusive_monitor); |
|
|
|
|
|
|
|
/// Execute current jit state |
|
|
|
void Run(); |
|
|
|
/// Execute a single instruction in current jit. |
|
|
|
void Step(); |
|
|
|
/// Stop JIT execution/exit |
|
|
|
void Stop(); |
|
|
|
|
|
|
|
ARM_Interface& ArmInterface() { |
|
|
|
return *arm_interface; |
|
|
|
} |
|
|
|
|
|
|
|
const ARM_Interface& ArmInterface() const { |
|
|
|
return *arm_interface; |
|
|
|
} |
|
|
|
|
|
|
|
bool IsMainCore() const { |
|
|
|
return core_index == 0; |
|
|
|
} |
|
|
|
|
|
|
|
bool IsSystemCore() const { |
|
|
|
return core_index == 3; |
|
|
|
} |
|
|
|
|
|
|
|
std::size_t CoreIndex() const { |
|
|
|
return core_index; |
|
|
|
} |
|
|
|
|
|
|
|
Scheduler& Scheduler() { |
|
|
|
return *scheduler; |
|
|
|
} |
|
|
|
|
|
|
|
const Scheduler& Scheduler() const { |
|
|
|
return *scheduler; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
std::size_t core_index; |
|
|
|
std::unique_ptr<ARM_Interface> arm_interface; |
|
|
|
std::unique_ptr<Kernel::Scheduler> scheduler; |
|
|
|
KernelCore& kernel; |
|
|
|
} |
|
|
|
|
|
|
|
} // namespace Kernel |