diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index b0d7ced7f..c368745b1 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h @@ -8,6 +8,8 @@ #include "common/common_types.h" #include "core/hle/kernel/vm_manager.h" +namespace Core { + /// Generic ARM11 CPU interface class ARM_Interface : NonCopyable { public: @@ -122,3 +124,5 @@ public: /// Prepare core for thread reschedule (if needed to correctly handle state) virtual void PrepareReschedule() = 0; }; + +} // namespace Core diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 2c817d7d1..f96e08212 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -14,6 +14,8 @@ #include "core/hle/kernel/svc.h" #include "core/memory.h" +namespace Core { + using Vector = Dynarmic::A64::Vector; class ARM_Dynarmic_Callbacks : public Dynarmic::A64::UserCallbacks { @@ -300,3 +302,5 @@ bool DynarmicExclusiveMonitor::ExclusiveWrite128(size_t core_index, VAddr vaddr, Memory::Write64(vaddr, value[1]); }); } + +} // namespace Core diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index 14c072601..3bdfd8cd9 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h @@ -12,6 +12,8 @@ #include "core/arm/exclusive_monitor.h" #include "core/arm/unicorn/arm_unicorn.h" +namespace Core { + class ARM_Dynarmic_Callbacks; class DynarmicExclusiveMonitor; @@ -81,3 +83,5 @@ private: friend class ARM_Dynarmic; Dynarmic::A64::ExclusiveMonitor monitor; }; + +} // namespace Core diff --git a/src/core/arm/exclusive_monitor.cpp b/src/core/arm/exclusive_monitor.cpp index cb8c81d80..abd59ff4b 100644 --- a/src/core/arm/exclusive_monitor.cpp +++ b/src/core/arm/exclusive_monitor.cpp @@ -4,4 +4,8 @@ #include "core/arm/exclusive_monitor.h" +namespace Core { + ExclusiveMonitor::~ExclusiveMonitor() = default; + +} // namespace Core diff --git a/src/core/arm/exclusive_monitor.h b/src/core/arm/exclusive_monitor.h index 13671ed7a..6f9b51573 100644 --- a/src/core/arm/exclusive_monitor.h +++ b/src/core/arm/exclusive_monitor.h @@ -6,6 +6,8 @@ #include "common/common_types.h" +namespace Core { + class ExclusiveMonitor { public: virtual ~ExclusiveMonitor(); @@ -19,3 +21,5 @@ public: virtual bool ExclusiveWrite64(size_t core_index, VAddr vaddr, u64 value) = 0; virtual bool ExclusiveWrite128(size_t core_index, VAddr vaddr, u128 value) = 0; }; + +} // namespace Core diff --git a/src/core/arm/unicorn/arm_unicorn.cpp b/src/core/arm/unicorn/arm_unicorn.cpp index 6bc349460..307f12198 100644 --- a/src/core/arm/unicorn/arm_unicorn.cpp +++ b/src/core/arm/unicorn/arm_unicorn.cpp @@ -11,6 +11,8 @@ #include "core/core_timing.h" #include "core/hle/kernel/svc.h" +namespace Core { + // Load Unicorn DLL once on Windows using RAII #ifdef _MSC_VER #include @@ -211,7 +213,7 @@ void ARM_Unicorn::ExecuteInstructions(int num_instructions) { } } -void ARM_Unicorn::SaveContext(ARM_Interface::ThreadContext& ctx) { +void ARM_Unicorn::SaveContext(ThreadContext& ctx) { int uregs[32]; void* tregs[32]; @@ -238,7 +240,7 @@ void ARM_Unicorn::SaveContext(ARM_Interface::ThreadContext& ctx) { CHECKED(uc_reg_read_batch(uc, uregs, tregs, 32)); } -void ARM_Unicorn::LoadContext(const ARM_Interface::ThreadContext& ctx) { +void ARM_Unicorn::LoadContext(const ThreadContext& ctx) { int uregs[32]; void* tregs[32]; @@ -277,3 +279,5 @@ void ARM_Unicorn::RecordBreak(GDBStub::BreakpointAddress bkpt) { last_bkpt = bkpt; last_bkpt_hit = true; } + +} // namespace Core diff --git a/src/core/arm/unicorn/arm_unicorn.h b/src/core/arm/unicorn/arm_unicorn.h index af7943352..bd6b2f723 100644 --- a/src/core/arm/unicorn/arm_unicorn.h +++ b/src/core/arm/unicorn/arm_unicorn.h @@ -9,6 +9,8 @@ #include "core/arm/arm_interface.h" #include "core/gdbstub/gdbstub.h" +namespace Core { + class ARM_Unicorn final : public ARM_Interface { public: ARM_Unicorn(); @@ -46,3 +48,5 @@ private: GDBStub::BreakpointAddress last_bkpt{}; bool last_bkpt_hit; }; + +} // namespace Core diff --git a/src/core/core.h b/src/core/core.h index 0fab76b7f..321104585 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -23,8 +23,6 @@ #include "video_core/debug_utils/debug_utils.h" #include "video_core/gpu.h" -class ARM_Interface; - namespace Core::Frontend { class EmuWindow; } @@ -39,6 +37,8 @@ class RendererBase; namespace Core { +class ARM_Interface; + class System { public: System(const System&) = delete; diff --git a/src/core/core_cpu.h b/src/core/core_cpu.h index 56cdae194..40ed34b47 100644 --- a/src/core/core_cpu.h +++ b/src/core/core_cpu.h @@ -12,14 +12,14 @@ #include "common/common_types.h" #include "core/arm/exclusive_monitor.h" -class ARM_Interface; - namespace Kernel { class Scheduler; } namespace Core { +class ARM_Interface; + constexpr unsigned NUM_CPU_CORES{4}; class CpuBarrier { diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp index e770b9103..69c812f16 100644 --- a/src/core/hle/kernel/scheduler.cpp +++ b/src/core/hle/kernel/scheduler.cpp @@ -17,7 +17,7 @@ namespace Kernel { std::mutex Scheduler::scheduler_mutex; -Scheduler::Scheduler(ARM_Interface* cpu_core) : cpu_core(cpu_core) {} +Scheduler::Scheduler(Core::ARM_Interface* cpu_core) : cpu_core(cpu_core) {} Scheduler::~Scheduler() { for (auto& thread : thread_list) { diff --git a/src/core/hle/kernel/scheduler.h b/src/core/hle/kernel/scheduler.h index 6a61ef64e..744990c9b 100644 --- a/src/core/hle/kernel/scheduler.h +++ b/src/core/hle/kernel/scheduler.h @@ -11,13 +11,15 @@ #include "core/hle/kernel/object.h" #include "core/hle/kernel/thread.h" +namespace Core { class ARM_Interface; +} namespace Kernel { class Scheduler final { public: - explicit Scheduler(ARM_Interface* cpu_core); + explicit Scheduler(Core::ARM_Interface* cpu_core); ~Scheduler(); /// Returns whether there are any threads that are ready to run. @@ -70,7 +72,7 @@ private: SharedPtr current_thread = nullptr; - ARM_Interface* cpu_core; + Core::ARM_Interface* cpu_core; static std::mutex scheduler_mutex; }; diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index cf4f94822..4ffd8d5cc 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -283,9 +283,9 @@ static std::tuple GetFreeThreadLocalSlot( * @param entry_point Address of entry point for execution * @param arg User argument for thread */ -static void ResetThreadContext(ARM_Interface::ThreadContext& context, VAddr stack_top, +static void ResetThreadContext(Core::ARM_Interface::ThreadContext& context, VAddr stack_top, VAddr entry_point, u64 arg) { - memset(&context, 0, sizeof(ARM_Interface::ThreadContext)); + memset(&context, 0, sizeof(Core::ARM_Interface::ThreadContext)); context.cpu_registers[0] = arg; context.pc = entry_point; diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index adc804248..06edc296d 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -204,7 +204,7 @@ public: return status == ThreadStatus::WaitSynchAll; } - ARM_Interface::ThreadContext context; + Core::ARM_Interface::ThreadContext context; u32 thread_id;