summaryrefslogtreecommitdiff
path: root/insns.def
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-21 04:46:51 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-21 04:46:51 +0000
commitaffa7430b70336b53cd496496d889c2544d41322 (patch)
tree5a1ed8dee97b8ee1c9a78aa83abd8f566246f1a3 /insns.def
parent696cbbd7a6c364687522cc41992b0896f3c0507b (diff)
* compile.c, vm_macro.def: support tail call optimization
(on default, this feature is not enabled). * iseq.c, compile.c, vm_opts.h: add "tailcall_optimization" option. * sample/test.rb (test_ok): fix to adjust tailcall stack layout. * insns.def, vm.c, compile.c, yarvcore.c, yarvcore.h: add opt_gt, opt_le instructions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12304 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'insns.def')
-rw-r--r--insns.def70
1 files changed, 70 insertions, 0 deletions
diff --git a/insns.def b/insns.def
index 3631ac4ebd..8272f4aac1 100644
--- a/insns.def
+++ b/insns.def
@@ -2139,6 +2139,76 @@ opt_le
/**
@c optimize
+ @e optimized X>Y.
+ @j 最適化された X>Y。
+ */
+DEFINE_INSN
+opt_gt
+()
+(VALUE recv, VALUE obj)
+(VALUE val)
+{
+ if (FIXNUM_2_P(recv, obj) &&
+ BASIC_OP_UNREDEFINED_P(BOP_GT)) {
+ long a = FIX2LONG(recv), b = FIX2LONG(obj);
+
+ if (a > b) {
+ val = Qtrue;
+ }
+ else {
+ val = Qfalse;
+ }
+ }
+ else {
+ /* other */
+#ifdef YARV_AOT_COMPILED
+ val = rb_funcall(recv, idGT, 1, obj);
+#else
+ PUSH(recv);
+ PUSH(obj);
+ tmp_id = idGT;
+ goto LABEL_IS_SC(start_init_in_send_for_opt_1);
+#endif
+ }
+}
+
+/**
+ @c optimize
+ @e optimized X>=Y.
+ @j 最適化された X>=Y。
+ */
+DEFINE_INSN
+opt_ge
+()
+(VALUE recv, VALUE obj)
+(VALUE val)
+{
+ if (FIXNUM_2_P(recv, obj) &&
+ BASIC_OP_UNREDEFINED_P(BOP_GE)) {
+ long a = FIX2LONG(recv), b = FIX2LONG(obj);
+
+ if (a >= b) {
+ val = Qtrue;
+ }
+ else {
+ val = Qfalse;
+ }
+ }
+ else {
+ /* other */
+#ifdef YARV_AOT_COMPILED
+ val = rb_funcall(recv, idGE, 1, obj);
+#else
+ PUSH(recv);
+ PUSH(obj);
+ tmp_id = idGE;
+ goto LABEL_IS_SC(start_init_in_send_for_opt_1);
+#endif
+ }
+}
+
+/**
+ @c optimize
@e <<
@j <<
*/