mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	emitter: constexpr-ify helper functions
This commit is contained in:
		
							parent
							
								
									e66a6a2a1b
								
							
						
					
					
						commit
						1351c0ce9f
					
				
					 1 changed files with 17 additions and 19 deletions
				
			
		|  | @ -236,43 +236,41 @@ private: | |||
|     u16 operandReg = 0; | ||||
| }; | ||||
| 
 | ||||
| inline OpArg M(const void *ptr) {return OpArg((u64)ptr, (int)SCALE_RIP);} | ||||
| template <typename T> | ||||
| inline OpArg M(const T *ptr)    {return OpArg((u64)(const void *)ptr, (int)SCALE_RIP);} | ||||
| inline OpArg R(X64Reg value)    {return OpArg(0, SCALE_NONE, value);} | ||||
| inline OpArg MatR(X64Reg value) {return OpArg(0, SCALE_ATREG, value);} | ||||
| inline OpArg M(const T *ptr)       { return OpArg(reinterpret_cast<u64>(ptr), static_cast<int>(SCALE_RIP)); } | ||||
| constexpr OpArg R(X64Reg value)    { return OpArg(0, SCALE_NONE, value); } | ||||
| constexpr OpArg MatR(X64Reg value) { return OpArg(0, SCALE_ATREG, value); } | ||||
| 
 | ||||
| inline OpArg MDisp(X64Reg value, int offset) | ||||
| constexpr OpArg MDisp(X64Reg value, int offset) | ||||
| { | ||||
|     return OpArg((u32)offset, SCALE_ATREG, value); | ||||
|     return OpArg(static_cast<u32>(offset), SCALE_ATREG, value); | ||||
| } | ||||
| 
 | ||||
| inline OpArg MComplex(X64Reg base, X64Reg scaled, int scale, int offset) | ||||
| constexpr OpArg MComplex(X64Reg base, X64Reg scaled, int scale, int offset) | ||||
| { | ||||
|     return OpArg(offset, scale, base, scaled); | ||||
| } | ||||
| 
 | ||||
| inline OpArg MScaled(X64Reg scaled, int scale, int offset) | ||||
| constexpr OpArg MScaled(X64Reg scaled, int scale, int offset) | ||||
| { | ||||
|     if (scale == SCALE_1) | ||||
|         return OpArg(offset, SCALE_ATREG, scaled); | ||||
|     else | ||||
|         return OpArg(offset, scale | 0x20, RAX, scaled); | ||||
|     return scale == SCALE_1 | ||||
|            ? OpArg(offset, SCALE_ATREG, scaled) | ||||
|            : OpArg(offset, scale | 0x20, RAX, scaled); | ||||
| } | ||||
| 
 | ||||
| inline OpArg MRegSum(X64Reg base, X64Reg offset) | ||||
| constexpr OpArg MRegSum(X64Reg base, X64Reg offset) | ||||
| { | ||||
|     return MComplex(base, offset, 1, 0); | ||||
| } | ||||
| 
 | ||||
| inline OpArg Imm8 (u8 imm)  {return OpArg(imm, SCALE_IMM8);} | ||||
| inline OpArg Imm16(u16 imm) {return OpArg(imm, SCALE_IMM16);} //rarely used
 | ||||
| inline OpArg Imm32(u32 imm) {return OpArg(imm, SCALE_IMM32);} | ||||
| inline OpArg Imm64(u64 imm) {return OpArg(imm, SCALE_IMM64);} | ||||
| inline OpArg UImmAuto(u32 imm) { | ||||
| constexpr OpArg Imm8 (u8 imm)  { return OpArg(imm, SCALE_IMM8);  } | ||||
| constexpr OpArg Imm16(u16 imm) { return OpArg(imm, SCALE_IMM16); } //rarely used
 | ||||
| constexpr OpArg Imm32(u32 imm) { return OpArg(imm, SCALE_IMM32); } | ||||
| constexpr OpArg Imm64(u64 imm) { return OpArg(imm, SCALE_IMM64); } | ||||
| constexpr OpArg UImmAuto(u32 imm) { | ||||
|     return OpArg(imm, imm >= 128 ? SCALE_IMM32 : SCALE_IMM8); | ||||
| } | ||||
| inline OpArg SImmAuto(s32 imm) { | ||||
| constexpr OpArg SImmAuto(s32 imm) { | ||||
|     return OpArg(imm, (imm >= 128 || imm < -128) ? SCALE_IMM32 : SCALE_IMM8); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue