From 4417770ba9a1d48ded255e75c32dcc1005b912c1 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Mon, 15 Jun 2020 18:59:01 +0100 Subject: xbyak_abi: Fix ABI_PushRegistersAndAdjustStack Pushing GPRs twice. --- src/common/x64/xbyak_abi.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'src/common/x64') diff --git a/src/common/x64/xbyak_abi.h b/src/common/x64/xbyak_abi.h index 794da8a52..d15e1aaf0 100644 --- a/src/common/x64/xbyak_abi.h +++ b/src/common/x64/xbyak_abi.h @@ -178,21 +178,17 @@ inline size_t ABI_PushRegistersAndAdjustStack(Xbyak::CodeGenerator& code, std::b 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(i))); } } + if (subtraction != 0) { code.sub(code.rsp, subtraction); } - for (int i = 0; i < regs.count(); i++) { - if (regs.test(i) & ABI_ALL_GPRS.test(i)) { - code.push(IndexToReg64(i)); - } - } - for (std::size_t i = 0; i < regs.size(); ++i) { if (regs[i] && ABI_ALL_XMMS[i]) { code.movaps(code.xword[code.rsp + xmm_offset], IndexToXmm(static_cast(i))); -- cgit v1.2.3