diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2021-09-22 16:11:45 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:41 -0400 |
commit | d0a213b30d04372d1a1b5012246ac7da3236db31 (patch) | |
tree | 2ea09e1582feab7ce986745975675b3164e1f119 | |
parent | 0a108601eff5a1e69a4dd5dc170e9eaa807d4788 (diff) |
Remove a memory load in gen_send_iseq
Instead of loading from meory for REG_SP, do a register rename instead.
It's cheaper.
-rw-r--r-- | yjit_codegen.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/yjit_codegen.c b/yjit_codegen.c index ac7f866d9e..e3a23b3bb8 100644 --- a/yjit_codegen.c +++ b/yjit_codegen.c @@ -3477,15 +3477,16 @@ gen_send_iseq(jitstate_t *jit, ctx_t *ctx, const struct rb_callinfo *ci, const r // .block_code = 0, // .__bp__ = sp, // }; - mov(cb, member_opnd(REG_CFP, rb_control_frame_t, block_code), imm_opnd(0)); + mov(cb, REG1, recv); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, self), REG1); + mov(cb, REG_SP, REG0); // Switch to the callee's REG_SP mov(cb, member_opnd(REG_CFP, rb_control_frame_t, sp), REG0); mov(cb, member_opnd(REG_CFP, rb_control_frame_t, __bp__), REG0); sub(cb, REG0, imm_opnd(sizeof(VALUE))); mov(cb, member_opnd(REG_CFP, rb_control_frame_t, ep), REG0); - mov(cb, REG0, recv); - mov(cb, member_opnd(REG_CFP, rb_control_frame_t, self), REG0); jit_mov_gc_ptr(jit, cb, REG0, (VALUE)iseq); mov(cb, member_opnd(REG_CFP, rb_control_frame_t, iseq), REG0); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, block_code), imm_opnd(0)); // No need to set cfp->pc since the callee sets it whenever calling into routines // that could look at it through jit_save_pc(). @@ -3532,9 +3533,6 @@ gen_send_iseq(jitstate_t *jit, ctx_t *ctx, const struct rb_callinfo *ci, const r //print_str(cb, "calling Ruby func:"); //print_str(cb, rb_id2name(vm_ci_mid(ci))); - // Load the updated SP from the CFP - mov(cb, REG_SP, member_opnd(REG_CFP, rb_control_frame_t, sp)); - // Directly jump to the entry point of the callee gen_direct_jump( jit, |