* src/vm/jit/stack.c (stack_analyse): Store vartop in jitdata.
authoredwin <none@none>
Sat, 28 Oct 2006 16:51:12 +0000 (16:51 +0000)
committeredwin <none@none>
Sat, 28 Oct 2006 16:51:12 +0000 (16:51 +0000)
* src/vm/jit/show.c (show_method): Show number of variables.

* tests/regression/jasmin/test_many_dup2_x2.j: New test.
* tests/regression/jasmin/test_many_dup.j: Likewise.
* tests/regression/jasmin/test_many_dup_x2.j: Likewise.
* tests/regression/jasmin/test_many_swap.j: Likewise.
* tests/regression/jasmin/test_many_dup2.j: Likewise.
* tests/regression/jasmin/test_many_dup2_x1.j: Likewise.
* tests/regression/jasmin/test_many_dup_x1.j: Likewise.

* tests/regression/jasmin/Makefile.am: Added new tests.

src/vm/jit/show.c
src/vm/jit/stack.c
tests/regression/jasmin/Makefile.am
tests/regression/jasmin/test_many_dup.j [new file with mode: 0644]
tests/regression/jasmin/test_many_dup2.j [new file with mode: 0644]
tests/regression/jasmin/test_many_dup2_x1.j [new file with mode: 0644]
tests/regression/jasmin/test_many_dup2_x2.j [new file with mode: 0644]
tests/regression/jasmin/test_many_dup_x1.j [new file with mode: 0644]
tests/regression/jasmin/test_many_dup_x2.j [new file with mode: 0644]
tests/regression/jasmin/test_many_swap.j [new file with mode: 0644]

index b2ebe36865ffbc9403c3c0b000552a36b57f64fe..09b2189fa5c0c19c4830022c8e8c0f6b0667fd78 100644 (file)
@@ -185,6 +185,7 @@ void show_method(jitdata *jd, int stage)
                printf("Stub length:  %d\n", (s4) (code->mcodelength -
                                                                                   ((ptrint) cd->dseglen + lastbptr->mpc)));
        }
+       printf("Variables:    %d (%d used)\n", jd->varcount, jd->vartop);
        printf("Max locals:   %d\n", cd->maxlocals);
        printf("Max stack:    %d\n", cd->maxstack);
        printf("Line number table length: %d\n", m->linenumbercount);
index ac11f7cf83af972a3ee7bf8028eb9d4138b239b0..abdfb00f73a1f3b142c6ed2c466e49ab44d89931 100644 (file)
@@ -30,7 +30,7 @@
             Christian Thalinger
             Christian Ullrich
 
-   $Id: stack.c 5847 2006-10-28 15:21:45Z edwin $
+   $Id: stack.c 5848 2006-10-28 16:51:12Z edwin $
 
 */
 
@@ -4578,6 +4578,10 @@ icmd_BUILTIN:
                }
        }
 
+       /* store number of created variables */
+
+       jd->vartop = sd.vartop;
+
        /* gather statistics *****************************************************/
 
 #if defined(ENABLE_STATISTICS)
index 0a7957daab7f0ff85d5823ac24dceb7447ef7458..f782dc2c15cedf168e16e724d4ce4e0c787411ed 100644 (file)
@@ -53,7 +53,14 @@ JASMIN_TESTS = \
        $(srcdir)/test_load_store_conflict.j \
        $(srcdir)/test_load_store_conflict_via_dup.j \
        $(srcdir)/test_load_store_conflict_via_swap.j \
+       $(srcdir)/test_many_dup.j \
+       $(srcdir)/test_many_dup_x1.j \
+       $(srcdir)/test_many_dup_x2.j \
+       $(srcdir)/test_many_dup2.j \
+       $(srcdir)/test_many_dup2_x1.j \
+       $(srcdir)/test_many_dup2_x2.j \
        $(srcdir)/test_many_monitors.j \
+       $(srcdir)/test_many_swap.j \
        $(srcdir)/test_no_store_load_conflict.j \
        $(srcdir)/test_no_store_store_conflict.j \
        $(srcdir)/test_nullpointerexception_monitorexit.j \
