summaryrefslogtreecommitdiff
path: root/insns.def
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-02-25 00:20:39 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-02-25 00:20:39 +0000
commit5ac58b272d65cc9921048c076e35df1f42979725 (patch)
treef3b8f3319c8c2b3b2f12b83c02d81e1b6a7aa373 /insns.def
parent2c8cea84cc8daf54622eae6907d869eba6f4c422 (diff)
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
Diffstat (limited to 'insns.def')
-rw-r--r--insns.def22
1 files changed, 22 insertions, 0 deletions
diff --git a/insns.def b/insns.def
index 81aca8faae..778999d7db 100644
--- a/insns.def
+++ b/insns.def
@@ -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 スタックキャッシングの状態を調整するために必要な命令。
*/