diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-02-25 00:20:39 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-02-25 00:20:39 +0000 |
commit | 5ac58b272d65cc9921048c076e35df1f42979725 (patch) | |
tree | f3b8f3319c8c2b3b2f12b83c02d81e1b6a7aa373 | |
parent | 2c8cea84cc8daf54622eae6907d869eba6f4c422 (diff) | |
download | ruby-5ac58b272d65cc9921048c076e35df1f42979725.tar.gz |
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
-rw-r--r-- | compile.c | 2 | ||||
-rw-r--r-- | insns.def | 22 |
2 files changed, 22 insertions, 2 deletions
@@ -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) { @@ -625,6 +625,28 @@ swap /** @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<n/2; i++) { + VALUE v0 = sp[i]; + VALUE v1 = TOPN(i); + sp[i] = v1; + TOPN(i) = v0; + } +} + +/** + @c stack @e for stack caching. @j スタックキャッシングの状態を調整するために必要な命令。 */ |