aboutsummaryrefslogtreecommitdiffstats
path: root/insns.def
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2022-07-20 12:24:50 -0700
committerJeremy Evans <code@jeremyevans.net>2022-08-09 22:19:46 -0700
commitd9167491db220756df159048348f006619df28c1 (patch)
tree5618740621c7b95fc95cd582baa9f2543ea6764e /insns.def
parent9f8abd28babf1ab84093fe0cc97f8d42cf62286c (diff)
downloadruby-d9167491db220756df159048348f006619df28c1.tar.gz
Revert "Remove reverse VM instruction"
This reverts commit 5512353d97250e85c13bf10b9b32e750478cf474.
Diffstat (limited to 'insns.def')
-rw-r--r--insns.def19
1 files changed, 19 insertions, 0 deletions
diff --git a/insns.def b/insns.def
index 06ca31a850..ebdbed6237 100644
--- a/insns.def
+++ b/insns.def
@@ -597,6 +597,25 @@ swap
/* none */
}
+/* reverse stack top N order. */
+DEFINE_INSN
+reverse
+(rb_num_t n)
+(...)
+(...)
+// attr rb_snum_t sp_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;
+ }
+}
+
/* for stack caching. */
DEFINE_INSN_IF(STACK_CACHING)
reput