mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	ARM_Interface: added SaveContext and LoadContext functions for HLE thread switching
This commit is contained in:
		
							parent
							
								
									143bba2045
								
							
						
					
					
						commit
						49dc2ce8ac
					
				
					 4 changed files with 65 additions and 37 deletions
				
			
		|  | @ -98,46 +98,12 @@ inline void __SetCurrentThread(Thread* t) { | |||
| 
 | ||||
| /// Saves the current CPU context
 | ||||
| void __KernelSaveContext(ThreadContext& ctx) { | ||||
|     ctx.cpu_registers[0] = Core::g_app_core->GetReg(0); | ||||
|     ctx.cpu_registers[1] = Core::g_app_core->GetReg(1); | ||||
|     ctx.cpu_registers[2] = Core::g_app_core->GetReg(2); | ||||
|     ctx.cpu_registers[3] = Core::g_app_core->GetReg(3); | ||||
|     ctx.cpu_registers[4] = Core::g_app_core->GetReg(4); | ||||
|     ctx.cpu_registers[5] = Core::g_app_core->GetReg(5); | ||||
|     ctx.cpu_registers[6] = Core::g_app_core->GetReg(6); | ||||
|     ctx.cpu_registers[7] = Core::g_app_core->GetReg(7); | ||||
|     ctx.cpu_registers[8] = Core::g_app_core->GetReg(8); | ||||
|     ctx.cpu_registers[9] = Core::g_app_core->GetReg(9); | ||||
|     ctx.cpu_registers[10] = Core::g_app_core->GetReg(10); | ||||
|     ctx.cpu_registers[11] = Core::g_app_core->GetReg(11); | ||||
|     ctx.cpu_registers[12] = Core::g_app_core->GetReg(12); | ||||
|     ctx.sp = Core::g_app_core->GetReg(13); | ||||
|     ctx.lr = Core::g_app_core->GetReg(14); | ||||
|     ctx.pc = Core::g_app_core->GetPC(); | ||||
|     ctx.cpsr = Core::g_app_core->GetCPSR(); | ||||
|     Core::g_app_core->SaveContext(ctx); | ||||
| } | ||||
| 
 | ||||
| /// Loads a CPU context
 | ||||
| void __KernelLoadContext(const ThreadContext& ctx) { | ||||
|     Core::g_app_core->SetReg(0, ctx.cpu_registers[0]); | ||||
|     Core::g_app_core->SetReg(1, ctx.cpu_registers[1]); | ||||
|     Core::g_app_core->SetReg(2, ctx.cpu_registers[2]); | ||||
|     Core::g_app_core->SetReg(3, ctx.cpu_registers[3]); | ||||
|     Core::g_app_core->SetReg(4, ctx.cpu_registers[4]); | ||||
|     Core::g_app_core->SetReg(5, ctx.cpu_registers[5]); | ||||
|     Core::g_app_core->SetReg(6, ctx.cpu_registers[6]); | ||||
|     Core::g_app_core->SetReg(7, ctx.cpu_registers[7]); | ||||
|     Core::g_app_core->SetReg(8, ctx.cpu_registers[8]); | ||||
|     Core::g_app_core->SetReg(9, ctx.cpu_registers[9]); | ||||
|     Core::g_app_core->SetReg(10, ctx.cpu_registers[10]); | ||||
|     Core::g_app_core->SetReg(11, ctx.cpu_registers[11]); | ||||
|     Core::g_app_core->SetReg(12, ctx.cpu_registers[12]); | ||||
|     Core::g_app_core->SetReg(13, ctx.sp); | ||||
|     Core::g_app_core->SetReg(14, ctx.lr); | ||||
|     //Core::g_app_core->SetReg(15, ctx.pc);
 | ||||
| 
 | ||||
|     Core::g_app_core->SetPC(ctx.pc); | ||||
|     Core::g_app_core->SetCPSR(ctx.cpsr); | ||||
|     Core::g_app_core->LoadContext(ctx); | ||||
| } | ||||
| 
 | ||||
| /// Resets a thread
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue