General: Initial Setup for Single Core.

This commit is contained in:
Fernando Sahmkow 2020-03-08 22:39:41 -04:00
parent 391f5f360d
commit ab9aae28bf
8 changed files with 232 additions and 38 deletions

View file

@ -30,6 +30,10 @@ public:
CpuManager& operator=(const CpuManager&) = delete;
CpuManager& operator=(CpuManager&&) = delete;
/// Sets if emulation is multicore or single core, must be set before Initialize
void SetMulticore(bool is_multicore) {
this->is_multicore = is_multicore;
}
void Initialize();
void Shutdown();
@ -40,21 +44,34 @@ public:
std::function<void(void*)> GetSuspendThreadStartFunc();
void* GetStartFuncParamater();
std::size_t CurrentCore() const {
return current_core;
}
private:
static void GuestThreadFunction(void* cpu_manager);
static void GuestRewindFunction(void* cpu_manager);
static void IdleThreadFunction(void* cpu_manager);
static void SuspendThreadFunction(void* cpu_manager);
void RunGuestThread();
void RunGuestLoop();
void RunIdleThread();
void RunSuspendThread();
void MultiCoreRunGuestThread();
void MultiCoreRunGuestLoop();
void MultiCoreRunIdleThread();
void MultiCoreRunSuspendThread();
void MultiCorePause(bool paused);
void SingleCoreRunGuestThread();
void SingleCoreRunGuestLoop();
void SingleCoreRunIdleThread();
void SingleCoreRunSuspendThread();
void SingleCorePause(bool paused);
static void ThreadStart(CpuManager& cpu_manager, std::size_t core);
void RunThread(std::size_t core);
void PreemptSingleCore();
struct CoreData {
std::shared_ptr<Common::Fiber> host_context;
std::unique_ptr<Common::Event> enter_barrier;
@ -70,6 +87,11 @@ private:
std::array<CoreData, Core::Hardware::NUM_CPU_CORES> core_data{};
bool is_multicore{};
std::size_t current_core{};
std::size_t preemption_count{};
static constexpr std::size_t max_cycle_runs = 5;
System& system;
};