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