mirror of
https://github.com/yuzu-emu/yuzu.git
synced 2024-12-26 16:00:08 +00:00
xbyak_abi: Remove *GPS variants of stack manipulation functions
This commit is contained in:
parent
4417770ba9
commit
d563017dfe
@ -223,40 +223,4 @@ inline void ABI_PopRegistersAndAdjustStack(Xbyak::CodeGenerator& code, std::bits
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t ABI_PushRegistersAndAdjustStackGPS(Xbyak::CodeGenerator& code, std::bitset<32> regs,
|
|
||||||
size_t rsp_alignment,
|
|
||||||
size_t needed_frame_size = 0) {
|
|
||||||
s32 subtraction, xmm_offset;
|
|
||||||
ABI_CalculateFrameSize(regs, rsp_alignment, needed_frame_size, &subtraction, &xmm_offset);
|
|
||||||
|
|
||||||
for (std::size_t i = 0; i < regs.size(); ++i) {
|
|
||||||
if (regs[i] && ABI_ALL_GPRS[i]) {
|
|
||||||
code.push(IndexToReg64(static_cast<int>(i)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (subtraction != 0) {
|
|
||||||
code.sub(code.rsp, subtraction);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ABI_SHADOW_SPACE;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void ABI_PopRegistersAndAdjustStackGPS(Xbyak::CodeGenerator& code, std::bitset<32> regs,
|
|
||||||
size_t rsp_alignment, size_t needed_frame_size = 0) {
|
|
||||||
s32 subtraction, xmm_offset;
|
|
||||||
ABI_CalculateFrameSize(regs, rsp_alignment, needed_frame_size, &subtraction, &xmm_offset);
|
|
||||||
|
|
||||||
if (subtraction != 0) {
|
|
||||||
code.add(code.rsp, subtraction);
|
|
||||||
}
|
|
||||||
|
|
||||||
// GPRs need to be popped in reverse order
|
|
||||||
for (int i = 15; i >= 0; i--) {
|
|
||||||
if (regs[i]) {
|
|
||||||
code.pop(IndexToReg64(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace Common::X64
|
} // namespace Common::X64
|
||||||
|
@ -302,22 +302,22 @@ void MacroJITx64Impl::Compile_Read(Macro::Opcode opcode) {
|
|||||||
sub(result, opcode.immediate * -1);
|
sub(result, opcode.immediate * -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Common::X64::ABI_PushRegistersAndAdjustStackGPS(*this, PersistentCallerSavedRegs(), 0);
|
Common::X64::ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
|
||||||
mov(Common::X64::ABI_PARAM1, qword[STATE]);
|
mov(Common::X64::ABI_PARAM1, qword[STATE]);
|
||||||
mov(Common::X64::ABI_PARAM2, RESULT);
|
mov(Common::X64::ABI_PARAM2, RESULT);
|
||||||
Common::X64::CallFarFunction(*this, &Read);
|
Common::X64::CallFarFunction(*this, &Read);
|
||||||
Common::X64::ABI_PopRegistersAndAdjustStackGPS(*this, PersistentCallerSavedRegs(), 0);
|
Common::X64::ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
|
||||||
mov(RESULT, Common::X64::ABI_RETURN.cvt32());
|
mov(RESULT, Common::X64::ABI_RETURN.cvt32());
|
||||||
Compile_ProcessResult(opcode.result_operation, opcode.dst);
|
Compile_ProcessResult(opcode.result_operation, opcode.dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tegra::MacroJITx64Impl::Compile_Send(Xbyak::Reg32 value) {
|
void Tegra::MacroJITx64Impl::Compile_Send(Xbyak::Reg32 value) {
|
||||||
Common::X64::ABI_PushRegistersAndAdjustStackGPS(*this, PersistentCallerSavedRegs(), 0);
|
Common::X64::ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
|
||||||
mov(Common::X64::ABI_PARAM1, qword[STATE]);
|
mov(Common::X64::ABI_PARAM1, qword[STATE]);
|
||||||
mov(Common::X64::ABI_PARAM2, METHOD_ADDRESS);
|
mov(Common::X64::ABI_PARAM2, METHOD_ADDRESS);
|
||||||
mov(Common::X64::ABI_PARAM3, value);
|
mov(Common::X64::ABI_PARAM3, value);
|
||||||
Common::X64::CallFarFunction(*this, &Send);
|
Common::X64::CallFarFunction(*this, &Send);
|
||||||
Common::X64::ABI_PopRegistersAndAdjustStackGPS(*this, PersistentCallerSavedRegs(), 0);
|
Common::X64::ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
|
||||||
|
|
||||||
Xbyak::Label dont_process{};
|
Xbyak::Label dont_process{};
|
||||||
// Get increment
|
// Get increment
|
||||||
@ -421,7 +421,7 @@ void MacroJITx64Impl::Compile() {
|
|||||||
bool keep_executing = true;
|
bool keep_executing = true;
|
||||||
labels.fill(Xbyak::Label());
|
labels.fill(Xbyak::Label());
|
||||||
|
|
||||||
Common::X64::ABI_PushRegistersAndAdjustStackGPS(*this, Common::X64::ABI_ALL_CALLEE_SAVED, 8);
|
Common::X64::ABI_PushRegistersAndAdjustStack(*this, Common::X64::ABI_ALL_CALLEE_SAVED, 8);
|
||||||
// JIT state
|
// JIT state
|
||||||
mov(STATE, Common::X64::ABI_PARAM1);
|
mov(STATE, Common::X64::ABI_PARAM1);
|
||||||
mov(PARAMETERS, qword[Common::X64::ABI_PARAM1 +
|
mov(PARAMETERS, qword[Common::X64::ABI_PARAM1 +
|
||||||
@ -463,7 +463,7 @@ void MacroJITx64Impl::Compile() {
|
|||||||
|
|
||||||
L(end_of_code);
|
L(end_of_code);
|
||||||
|
|
||||||
Common::X64::ABI_PopRegistersAndAdjustStackGPS(*this, Common::X64::ABI_ALL_CALLEE_SAVED, 8);
|
Common::X64::ABI_PopRegistersAndAdjustStack(*this, Common::X64::ABI_ALL_CALLEE_SAVED, 8);
|
||||||
ret();
|
ret();
|
||||||
ready();
|
ready();
|
||||||
program = getCode<ProgramType>();
|
program = getCode<ProgramType>();
|
||||||
|
Loading…
Reference in New Issue
Block a user