From f2286925f08406bc857f7b03ad6779a5d61443ae Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Wed, 8 Jan 2020 08:20:36 +0900 Subject: VALUE size packed callinfo (ci). Now, rb_call_info contains how to call the method with tuple of (mid, orig_argc, flags, kwarg). Most of cases, kwarg == NULL and mid+argc+flags only requires 64bits. So this patch packed rb_call_info to VALUE (1 word) on such cases. If we can not represent it in VALUE, then use imemo_callinfo which contains conventional callinfo (rb_callinfo, renamed from rb_call_info). iseq->body->ci_kw_size is removed because all of callinfo is VALUE size (packed ci or a pointer to imemo_callinfo). To access ci information, we need to use these functions: vm_ci_mid(ci), _flag(ci), _argc(ci), _kwarg(ci). struct rb_call_info_kw_arg is renamed to rb_callinfo_kwarg. rb_funcallv_with_cc() and rb_method_basic_definition_p_with_cc() is temporary removed because cd->ci should be marked. --- debug_counter.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'debug_counter.h') diff --git a/debug_counter.h b/debug_counter.h index eb313fc838..19909fbb29 100644 --- a/debug_counter.h +++ b/debug_counter.h @@ -49,6 +49,12 @@ RB_DEBUG_COUNTER(mc_miss_by_visi) RB_DEBUG_COUNTER(mc_miss_spurious) RB_DEBUG_COUNTER(mc_miss_reuse_call) +// callinfo +RB_DEBUG_COUNTER(ci_packed) +RB_DEBUG_COUNTER(ci_kw) +RB_DEBUG_COUNTER(ci_nokw) +RB_DEBUG_COUNTER(ci_runtime) + /* * call cache fastpath usage */ @@ -282,6 +288,7 @@ RB_DEBUG_COUNTER(obj_imemo_throw_data) RB_DEBUG_COUNTER(obj_imemo_ifunc) RB_DEBUG_COUNTER(obj_imemo_memo) RB_DEBUG_COUNTER(obj_imemo_parser_strterm) +RB_DEBUG_COUNTER(obj_imemo_callinfo) /* ar_table */ RB_DEBUG_COUNTER(artable_hint_hit) -- cgit v1.2.3