diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-09-19 17:59:58 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-09-19 17:59:58 +0000 |
commit | d5ec9ec308dccaeea2a723e070a98df4159183de (patch) | |
tree | 465a1a57742997ec96f6b248b24604db92028efe /tool/instruction.rb | |
parent | 19499aaeb12b7ea936c871593bf45d842e3d2970 (diff) |
* 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
Diffstat (limited to 'tool/instruction.rb')
-rwxr-xr-x | tool/instruction.rb | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/tool/instruction.rb b/tool/instruction.rb index 16d97f50dd..4f7d08c369 100755 --- a/tool/instruction.rb +++ b/tool/instruction.rb @@ -715,7 +715,7 @@ class RubyVM # skip make operands when body has no reference to this operand # TODO: really needed? re = /\b#{var}\b/n - if re =~ insn.body or re =~ insn.sp_inc or insn.rets.any?{|t, v| re =~ v} or re =~ 'ic' or re =~ 'ci' + if re =~ insn.body or re =~ insn.sp_inc or insn.rets.any?{|t, v| re =~ v} or re =~ 'ic' or re =~ 'ci' or re =~ 'cc' ops << " #{type} #{var} = (#{type})GET_OPERAND(#{i+1});" end @@ -949,6 +949,8 @@ class RubyVM "TS_IC" when /^CALL_INFO/ "TS_CALLINFO" + when /^CALL_CACHE/ + "TS_CALLCACHE" when /^\.\.\./ "TS_VARIABLE" when /^CDHASH/ @@ -971,6 +973,7 @@ class RubyVM 'TS_GENTRY' => 'G', 'TS_IC' => 'K', 'TS_CALLINFO' => 'C', + 'TS_CALLCACHE' => 'E', 'TS_CDHASH' => 'H', 'TS_ISEQ' => 'S', 'TS_VARIABLE' => '.', |