|
|
|
@ -43,12 +43,10 @@ static FrameInfo CalculateFrameInfo(const size_t num_gprs, const size_t num_xmms |
|
|
|
void ABI_PushRegistersAndAdjustStack(BlockOfCode& code, const size_t frame_size, std::bitset<32> const& regs) { |
|
|
|
using namespace Xbyak::util; |
|
|
|
|
|
|
|
const size_t num_gprs = (ABI_ALL_GPRS & regs).count() + 1; |
|
|
|
const size_t num_gprs = (ABI_ALL_GPRS & regs).count(); |
|
|
|
const size_t num_xmms = (ABI_ALL_XMMS & regs).count(); |
|
|
|
const FrameInfo frame_info = CalculateFrameInfo(num_gprs, num_xmms, frame_size); |
|
|
|
|
|
|
|
code.push(rbp); |
|
|
|
code.mov(rbp, rsp); |
|
|
|
for (size_t i = 0; i < regs.size(); ++i) |
|
|
|
if (regs[i] && HostLocIsGPR(HostLoc(i))) |
|
|
|
code.push(HostLocToReg64(HostLoc(i))); |
|
|
|
@ -70,7 +68,7 @@ void ABI_PushRegistersAndAdjustStack(BlockOfCode& code, const size_t frame_size, |
|
|
|
void ABI_PopRegistersAndAdjustStack(BlockOfCode& code, const size_t frame_size, std::bitset<32> const& regs) { |
|
|
|
using namespace Xbyak::util; |
|
|
|
|
|
|
|
const size_t num_gprs = (ABI_ALL_GPRS & regs).count() + 1; |
|
|
|
const size_t num_gprs = (ABI_ALL_GPRS & regs).count(); |
|
|
|
const size_t num_xmms = (ABI_ALL_XMMS & regs).count(); |
|
|
|
const FrameInfo frame_info = CalculateFrameInfo(num_gprs, num_xmms, frame_size); |
|
|
|
|
|
|
|
@ -89,7 +87,6 @@ void ABI_PopRegistersAndAdjustStack(BlockOfCode& code, const size_t frame_size, |
|
|
|
for (int32_t i = regs.size() - 1; i >= 0; --i) |
|
|
|
if (regs[i] && HostLocIsGPR(HostLoc(i))) |
|
|
|
code.pop(HostLocToReg64(HostLoc(i))); |
|
|
|
code.pop(rbp); |
|
|
|
} |
|
|
|
|
|
|
|
void ABI_PushCalleeSaveRegistersAndAdjustStack(BlockOfCode& code, const std::size_t frame_size) { |
|
|
|
|