mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	macro_jit_x64: Select better registers
All registers are now callee-save registers. RBX and RBP selected for STATE and RESULT because these are most commonly accessed; this is to avoid the REX prefix. RBP not used for STATE because there are some SIB restrictions, RBX emits smaller code.
This commit is contained in:
		
							parent
							
								
									79aa7b3ace
								
							
						
					
					
						commit
						c09a9e5cc7
					
				@ -14,18 +14,18 @@ MICROPROFILE_DEFINE(MacroJitCompile, "GPU", "Compile macro JIT", MP_RGB(173, 255
 | 
				
			|||||||
MICROPROFILE_DEFINE(MacroJitExecute, "GPU", "Execute macro JIT", MP_RGB(255, 255, 0));
 | 
					MICROPROFILE_DEFINE(MacroJitExecute, "GPU", "Execute macro JIT", MP_RGB(255, 255, 0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Tegra {
 | 
					namespace Tegra {
 | 
				
			||||||
static const Xbyak::Reg64 PARAMETERS = Xbyak::util::r9;
 | 
					static const Xbyak::Reg64 STATE = Xbyak::util::rbx;
 | 
				
			||||||
static const Xbyak::Reg64 STATE = Xbyak::util::r11;
 | 
					static const Xbyak::Reg32 RESULT = Xbyak::util::ebp;
 | 
				
			||||||
static const Xbyak::Reg64 NEXT_PARAMETER = Xbyak::util::r12;
 | 
					static const Xbyak::Reg64 PARAMETERS = Xbyak::util::r12;
 | 
				
			||||||
static const Xbyak::Reg32 RESULT = Xbyak::util::r13d;
 | 
					static const Xbyak::Reg64 NEXT_PARAMETER = Xbyak::util::r13;
 | 
				
			||||||
static const Xbyak::Reg32 METHOD_ADDRESS = Xbyak::util::r14d;
 | 
					static const Xbyak::Reg32 METHOD_ADDRESS = Xbyak::util::r14d;
 | 
				
			||||||
static const Xbyak::Reg64 BRANCH_HOLDER = Xbyak::util::r15;
 | 
					static const Xbyak::Reg64 BRANCH_HOLDER = Xbyak::util::r15;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const std::bitset<32> PERSISTENT_REGISTERS = Common::X64::BuildRegSet({
 | 
					static const std::bitset<32> PERSISTENT_REGISTERS = Common::X64::BuildRegSet({
 | 
				
			||||||
    PARAMETERS,
 | 
					 | 
				
			||||||
    STATE,
 | 
					    STATE,
 | 
				
			||||||
    NEXT_PARAMETER,
 | 
					 | 
				
			||||||
    RESULT,
 | 
					    RESULT,
 | 
				
			||||||
 | 
					    PARAMETERS,
 | 
				
			||||||
 | 
					    NEXT_PARAMETER,
 | 
				
			||||||
    METHOD_ADDRESS,
 | 
					    METHOD_ADDRESS,
 | 
				
			||||||
    BRANCH_HOLDER,
 | 
					    BRANCH_HOLDER,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
@ -64,13 +64,13 @@ void MacroJITx64Impl::Compile_ALU(Macro::Opcode opcode) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (!optimizer.zero_reg_skip) {
 | 
					    if (!optimizer.zero_reg_skip) {
 | 
				
			||||||
        src_a = Compile_GetRegister(opcode.src_a, RESULT);
 | 
					        src_a = Compile_GetRegister(opcode.src_a, RESULT);
 | 
				
			||||||
        src_b = Compile_GetRegister(opcode.src_b, ebx);
 | 
					        src_b = Compile_GetRegister(opcode.src_b, eax);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        if (!is_a_zero) {
 | 
					        if (!is_a_zero) {
 | 
				
			||||||
            src_a = Compile_GetRegister(opcode.src_a, RESULT);
 | 
					            src_a = Compile_GetRegister(opcode.src_a, RESULT);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!is_b_zero) {
 | 
					        if (!is_b_zero) {
 | 
				
			||||||
            src_b = Compile_GetRegister(opcode.src_b, ebx);
 | 
					            src_b = Compile_GetRegister(opcode.src_b, eax);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Xbyak::Label skip_carry{};
 | 
					    Xbyak::Label skip_carry{};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user