mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge pull request #4246 from FearlessTobi/port-1346
Port yuzu-emu/yuzu#1346: "svc_wrap: Convert the PARAM macro into a function"
This commit is contained in:
		
						commit
						6b538a49ac
					
				
					 1 changed files with 29 additions and 30 deletions
				
			
		|  | @ -14,7 +14,9 @@ | ||||||
| 
 | 
 | ||||||
| namespace HLE { | namespace HLE { | ||||||
| 
 | 
 | ||||||
| #define PARAM(n) Core::CPU().GetReg(n) | static inline u32 Param(int n) { | ||||||
|  |     return Core::CPU().GetReg(n); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * HLE a function return from the current ARM11 userland process |  * HLE a function return from the current ARM11 userland process | ||||||
|  | @ -39,13 +41,13 @@ static inline void FuncReturn64(u64 res) { | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32, u32, u32, u32)> | template <ResultCode func(u32, u32, u32, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     FuncReturn(func(PARAM(0), PARAM(1), PARAM(2), PARAM(3)).raw); |     FuncReturn(func(Param(0), Param(1), Param(2), Param(3)).raw); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32*, u32, u32, u32, u32, u32)> | template <ResultCode func(u32*, u32, u32, u32, u32, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     u32 param_1 = 0; |     u32 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)).raw; |     u32 retval = func(¶m_1, Param(0), Param(1), Param(2), Param(3), Param(4)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
|  | @ -53,7 +55,7 @@ void Wrap() { | ||||||
| template <ResultCode func(u32*, u32, u32, u32, u32, s32)> | template <ResultCode func(u32*, u32, u32, u32, u32, s32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     u32 param_1 = 0; |     u32 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)).raw; |     u32 retval = func(¶m_1, Param(0), Param(1), Param(2), Param(3), Param(4)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
|  | @ -62,7 +64,7 @@ template <ResultCode func(s32*, VAddr, s32, bool, s64)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s32 param_1 = 0; |     s32 param_1 = 0; | ||||||
|     s32 retval = |     s32 retval = | ||||||
|         func(¶m_1, PARAM(1), (s32)PARAM(2), (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0))) |         func(¶m_1, Param(1), (s32)Param(2), (Param(3) != 0), (((s64)Param(4) << 32) | Param(0))) | ||||||
|             .raw; |             .raw; | ||||||
| 
 | 
 | ||||||
|     Core::CPU().SetReg(1, (u32)param_1); |     Core::CPU().SetReg(1, (u32)param_1); | ||||||
|  | @ -72,7 +74,7 @@ void Wrap() { | ||||||
| template <ResultCode func(s32*, VAddr, s32, u32)> | template <ResultCode func(s32*, VAddr, s32, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s32 param_1 = 0; |     s32 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(1), (s32)PARAM(2), PARAM(3)).raw; |     u32 retval = func(¶m_1, Param(1), (s32)Param(2), Param(3)).raw; | ||||||
| 
 | 
 | ||||||
|     Core::CPU().SetReg(1, (u32)param_1); |     Core::CPU().SetReg(1, (u32)param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
|  | @ -81,7 +83,7 @@ void Wrap() { | ||||||
| template <ResultCode func(u32, u32, u32, u32, s64)> | template <ResultCode func(u32, u32, u32, u32, s64)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     FuncReturn( |     FuncReturn( | ||||||
|         func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), (((s64)PARAM(5) << 32) | PARAM(4))).raw); |         func(Param(0), Param(1), Param(2), Param(3), (((s64)Param(5) << 32) | Param(4))).raw); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32*)> | template <ResultCode func(u32*)> | ||||||
|  | @ -94,7 +96,7 @@ void Wrap() { | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32, s64)> | template <ResultCode func(u32, s64)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s32 retval = func(PARAM(0), (((s64)PARAM(3) << 32) | PARAM(2))).raw; |     s32 retval = func(Param(0), (((s64)Param(3) << 32) | Param(2))).raw; | ||||||
| 
 | 
 | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
|  | @ -103,7 +105,7 @@ template <ResultCode func(Kernel::MemoryInfo*, Kernel::PageInfo*, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     Kernel::MemoryInfo memory_info = {}; |     Kernel::MemoryInfo memory_info = {}; | ||||||
|     Kernel::PageInfo page_info = {}; |     Kernel::PageInfo page_info = {}; | ||||||
|     u32 retval = func(&memory_info, &page_info, PARAM(2)).raw; |     u32 retval = func(&memory_info, &page_info, Param(2)).raw; | ||||||
|     Core::CPU().SetReg(1, memory_info.base_address); |     Core::CPU().SetReg(1, memory_info.base_address); | ||||||
|     Core::CPU().SetReg(2, memory_info.size); |     Core::CPU().SetReg(2, memory_info.size); | ||||||
|     Core::CPU().SetReg(3, memory_info.permission); |     Core::CPU().SetReg(3, memory_info.permission); | ||||||
|  | @ -116,7 +118,7 @@ template <ResultCode func(Kernel::MemoryInfo*, Kernel::PageInfo*, Kernel::Handle | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     Kernel::MemoryInfo memory_info = {}; |     Kernel::MemoryInfo memory_info = {}; | ||||||
|     Kernel::PageInfo page_info = {}; |     Kernel::PageInfo page_info = {}; | ||||||
|     u32 retval = func(&memory_info, &page_info, PARAM(2), PARAM(3)).raw; |     u32 retval = func(&memory_info, &page_info, Param(2), Param(3)).raw; | ||||||
|     Core::CPU().SetReg(1, memory_info.base_address); |     Core::CPU().SetReg(1, memory_info.base_address); | ||||||
|     Core::CPU().SetReg(2, memory_info.size); |     Core::CPU().SetReg(2, memory_info.size); | ||||||
|     Core::CPU().SetReg(3, memory_info.permission); |     Core::CPU().SetReg(3, memory_info.permission); | ||||||
|  | @ -128,33 +130,33 @@ void Wrap() { | ||||||
| template <ResultCode func(s32*, u32)> | template <ResultCode func(s32*, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s32 param_1 = 0; |     s32 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(1)).raw; |     u32 retval = func(¶m_1, Param(1)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32, s32)> | template <ResultCode func(u32, s32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     FuncReturn(func(PARAM(0), (s32)PARAM(1)).raw); |     FuncReturn(func(Param(0), (s32)Param(1)).raw); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32*, u32)> | template <ResultCode func(u32*, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     u32 param_1 = 0; |     u32 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(1)).raw; |     u32 retval = func(¶m_1, Param(1)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32)> | template <ResultCode func(u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     FuncReturn(func(PARAM(0)).raw); |     FuncReturn(func(Param(0)).raw); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32*, s32, s32)> | template <ResultCode func(u32*, s32, s32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     u32 param_1 = 0; |     u32 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(1), PARAM(2)).raw; |     u32 retval = func(¶m_1, Param(1), Param(2)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
|  | @ -162,7 +164,7 @@ void Wrap() { | ||||||
| template <ResultCode func(s32*, u32, s32)> | template <ResultCode func(s32*, u32, s32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s32 param_1 = 0; |     s32 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(1), PARAM(2)).raw; |     u32 retval = func(¶m_1, Param(1), Param(2)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
|  | @ -170,7 +172,7 @@ void Wrap() { | ||||||
| template <ResultCode func(s64*, u32, s32)> | template <ResultCode func(s64*, u32, s32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s64 param_1 = 0; |     s64 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(1), PARAM(2)).raw; |     u32 retval = func(¶m_1, Param(1), Param(2)).raw; | ||||||
|     Core::CPU().SetReg(1, (u32)param_1); |     Core::CPU().SetReg(1, (u32)param_1); | ||||||
|     Core::CPU().SetReg(2, (u32)(param_1 >> 32)); |     Core::CPU().SetReg(2, (u32)(param_1 >> 32)); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
|  | @ -180,22 +182,22 @@ template <ResultCode func(u32*, u32, u32, u32, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     u32 param_1 = 0; |     u32 param_1 = 0; | ||||||
|     // The last parameter is passed in R0 instead of R4
 |     // The last parameter is passed in R0 instead of R4
 | ||||||
|     u32 retval = func(¶m_1, PARAM(1), PARAM(2), PARAM(3), PARAM(0)).raw; |     u32 retval = func(¶m_1, Param(1), Param(2), Param(3), Param(0)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(u32, s64, s64)> | template <ResultCode func(u32, s64, s64)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s64 param1 = ((u64)PARAM(3) << 32) | PARAM(2); |     s64 param1 = ((u64)Param(3) << 32) | Param(2); | ||||||
|     s64 param2 = ((u64)PARAM(4) << 32) | PARAM(1); |     s64 param2 = ((u64)Param(4) << 32) | Param(1); | ||||||
|     FuncReturn(func(PARAM(0), param1, param2).raw); |     FuncReturn(func(Param(0), param1, param2).raw); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(s64*, Kernel::Handle, u32)> | template <ResultCode func(s64*, Kernel::Handle, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     s64 param_1 = 0; |     s64 param_1 = 0; | ||||||
|     u32 retval = func(¶m_1, PARAM(1), PARAM(2)).raw; |     u32 retval = func(¶m_1, Param(1), Param(2)).raw; | ||||||
|     Core::CPU().SetReg(1, (u32)param_1); |     Core::CPU().SetReg(1, (u32)param_1); | ||||||
|     Core::CPU().SetReg(2, (u32)(param_1 >> 32)); |     Core::CPU().SetReg(2, (u32)(param_1 >> 32)); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
|  | @ -203,14 +205,14 @@ void Wrap() { | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(Kernel::Handle, u32)> | template <ResultCode func(Kernel::Handle, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     FuncReturn(func(PARAM(0), PARAM(1)).raw); |     FuncReturn(func(Param(0), Param(1)).raw); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(Kernel::Handle*, Kernel::Handle*, VAddr, u32)> | template <ResultCode func(Kernel::Handle*, Kernel::Handle*, VAddr, u32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     Kernel::Handle param_1 = 0; |     Kernel::Handle param_1 = 0; | ||||||
|     Kernel::Handle param_2 = 0; |     Kernel::Handle param_2 = 0; | ||||||
|     u32 retval = func(¶m_1, ¶m_2, PARAM(2), PARAM(3)).raw; |     u32 retval = func(¶m_1, ¶m_2, Param(2), Param(3)).raw; | ||||||
|     Core::CPU().SetReg(1, param_1); |     Core::CPU().SetReg(1, param_1); | ||||||
|     Core::CPU().SetReg(2, param_2); |     Core::CPU().SetReg(2, param_2); | ||||||
|     FuncReturn(retval); |     FuncReturn(retval); | ||||||
|  | @ -247,20 +249,17 @@ void Wrap() { | ||||||
| 
 | 
 | ||||||
| template <void func(s64)> | template <void func(s64)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     func(((s64)PARAM(1) << 32) | PARAM(0)); |     func(((s64)Param(1) << 32) | Param(0)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <void func(VAddr, int len)> | template <void func(VAddr, int len)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     func(PARAM(0), PARAM(1)); |     func(Param(0), Param(1)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <void func(u8)> | template <void func(u8)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     func((u8)PARAM(0)); |     func((u8)Param(0)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #undef PARAM |  | ||||||
| #undef FuncReturn |  | ||||||
| 
 |  | ||||||
| } // namespace HLE
 | } // namespace HLE
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue