diff options
author | Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com> | 2021-02-10 19:56:50 -0500 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:28 -0400 |
commit | a267f45502358114fa37b0390f894eb480624b67 (patch) | |
tree | 0176db0cde911c20c26b1e747a5675891043e1f2 /ujit_codegen.c | |
parent | 75b623776b920b0711c0c458997467d19a32ef8e (diff) | |
download | ruby-a267f45502358114fa37b0390f894eb480624b67.tar.gz |
Remove superfluous instruction in opt_send_without_block
Diffstat (limited to 'ujit_codegen.c')
-rw-r--r-- | ujit_codegen.c | 52 |
1 files changed, 8 insertions, 44 deletions
diff --git a/ujit_codegen.c b/ujit_codegen.c index 33cf1b84d8..14d6b305c1 100644 --- a/ujit_codegen.c +++ b/ujit_codegen.c @@ -1312,15 +1312,6 @@ gen_opt_swb_iseq(jitstate_t* jit, ctx_t* ctx, struct rb_call_data * cd, const rb sub(cb, REG_CFP, imm_opnd(sizeof(rb_control_frame_t))); mov(cb, member_opnd(REG_EC, rb_execution_context_t, cfp), REG_CFP); - - - - - // FIXME - // FIXME: we could use REG_CFP here instead of REG1??? - // FIXME: no need to reload from CFP - - // Setup the new frame // *cfp = (const struct rb_control_frame_struct) { // .pc = pc, @@ -1331,23 +1322,17 @@ gen_opt_swb_iseq(jitstate_t* jit, ctx_t* ctx, struct rb_call_data * cd, const rb // .block_code = 0, // .__bp__ = sp, // }; - mov(cb, REG1, member_opnd(REG_EC, rb_execution_context_t, cfp)); - mov(cb, member_opnd(REG1, rb_control_frame_t, block_code), imm_opnd(0)); - mov(cb, member_opnd(REG1, rb_control_frame_t, sp), REG0); - mov(cb, member_opnd(REG1, rb_control_frame_t, __bp__), REG0); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, block_code), imm_opnd(0)); + 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(REG1, rb_control_frame_t, ep), REG0); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, ep), REG0); mov(cb, REG0, recv); - mov(cb, member_opnd(REG1, rb_control_frame_t, self), REG0); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, self), REG0); mov(cb, REG0, const_ptr_opnd(iseq)); - mov(cb, member_opnd(REG1, rb_control_frame_t, iseq), REG0); + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, iseq), REG0); mov(cb, REG0, const_ptr_opnd(start_pc)); - mov(cb, member_opnd(REG1, rb_control_frame_t, pc), REG0); - - - - - + mov(cb, member_opnd(REG_CFP, rb_control_frame_t, pc), REG0); // Stub so we can return to JITted code blockid_t return_block = { jit->iseq, jit_next_insn_idx(jit) }; @@ -1369,8 +1354,6 @@ gen_opt_swb_iseq(jitstate_t* jit, ctx_t* ctx, struct rb_call_data * cd, const rb gen_return_branch ); - - //print_str(cb, "calling Ruby func:"); //print_str(cb, rb_id2name(vm_ci_mid(cd->ci))); @@ -1472,19 +1455,12 @@ gen_leave(jitstate_t* jit, ctx_t* ctx) // TODO: // RUBY_VM_CHECK_INTS(ec); - - - // FIXME: not needed for interpreter // Load the return value mov(cb, REG0, ctx_stack_pop(ctx, 1)); - - // Load the JIT return address mov(cb, REG1, member_opnd(REG_CFP, rb_control_frame_t, jit_return)); - - // Pop the current frame (ec->cfp++) // Note: the return PC is already in the previous CFP add(cb, REG_CFP, imm_opnd(sizeof(rb_control_frame_t))); @@ -1494,14 +1470,7 @@ gen_leave(jitstate_t* jit, ctx_t* ctx) // The SP points one above the topmost value add(cb, member_opnd(REG_CFP, rb_control_frame_t, sp), imm_opnd(SIZEOF_VALUE)); mov(cb, REG_SP, member_opnd(REG_CFP, rb_control_frame_t, sp)); - mov(cb, mem_opnd(64, REG_SP, -SIZEOF_VALUE), REG0); - - - - - - - + mov(cb, mem_opnd(64, REG_SP, -SIZEOF_VALUE), REG0); // If the return address is NULL, fall back to the interpreter int FALLBACK_LABEL = cb_new_label(cb, "FALLBACK"); @@ -1514,11 +1483,6 @@ gen_leave(jitstate_t* jit, ctx_t* ctx) // Fall back to the interpreter cb_write_label(cb, FALLBACK_LABEL); cb_link_labels(cb); - - - - - cb_write_post_call_bytes(cb); return true; |