mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	Kernel: Implement Physical Core.
This commit is contained in:
		
							
								
								
									
										19
									
								
								src/core/hle/kernel/physical_core.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/core/hle/kernel/physical_core.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | // Copyright 2020 yuzu Emulator Project | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | namespace Kernel { | ||||||
|  |  | ||||||
|  | PhysicalCore::PhysicalCore(KernelCore& kernel, std::size_t id, ExclusiveMonitor& exclusive_monitor) | ||||||
|  |     : core_index{id}, kernel{kernel} { | ||||||
|  | #ifdef ARCHITECTURE_x86_64 | ||||||
|  |     arm_interface = std::make_unique<ARM_Dynarmic>(system, exclusive_monitor, core_index); | ||||||
|  | #else | ||||||
|  |     arm_interface = std::make_unique<ARM_Unicorn>(system); | ||||||
|  |     LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available"); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     scheduler = std::make_unique<Kernel::Scheduler>(system, *arm_interface, core_index); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Kernel | ||||||
							
								
								
									
										62
									
								
								src/core/hle/kernel/physical_core.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/core/hle/kernel/physical_core.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
		Reference in New Issue
	
	Block a user
	 Fernando Sahmkow
					Fernando Sahmkow