summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-06 09:16:23 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-06 09:16:23 +0000
commitf1e98086f218f1d5de247f1670f94bfcdff2bf33 (patch)
treedb98343cd55b8a4782f4b5f80b1e376a6a7aa97f
parent55cfc1e4098cf742758dd6f4d5c96a30b0e187fa (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--ChangeLog7
-rw-r--r--insns.def8
-rw-r--r--vm_insnhelper.h5
3 files changed, 16 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index d61143c2a6..0ee8c847d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/insns.def b/insns.def
index 7de873d4bf..031e0bcb49 100644
--- a/insns.def
+++ b/insns.def
@@ -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 */