mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Merge pull request #5546 from FearlessTobi/port-5524
Port yuzu-emu/yuzu#4086 and yuzu-emu/yuzu#4611: Xbyak cleanups
This commit is contained in:
		
						commit
						5776bdda82
					
				
					 4 changed files with 79 additions and 70 deletions
				
			
		|  | @ -102,40 +102,40 @@ const JitFunction instr_table[64] = { | |||
| // purposes, as documented below:
 | ||||
| 
 | ||||
| /// Pointer to the uniform memory
 | ||||
| static const Reg64 UNIFORMS = r9; | ||||
| constexpr Reg64 UNIFORMS = r9; | ||||
| /// The two 32-bit VS address offset registers set by the MOVA instruction
 | ||||
| static const Reg64 ADDROFFS_REG_0 = r10; | ||||
| static const Reg64 ADDROFFS_REG_1 = r11; | ||||
| constexpr Reg64 ADDROFFS_REG_0 = r10; | ||||
| constexpr Reg64 ADDROFFS_REG_1 = r11; | ||||
| /// VS loop count register (Multiplied by 16)
 | ||||
| static const Reg32 LOOPCOUNT_REG = r12d; | ||||
| constexpr Reg32 LOOPCOUNT_REG = r12d; | ||||
| /// Current VS loop iteration number (we could probably use LOOPCOUNT_REG, but this quicker)
 | ||||
| static const Reg32 LOOPCOUNT = esi; | ||||
| constexpr Reg32 LOOPCOUNT = esi; | ||||
| /// Number to increment LOOPCOUNT_REG by on each loop iteration (Multiplied by 16)
 | ||||
| static const Reg32 LOOPINC = edi; | ||||
| constexpr Reg32 LOOPINC = edi; | ||||
| /// Result of the previous CMP instruction for the X-component comparison
 | ||||
| static const Reg64 COND0 = r13; | ||||
| constexpr Reg64 COND0 = r13; | ||||
| /// Result of the previous CMP instruction for the Y-component comparison
 | ||||
| static const Reg64 COND1 = r14; | ||||
| constexpr Reg64 COND1 = r14; | ||||
| /// Pointer to the UnitState instance for the current VS unit
 | ||||
| static const Reg64 STATE = r15; | ||||
| constexpr Reg64 STATE = r15; | ||||
| /// SIMD scratch register
 | ||||
| static const Xmm SCRATCH = xmm0; | ||||
| constexpr Xmm SCRATCH = xmm0; | ||||
| /// Loaded with the first swizzled source register, otherwise can be used as a scratch register
 | ||||
| static const Xmm SRC1 = xmm1; | ||||
| constexpr Xmm SRC1 = xmm1; | ||||
| /// Loaded with the second swizzled source register, otherwise can be used as a scratch register
 | ||||
| static const Xmm SRC2 = xmm2; | ||||
| constexpr Xmm SRC2 = xmm2; | ||||
| /// Loaded with the third swizzled source register, otherwise can be used as a scratch register
 | ||||
| static const Xmm SRC3 = xmm3; | ||||
| constexpr Xmm SRC3 = xmm3; | ||||
| /// Additional scratch register
 | ||||
| static const Xmm SCRATCH2 = xmm4; | ||||
| constexpr Xmm SCRATCH2 = xmm4; | ||||
| /// Constant vector of [1.0f, 1.0f, 1.0f, 1.0f], used to efficiently set a vector to one
 | ||||
| static const Xmm ONE = xmm14; | ||||
| constexpr Xmm ONE = xmm14; | ||||
| /// Constant vector of [-0.f, -0.f, -0.f, -0.f], used to efficiently negate a vector with XOR
 | ||||
| static const Xmm NEGBIT = xmm15; | ||||
| constexpr Xmm NEGBIT = xmm15; | ||||
| 
 | ||||
| // State registers that must not be modified by external functions calls
 | ||||
| // Scratch registers, e.g., SRC1 and SCRATCH, have to be saved on the side if needed
 | ||||
| static const BitSet32 persistent_regs = BuildRegSet({ | ||||
| static const std::bitset<32> persistent_regs = BuildRegSet({ | ||||
|     // Pointers to register blocks
 | ||||
|     UNIFORMS, | ||||
|     STATE, | ||||
|  | @ -356,7 +356,7 @@ void JitShader::Compile_UniformCondition(Instruction instr) { | |||
|     cmp(byte[UNIFORMS + offset], 0); | ||||
| } | ||||
| 
 | ||||
| BitSet32 JitShader::PersistentCallerSavedRegs() { | ||||
| std::bitset<32> JitShader::PersistentCallerSavedRegs() { | ||||
|     return persistent_regs & ABI_ALL_CALLER_SAVED; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <array> | ||||
| #include <bitset> | ||||
| #include <cstddef> | ||||
| #include <optional> | ||||
| #include <utility> | ||||
|  | @ -91,7 +92,7 @@ private: | |||
|      */ | ||||
|     void Compile_Return(); | ||||
| 
 | ||||
|     BitSet32 PersistentCallerSavedRegs(); | ||||
|     std::bitset<32> PersistentCallerSavedRegs(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Assertion evaluated at compile-time, but only triggered if executed at runtime. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue