From d5ec9ec308dccaeea2a723e070a98df4159183de Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 19 Sep 2015 17:59:58 +0000 Subject: * vm_core.h: split rb_call_info_t into several structs. * rb_call_info (ci) has compiled fixed information. * if ci->flag & VM_CALL_KWARG, then rb_call_info is also rb_call_info_with_kwarg. This technique reduce one word for major rb_call_info data. * rb_calling_info has temporary data (argc, blockptr, recv). for each method dispatch. This data is allocated only on machine stack. * rb_call_cache is for inline method cache. Before this patch, only rb_call_info_t data is passed. After this patch, above three structs are passed. This patch improves: * data locarity (rb_call_info is now read-only data). * reduce memory consumption (rb_call_info_with_kwarg, rb_calling_info). * compile.c: use above data. * insns.def: ditto. * iseq.c: ditto. * vm_args.c: ditto. * vm_eval.c: ditto. * vm_insnhelper.c: ditto. * vm_insnhelper.h: ditto. * iseq.h: add iseq_compile_data::ci_index and iseq_compile_data::ci_kw_indx. * tool/instruction.rb: introduce TS_CALLCACHE operand type. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51903 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- iseq.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'iseq.h') diff --git a/iseq.h b/iseq.h index 9cbfd85cf9..9d544fdbe7 100644 --- a/iseq.h +++ b/iseq.h @@ -20,7 +20,7 @@ typedef struct rb_iseq_struct rb_iseq_t; static inline size_t rb_call_info_kw_arg_bytes(int keyword_len) { - return sizeof(rb_call_info_kw_arg_t) + sizeof(VALUE) * (keyword_len - 1); + return sizeof(struct rb_call_info_kw_arg) + sizeof(VALUE) * (keyword_len - 1); } RUBY_SYMBOL_EXPORT_BEGIN @@ -142,6 +142,8 @@ struct iseq_compile_data { int last_coverable_line; int label_no; int node_level; + unsigned int ci_index; + unsigned int ci_kw_index; const rb_compile_option_t *option; #if SUPPORT_JOKE st_table *labels_table; -- cgit v1.2.3