x86_64 backend: fix handling large struct function arguments
This commit is contained in:
parent
d504a90555
commit
866af8d21c
1 changed files with 5 additions and 5 deletions
|
|
@ -15,9 +15,9 @@ namespace pslang::jit::linux_x86_64
|
|||
{
|
||||
|
||||
template <typename ... Regs>
|
||||
reg find_free_reg(Regs ... regs)
|
||||
reg find_free_reg(reg start, Regs ... regs)
|
||||
{
|
||||
for (int i = 0; i < 16; ++i)
|
||||
for (int i = (int)start; i < 16; ++i)
|
||||
{
|
||||
if ((true && ... && (regs != reg(i))))
|
||||
return reg(i);
|
||||
|
|
@ -994,7 +994,7 @@ namespace pslang::jit::linux_x86_64
|
|||
reg_src = *src.base;
|
||||
else
|
||||
{
|
||||
reg_src = find_free_reg(dst.base);
|
||||
reg_src = find_free_reg(reg::r10, dst.base);
|
||||
builder.lea_rip_prev(0, reg_src);
|
||||
}
|
||||
|
||||
|
|
@ -1003,13 +1003,13 @@ namespace pslang::jit::linux_x86_64
|
|||
reg_dst = *dst.base;
|
||||
else
|
||||
{
|
||||
reg_dst = find_free_reg(reg_src);
|
||||
reg_dst = find_free_reg(reg::r10, reg_src);
|
||||
builder.lea_rip_prev(storage_size_at_start - (std::int32_t)pcontext.storage.size(), reg_dst);
|
||||
}
|
||||
|
||||
std::int32_t offset = 0;
|
||||
|
||||
auto copy_reg = find_free_reg(reg_src, reg_dst);
|
||||
auto copy_reg = find_free_reg(reg::r10, reg_src, reg_dst);
|
||||
|
||||
while (size > 0)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue