* 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.
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);
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 $
*/
}
}
+ /* store number of created variables */
+
+ jd->vartop = sd.vartop;
+
/* gather statistics *****************************************************/
#if defined(ENABLE_STATISTICS)
$(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 \
--- /dev/null
+.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
--- /dev/null
+.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
--- /dev/null
+.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
--- /dev/null
+.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
--- /dev/null
+.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
--- /dev/null
+.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
--- /dev/null
+.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