mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
fix alignment
This commit is contained in:
parent
d0174d99c6
commit
0fdcdd267f
3 changed files with 7 additions and 9 deletions
|
@ -238,14 +238,12 @@ yjit_save_regs(codeblock_t* cb)
|
||||||
push(cb, REG_CFP);
|
push(cb, REG_CFP);
|
||||||
push(cb, REG_EC);
|
push(cb, REG_EC);
|
||||||
push(cb, REG_SP);
|
push(cb, REG_SP);
|
||||||
push(cb, REG_SP); // Maintain 16-byte RSP alignment
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restore YJIT registers after a C call
|
// Restore YJIT registers after a C call
|
||||||
static void
|
static void
|
||||||
yjit_load_regs(codeblock_t* cb)
|
yjit_load_regs(codeblock_t* cb)
|
||||||
{
|
{
|
||||||
pop(cb, REG_SP); // Maintain 16-byte RSP alignment
|
|
||||||
pop(cb, REG_SP);
|
pop(cb, REG_SP);
|
||||||
pop(cb, REG_EC);
|
pop(cb, REG_EC);
|
||||||
pop(cb, REG_CFP);
|
pop(cb, REG_CFP);
|
||||||
|
@ -2717,11 +2715,9 @@ gen_send_cfunc(jitstate_t *jit, ctx_t *ctx, const struct rb_callinfo *ci, const
|
||||||
// Pop the C function arguments from the stack (in the caller)
|
// Pop the C function arguments from the stack (in the caller)
|
||||||
ctx_stack_pop(ctx, argc + 1);
|
ctx_stack_pop(ctx, argc + 1);
|
||||||
|
|
||||||
if (block) {
|
// Write interpreter SP into CFP.
|
||||||
// Write interpreter SP into CFP.
|
// Needed in case the callee yields to the block.
|
||||||
// Needed in case the callee yields to the block.
|
jit_save_sp(jit, ctx);
|
||||||
jit_save_sp(jit, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save YJIT registers
|
// Save YJIT registers
|
||||||
yjit_save_regs(cb);
|
yjit_save_regs(cb);
|
||||||
|
|
|
@ -675,7 +675,6 @@ uint8_t* get_branch_target(
|
||||||
push(ocb, REG_CFP);
|
push(ocb, REG_CFP);
|
||||||
push(ocb, REG_EC);
|
push(ocb, REG_EC);
|
||||||
push(ocb, REG_SP);
|
push(ocb, REG_SP);
|
||||||
push(ocb, REG_SP);
|
|
||||||
|
|
||||||
// Call branch_stub_hit(branch_idx, target_idx, ec)
|
// Call branch_stub_hit(branch_idx, target_idx, ec)
|
||||||
mov(ocb, C_ARG_REGS[2], REG_EC);
|
mov(ocb, C_ARG_REGS[2], REG_EC);
|
||||||
|
@ -685,7 +684,6 @@ uint8_t* get_branch_target(
|
||||||
|
|
||||||
// Restore the yjit registers
|
// Restore the yjit registers
|
||||||
pop(ocb, REG_SP);
|
pop(ocb, REG_SP);
|
||||||
pop(ocb, REG_SP);
|
|
||||||
pop(ocb, REG_EC);
|
pop(ocb, REG_EC);
|
||||||
pop(ocb, REG_CFP);
|
pop(ocb, REG_CFP);
|
||||||
|
|
||||||
|
|
|
@ -95,9 +95,13 @@ void print_str(codeblock_t* cb, const char* str)
|
||||||
cb_write_byte(cb, (uint8_t)str[i]);
|
cb_write_byte(cb, (uint8_t)str[i]);
|
||||||
cb_write_byte(cb, 0);
|
cb_write_byte(cb, 0);
|
||||||
|
|
||||||
|
push(cb, RSP); // Alignment
|
||||||
|
|
||||||
// Call the print function
|
// Call the print function
|
||||||
mov(cb, RAX, const_ptr_opnd((void*)&print_str_cfun));
|
mov(cb, RAX, const_ptr_opnd((void*)&print_str_cfun));
|
||||||
call(cb, RAX);
|
call(cb, RAX);
|
||||||
|
|
||||||
|
pop(cb, RSP); // Alignment
|
||||||
|
|
||||||
pop_regs(cb);
|
pop_regs(cb);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue