summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2021-07-13 16:04:56 -0700
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:37 -0400
commit0fdcdd267f7c3a482467f60e00049b88da1ae88c (patch)
tree20925cc78e0562d6c5564b37764ae02efd9c5fc6
parentd0174d99c6fcbeae2d5cdaa34908b9ac117bb9c3 (diff)
fix alignment
-rw-r--r--yjit_codegen.c10
-rw-r--r--yjit_core.c2
-rw-r--r--yjit_utils.c4
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);
}