mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 06:41:13 +02:00
Merge from upstream lightening
This commit is contained in:
commit
f0be544463
1 changed files with 12 additions and 5 deletions
|
@ -701,6 +701,7 @@ struct abi_arg_iterator
|
||||||
size_t gpr_idx;
|
size_t gpr_idx;
|
||||||
size_t fpr_idx;
|
size_t fpr_idx;
|
||||||
size_t stack_size;
|
size_t stack_size;
|
||||||
|
size_t stack_padding;
|
||||||
};
|
};
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
|
@ -770,6 +771,7 @@ next_abi_arg(struct abi_arg_iterator *iter, jit_operand_t *arg)
|
||||||
iter->arg_idx++;
|
iter->arg_idx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Precondition: stack is already aligned.
|
||||||
static size_t
|
static size_t
|
||||||
prepare_call_args(jit_state_t *_jit, size_t argc, jit_operand_t args[])
|
prepare_call_args(jit_state_t *_jit, size_t argc, jit_operand_t args[])
|
||||||
{
|
{
|
||||||
|
@ -781,20 +783,25 @@ prepare_call_args(jit_state_t *_jit, size_t argc, jit_operand_t args[])
|
||||||
for (size_t i = 0; i < argc; i++)
|
for (size_t i = 0; i < argc; i++)
|
||||||
next_abi_arg(&iter, &dst[i]);
|
next_abi_arg(&iter, &dst[i]);
|
||||||
|
|
||||||
|
size_t stack_size = iter.stack_size;
|
||||||
|
|
||||||
// Reserve space for spilled arguments, and fix up SP-relative
|
// Reserve space for spilled arguments, and fix up SP-relative
|
||||||
// operands.
|
// operands.
|
||||||
if (iter.stack_size)
|
if (stack_size)
|
||||||
{
|
{
|
||||||
jit_subi(_jit, JIT_SP, JIT_SP, iter.stack_size);
|
// Align stack to 16-byte boundaries on 64-bit targets.
|
||||||
|
if (__WORDSIZE == 64)
|
||||||
|
stack_size = (stack_size + 15) & ~15;
|
||||||
|
jit_subi(_jit, JIT_SP, JIT_SP, stack_size);
|
||||||
for (size_t i = 0; i < argc; i++) {
|
for (size_t i = 0; i < argc; i++) {
|
||||||
switch(args[i].kind) {
|
switch(args[i].kind) {
|
||||||
case JIT_OPERAND_KIND_GPR:
|
case JIT_OPERAND_KIND_GPR:
|
||||||
if (jit_same_gprs (args[i].loc.mem.base, JIT_SP))
|
if (jit_same_gprs (args[i].loc.mem.base, JIT_SP))
|
||||||
args[i].loc.gpr.addend += iter.stack_size;
|
args[i].loc.gpr.addend += stack_size;
|
||||||
break;
|
break;
|
||||||
case JIT_OPERAND_KIND_MEM:
|
case JIT_OPERAND_KIND_MEM:
|
||||||
if (jit_same_gprs (args[i].loc.mem.base, JIT_SP))
|
if (jit_same_gprs (args[i].loc.mem.base, JIT_SP))
|
||||||
args[i].loc.mem.offset += iter.stack_size;
|
args[i].loc.mem.offset += stack_size;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -804,7 +811,7 @@ prepare_call_args(jit_state_t *_jit, size_t argc, jit_operand_t args[])
|
||||||
|
|
||||||
jit_move_operands(_jit, dst, args, argc);
|
jit_move_operands(_jit, dst, args, argc);
|
||||||
|
|
||||||
return iter.stack_size;
|
return stack_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue