From 5ac58b272d65cc9921048c076e35df1f42979725 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 25 Feb 2015 00:20:39 +0000 Subject: insns.def: reverse * insns.def (reverse): add new instruction for massign. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 2 -- insns.def | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/compile.c b/compile.c index ed003772fc..deb403f579 100644 --- a/compile.c +++ b/compile.c @@ -2822,7 +2822,6 @@ compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int poped) ADD_INSN(ret, nd_line(node), swap); expand = 0; } -#if 0 else if (llen > 2 && llen != rlen) { POP_ELEMENT(ret); adjust_stack(iseq, ret, nd_line(node), rlen, llen); @@ -2833,7 +2832,6 @@ compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int poped) last->insn_id = BIN(reverse); expand = 0; } -#endif } } if (expand) { diff --git a/insns.def b/insns.def index 81aca8faae..778999d7db 100644 --- a/insns.def +++ b/insns.def @@ -623,6 +623,28 @@ swap /* none */ } +/** + @c stack + @e reverse stack top N order. + @j スタックトップの n 個の値を逆転する。 + */ +DEFINE_INSN +reverse +(rb_num_t n) +(...) +(...) // inc += 0; +{ + rb_num_t i; + VALUE *sp = STACK_ADDR_FROM_TOP(n); + + for (i=0; i