diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-06 09:16:23 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-06 09:16:23 +0000 |
commit | f1e98086f218f1d5de247f1670f94bfcdff2bf33 (patch) | |
tree | db98343cd55b8a4782f4b5f80b1e376a6a7aa97f | |
parent | 55cfc1e4098cf742758dd6f4d5c96a30b0e187fa (diff) |
* vm_insnhelper.h (CALL_SIMPLE_METHOD_IC): make a macro
invoke simple method with inline cache entry.
* insns.def (opt_length, opt_size): fix to use inline method cache.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24771 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | insns.def | 8 | ||||
-rw-r--r-- | vm_insnhelper.h | 5 |
3 files changed, 16 insertions, 4 deletions
@@ -1,3 +1,10 @@ +Sun Sep 6 18:13:54 2009 Koichi Sasada <ko1@atdot.net> + + * vm_insnhelper.h (CALL_SIMPLE_METHOD_IC): make a macro + invoke simple method with inline cache entry. + + * insns.def (opt_length, opt_size): fix to use inline method cache. + Sun Sep 6 17:47:21 2009 Koichi Sasada <ko1@atdot.net> * template/id.h.tmpl: fix this. @@ -1917,7 +1917,7 @@ opt_aset */ DEFINE_INSN opt_length -() +(IC ic) (VALUE recv) (VALUE val) { @@ -1939,7 +1939,7 @@ opt_length else { INSN_LABEL(normal_dispatch): PUSH(recv); - CALL_SIMPLE_METHOD(0, idLength, recv); + CALL_SIMPLE_METHOD_IC(0, idLength, recv, ic); } } @@ -1950,7 +1950,7 @@ opt_length */ DEFINE_INSN opt_size -() +(IC ic) (VALUE recv) (VALUE val) { @@ -1972,7 +1972,7 @@ opt_size else { INSN_LABEL(normal_dispatch): PUSH(recv); - CALL_SIMPLE_METHOD(0, idSize, recv); + CALL_SIMPLE_METHOD_IC(0, idSize, recv, ic); } } diff --git a/vm_insnhelper.h b/vm_insnhelper.h index bb4cef553b..d4dd5aec4d 100644 --- a/vm_insnhelper.h +++ b/vm_insnhelper.h @@ -189,4 +189,9 @@ extern VALUE ruby_vm_const_missing_count; CALL_METHOD(num, 0, 0, id, rb_method_entry(klass, id), recv); \ } while (0) +#define CALL_SIMPLE_METHOD_IC(num, id, recv, ic) do { \ + VALUE klass = CLASS_OF(recv); \ + CALL_METHOD(num, 0, 0, id, vm_method_search(id, klass, ic), recv); \ +} while (0) + #endif /* RUBY_INSNHELPER_H */ |