summaryrefslogtreecommitdiff
path: root/mjit_compile.c
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-05-26 22:49:55 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2020-05-26 23:01:52 -0700
commit61b14bb32b7e62760225cb2207df5fe87e5339ab (patch)
treebda683372013ccde012809504f02fe90bc42ff5f /mjit_compile.c
parent4cabd77e337d2f439e4a437f41da9856903adb7e (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.c12
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");