summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2020-02-29 13:58:50 -0400
committerGravatar Fernando Sahmkow2020-06-27 11:35:56 -0400
commit1b82ccec2220a69711ba75cf51ee98cbcfe6a510 (patch)
tree281ad19080ec4e6e14caa50b073acdfac005212b /src/core/hle/kernel/kernel.cpp
parentX64 Clock: Reduce accuracy to be less or equal to guest accuracy. (diff)
downloadyuzu-1b82ccec2220a69711ba75cf51ee98cbcfe6a510.tar.gz
yuzu-1b82ccec2220a69711ba75cf51ee98cbcfe6a510.tar.xz
yuzu-1b82ccec2220a69711ba75cf51ee98cbcfe6a510.zip
Core: Refactor ARM Interface.
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index a19cd7a1f..e33ef5323 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -2,6 +2,7 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <array>
5#include <atomic> 6#include <atomic>
6#include <bitset> 7#include <bitset>
7#include <functional> 8#include <functional>
@@ -16,7 +17,9 @@
16#include "common/microprofile.h" 17#include "common/microprofile.h"
17#include "common/thread.h" 18#include "common/thread.h"
18#include "core/arm/arm_interface.h" 19#include "core/arm/arm_interface.h"
20#include "core/arm/cpu_interrupt_handler.h"
19#include "core/arm/exclusive_monitor.h" 21#include "core/arm/exclusive_monitor.h"
22#include "core/arm/unicorn/arm_unicorn.h"
20#include "core/core.h" 23#include "core/core.h"
21#include "core/core_timing.h" 24#include "core/core_timing.h"
22#include "core/core_timing_util.h" 25#include "core/core_timing_util.h"
@@ -42,6 +45,11 @@
42#include "core/hle/result.h" 45#include "core/hle/result.h"
43#include "core/memory.h" 46#include "core/memory.h"
44 47
48#ifdef ARCHITECTURE_x86_64
49#include "core/arm/dynarmic/arm_dynarmic_32.h"
50#include "core/arm/dynarmic/arm_dynarmic_64.h"
51#endif
52
45MICROPROFILE_DEFINE(Kernel_SVC, "Kernel", "SVC", MP_RGB(70, 200, 70)); 53MICROPROFILE_DEFINE(Kernel_SVC, "Kernel", "SVC", MP_RGB(70, 200, 70));
46 54
47namespace Kernel { 55namespace Kernel {
@@ -178,7 +186,20 @@ struct KernelCore::Impl {
178 exclusive_monitor = 186 exclusive_monitor =
179 Core::MakeExclusiveMonitor(system.Memory(), Core::Hardware::NUM_CPU_CORES); 187 Core::MakeExclusiveMonitor(system.Memory(), Core::Hardware::NUM_CPU_CORES);
180 for (std::size_t i = 0; i < Core::Hardware::NUM_CPU_CORES; i++) { 188 for (std::size_t i = 0; i < Core::Hardware::NUM_CPU_CORES; i++) {
181 cores.emplace_back(system, i, *exclusive_monitor); 189#ifdef ARCHITECTURE_x86_64
190 arm_interfaces_32[i] =
191 std::make_unique<Core::ARM_Dynarmic_32>(system, interrupts, *exclusive_monitor, i);
192 arm_interfaces_64[i] =
193 std::make_unique<Core::ARM_Dynarmic_64>(system, interrupts, *exclusive_monitor, i);
194#else
195 arm_interfaces_32[i] = std::make_shared<Core::ARM_Unicorn>(
196 system, interrupts, ARM_Unicorn::Arch::AArch32, i);
197 arm_interfaces_64[i] = std::make_shared<Core::ARM_Unicorn>(
198 system, interrupts, ARM_Unicorn::Arch::AArch64, i);
199 LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
200#endif
201 cores.emplace_back(system, i, *exclusive_monitor, interrupts[i], *arm_interfaces_32[i],
202 *arm_interfaces_64[i]);
182 } 203 }
183 } 204 }
184 205
@@ -407,6 +428,11 @@ struct KernelCore::Impl {
407 std::shared_ptr<Kernel::SharedMemory> time_shared_mem; 428 std::shared_ptr<Kernel::SharedMemory> time_shared_mem;
408 429
409 std::array<std::shared_ptr<Thread>, Core::Hardware::NUM_CPU_CORES> suspend_threads{}; 430 std::array<std::shared_ptr<Thread>, Core::Hardware::NUM_CPU_CORES> suspend_threads{};
431 std::array<Core::CPUInterruptHandler, Core::Hardware::NUM_CPU_CORES> interrupts{};
432 std::array<std::unique_ptr<Core::ARM_Interface>, Core::Hardware::NUM_CPU_CORES>
433 arm_interfaces_32{};
434 std::array<std::unique_ptr<Core::ARM_Interface>, Core::Hardware::NUM_CPU_CORES>
435 arm_interfaces_64{};
410 436
411 bool is_multicore{}; 437 bool is_multicore{};
412 std::thread::id single_core_thread_id{}; 438 std::thread::id single_core_thread_id{};