diff options
-rw-r--r-- | yjit_codegen.c | 10 | ||||
-rw-r--r-- | yjit_core.c | 2 | ||||
-rw-r--r-- | yjit_utils.c | 4 |
3 files changed, 7 insertions, 9 deletions
diff --git a/yjit_codegen.c b/yjit_codegen.c index 25d265432d..0ee795129a 100644 --- a/yjit_codegen.c +++ b/yjit_codegen.c @@ -238,14 +238,12 @@ yjit_save_regs(codeblock_t* cb) push(cb, REG_CFP); push(cb, REG_EC); push(cb, REG_SP); - push(cb, REG_SP); // Maintain 16-byte RSP alignment } // Restore YJIT registers after a C call static void yjit_load_regs(codeblock_t* cb) { - pop(cb, REG_SP); // Maintain 16-byte RSP alignment pop(cb, REG_SP); pop(cb, REG_EC); 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) ctx_stack_pop(ctx, argc + 1); - if (block) { - // Write interpreter SP into CFP. - // Needed in case the callee yields to the block. - jit_save_sp(jit, ctx); - } + // Write interpreter SP into CFP. + // Needed in case the callee yields to the block. + jit_save_sp(jit, ctx); // Save YJIT registers yjit_save_regs(cb); diff --git a/yjit_core.c b/yjit_core.c index ae771fb7c4..22527e24a6 100644 --- a/yjit_core.c +++ b/yjit_core.c @@ -675,7 +675,6 @@ uint8_t* get_branch_target( push(ocb, REG_CFP); push(ocb, REG_EC); push(ocb, REG_SP); - push(ocb, REG_SP); // Call branch_stub_hit(branch_idx, target_idx, ec) mov(ocb, C_ARG_REGS[2], REG_EC); @@ -685,7 +684,6 @@ uint8_t* get_branch_target( // Restore the yjit registers pop(ocb, REG_SP); - pop(ocb, REG_SP); pop(ocb, REG_EC); pop(ocb, REG_CFP); diff --git a/yjit_utils.c b/yjit_utils.c index 02e5dbb3b0..4e764f0aea 100644 --- a/yjit_utils.c +++ b/yjit_utils.c @@ -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, 0); + push(cb, RSP); // Alignment + // Call the print function mov(cb, RAX, const_ptr_opnd((void*)&print_str_cfun)); call(cb, RAX); + pop(cb, RSP); // Alignment + pop_regs(cb); } |