diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2020-05-26 22:49:55 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2020-05-26 23:01:52 -0700 |
commit | 61b14bb32b7e62760225cb2207df5fe87e5339ab (patch) | |
tree | bda683372013ccde012809504f02fe90bc42ff5f /mjit_compile.c | |
parent | 4cabd77e337d2f439e4a437f41da9856903adb7e (diff) |
Eliminate a call instruction on JIT cancel path
by calling combined functions specialized for each cancel type.
I'm hoping to improve locality of hot code, but this patch's impact should
be insignificant.
Diffstat (limited to 'mjit_compile.c')
-rw-r--r-- | mjit_compile.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/mjit_compile.c b/mjit_compile.c index 6a17d2408c..fe5c2413e4 100644 --- a/mjit_compile.c +++ b/mjit_compile.c @@ -241,8 +241,7 @@ compile_inlined_cancel_handler(FILE *f, const struct rb_iseq_constant_body *body { fprintf(f, "\ncancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_inlining = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_inlining(original_iseq);\n"); // Swap pc/sp set on cancel with original pc/sp. fprintf(f, " const VALUE *current_pc = reg_cfp->pc;\n"); @@ -282,20 +281,17 @@ compile_cancel_handler(FILE *f, const struct rb_iseq_constant_body *body, struct fprintf(f, "\nsend_cancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_send_inline);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_send_cache = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_send(original_iseq);\n"); fprintf(f, " goto cancel;\n"); fprintf(f, "\nivar_cancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_ivar_inline);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_ivar_cache = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_ivar(original_iseq);\n"); fprintf(f, " goto cancel;\n"); fprintf(f, "\nexivar_cancel:\n"); fprintf(f, " RB_DEBUG_COUNTER_INC(mjit_cancel_exivar_inline);\n"); - fprintf(f, " rb_mjit_iseq_compile_info(original_iseq->body)->disable_exivar_cache = true;\n"); - fprintf(f, " rb_mjit_recompile_iseq(original_iseq);\n"); + fprintf(f, " rb_mjit_recompile_exivar(original_iseq);\n"); fprintf(f, " goto cancel;\n"); fprintf(f, "\ncancel:\n"); |