diff --git a/tests/regression/jasmin/test_many_dup.j b/tests/regression/jasmin/test_many_dup.j
new file mode 100644 (file)
index 0000000..cf40682
--- /dev/null
@@ -0,0 +1,130 @@
+.class public test_many_dup
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 31
+       .limit locals 2
+
+       ldc 42
+
+       ; 30 times
+
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+
+       invokestatic test_many_dup/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup/check(I)V
+       ; OUTPUT: 42
+
+       ; pop 28 slots
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop2
+       pop2
+       pop2
+       pop2
+
+       ; Play it again, Sam!
+
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+       dup
+
+       invokestatic test_many_dup/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup/check(I)V
+       ; OUTPUT: 42
+
+       return
+.end method
diff --git a/tests/regression/jasmin/test_many_dup2.j b/tests/regression/jasmin/test_many_dup2.j
new file mode 100644 (file)
index 0000000..ae02d37
--- /dev/null
@@ -0,0 +1,165 @@
+.class public test_many_dup2
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 62
+       .limit locals 2
+
+       ldc 42
+       ldc -1
+
+       ; 30 times
+
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: 42
+
+       ; pop 27 times
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       ; Play it again, Sam!
+
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+       dup2
+
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2/check(I)V
+       ; OUTPUT: 42
+
+       return
+.end method
diff --git a/tests/regression/jasmin/test_many_dup2_x1.j b/tests/regression/jasmin/test_many_dup2_x1.j
new file mode 100644 (file)
index 0000000..2716d74
--- /dev/null
@@ -0,0 +1,165 @@
+.class public test_many_dup2_x1
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 63
+       .limit locals 2
+
+       ldc 100
+       ldc 42
+       ldc -1
+
+       ; 30 times
+
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: 100
+
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: 42
+
+       ; pop 56 slots
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       ; Play it again, Sam!
+
+       ; 42
+       ; -1
+       ldc 100
+
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+       dup2_x1
+
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: 100
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: 100
+       invokestatic test_many_dup2_x1/check(I)V
+       ; OUTPUT: -1
+
+       return
+.end method
diff --git a/tests/regression/jasmin/test_many_dup2_x2.j b/tests/regression/jasmin/test_many_dup2_x2.j
new file mode 100644 (file)
index 0000000..e6ffa80
--- /dev/null
@@ -0,0 +1,169 @@
+.class public test_many_dup2_x2
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 64
+       .limit locals 1
+
+       ldc 100
+       ldc 101
+       ldc 42
+       ldc -1
+
+       ; 30 times
+
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 101
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 100
+
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 42
+
+       ; pop 56 slots
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       ; Play it again, Sam!
+
+       ldc 100
+       ldc 101
+
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+       dup2_x2
+
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 101
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 100
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: -1
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 101
+       invokestatic test_many_dup2_x2/check(I)V
+       ; OUTPUT: 100
+
+       return
+.end method
diff --git a/tests/regression/jasmin/test_many_dup_x1.j b/tests/regression/jasmin/test_many_dup_x1.j
new file mode 100644 (file)
index 0000000..e5cebbe
--- /dev/null
@@ -0,0 +1,145 @@
+.class public test_many_dup_x1
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 32
+       .limit locals 2
+
+       ldc 100
+       ldc 42
+
+       ; 30 times
+
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 100
+
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 42
+
+       ; pop 27 slots
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop
+
+       pop2
+       pop2
+       pop2
+
+       ; Play it again, Sam!
+
+       ; 42
+       ldc 100
+
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+       dup_x1
+
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 100
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 100
+       invokestatic test_many_dup_x1/check(I)V
+       ; OUTPUT: 100
+
+       return
+.end method
diff --git a/tests/regression/jasmin/test_many_dup_x2.j b/tests/regression/jasmin/test_many_dup_x2.j
new file mode 100644 (file)
index 0000000..68cfd81
--- /dev/null
@@ -0,0 +1,150 @@
+.class public test_many_dup_x2
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 33
+       .limit locals 2
+
+       ldc 100
+       ldc 101
+       ldc 42
+
+       ; 30 times
+
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 101
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 100
+
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 42
+
+       ; pop 27 slots
+
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+       pop2
+
+       pop
+       pop2
+       pop2
+       pop2
+
+       ; Play it again, Sam!
+
+       ; 42
+       ldc 100
+       ldc 101
+
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+       dup_x2
+
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 101
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 100
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 42
+
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 101
+       invokestatic test_many_dup_x2/check(I)V
+       ; OUTPUT: 101
+
+       return
+.end method
diff --git a/tests/regression/jasmin/test_many_swap.j b/tests/regression/jasmin/test_many_swap.j
new file mode 100644 (file)
index 0000000..3b65045
--- /dev/null
@@ -0,0 +1,75 @@
+.class public test_many_swap
+.super java/lang/Object
+
+; ======================================================================
+
+.method public <init>()V
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       ldc 42
+       ldc -1
+
+       ; 31 times
+
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+       swap
+
+       swap
+
+       invokestatic test_many_swap/check(I)V
+       ; OUTPUT: 42
+       invokestatic test_many_swap/check(I)V
+       ; OUTPUT: -1
+
+       return
+.end method