Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 Makefile                 |    1 +
 regression/jvm/DupTest.j |  294 ++++++++++++++++++++++++++++++++++++++++++++++
 regression/run-suite.sh  |    1 +
 3 files changed, 296 insertions(+), 0 deletions(-)
 create mode 100644 regression/jvm/DupTest.j

diff --git a/Makefile b/Makefile
index a780027..8c82522 100644
--- a/Makefile
+++ b/Makefile
@@ -264,6 +264,7 @@ REGRESSION_TEST_SUITE_CLASSES = \
        regression/jvm/TrampolineBackpatchingTest.class
 
 JASMIN_REGRESSION_TEST_SUITE_CLASSES = \
+       regression/jvm/DupTest.class \
        regression/jvm/SubroutineTest.class \
        regression/jvm/WideTest.class
 
diff --git a/regression/jvm/DupTest.j b/regression/jvm/DupTest.j
new file mode 100644
index 0000000..e0bcdc4
--- /dev/null
+++ b/regression/jvm/DupTest.j
@@ -0,0 +1,294 @@
+.class public jvm/DupTest
+.super jvm/TestCase
+
+.field public static counter int
+
+.method public static advanceCounter()I
+    getstatic jvm/DupTest/counter int
+    iconst_1
+    iadd
+    putstatic jvm/DupTest/counter int
+
+    ; we don't want to use 'dup' here because we shouldn't
+    ; assume that dup works.
+    getstatic jvm/DupTest/counter int
+    ireturn
+.end method
+
+; Test 'dup' instruction
+.method public static testDup()V
+    .limit locals 3
+
+    iconst_0
+    putstatic jvm/DupTest/counter int
+
+    invokestatic jvm/DupTest/advanceCounter()I
+    dup
+
+    iconst_1
+    iadd
+    istore_1
+
+    iconst_2
+    iadd
+    istore_2
+
+    iload_1
+    iconst_2
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_2
+    iconst_3
+    invokestatic jvm/TestCase/assertEquals(II)V
+.end method
+
+; Test 'dup_x1' instruction
+.method public static testDup_x1()V
+    .limit locals 4
+
+    iconst_0
+    putstatic jvm/DupTest/counter int
+
+    iconst_1
+    invokestatic jvm/DupTest/advanceCounter()I
+    dup_x1
+
+    iconst_1
+    iadd
+    istore_1
+
+    iconst_2
+    iadd
+    istore_2
+
+    iconst_1
+    iadd
+    istore_3
+
+    iload_1
+    iconst_2
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_2
+    iconst_3
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_3
+    iconst_2
+    invokestatic jvm/TestCase/assertEquals(II)V
+.end method
+
+; Test 'dup_x2' instruction
+.method public static testDup_x2()V
+    .limit locals 5
+
+    iconst_0
+    putstatic jvm/DupTest/counter int
+
+    iconst_3
+    iconst_2
+    invokestatic jvm/DupTest/advanceCounter()I
+    dup_x2
+
+    iconst_1
+    iadd
+    istore_1
+
+    iconst_2
+    iadd
+    istore_2
+
+    iconst_3
+    iadd
+    istore_3
+
+    iconst_4
+    iadd
+    istore 4
+
+    iload_1
+    iconst_2
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_2
+    iconst_4
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_3
+    bipush 6
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload 4
+    iconst_5
+    invokestatic jvm/TestCase/assertEquals(II)V
+.end method
+
+; Test 'dup2' instruction
+.method public static testDup2()V
+    .limit locals 5
+
+    iconst_0
+    putstatic jvm/DupTest/counter int
+
+    iconst_2
+    invokestatic jvm/DupTest/advanceCounter()I
+    dup2
+
+    iconst_1
+    iadd
+    istore_1
+
+    iconst_2
+    iadd
+    istore_2
+
+    iconst_3
+    iadd
+    istore_3
+
+    iconst_4
+    iadd
+    istore 4
+
+    iload_1
+    iconst_2
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_2
+    iconst_4
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_3
+    iconst_4
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload 4
+    bipush 6
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+.end method
+
+; Test 'dup2_x1' instruction
+.method public static testDup2_x1()V
+    .limit locals 6
+
+    iconst_0
+    putstatic jvm/DupTest/counter int
+
+    iconst_3
+    iconst_2
+    invokestatic jvm/DupTest/advanceCounter()I
+    dup2_x1
+
+    iconst_1
+    iadd
+    istore_1
+
+    iconst_2
+    iadd
+    istore_2
+
+    iconst_3
+    iadd
+    istore_3
+
+    iconst_4
+    iadd
+    istore 4
+
+    iconst_5
+    iadd
+    istore 5
+
+    iload_1
+    iconst_2
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_2
+    iconst_4
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_3
+    bipush 6
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload 4
+    bipush 5
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload 5
+    bipush 7
+    invokestatic jvm/TestCase/assertEquals(II)V
+.end method
+
+; Test 'dup2_x2' instruction
+.method public static testDup2_x2()V
+    .limit locals 7
+
+    iconst_0
+    putstatic jvm/DupTest/counter int
+
+    iconst_4
+    iconst_3
+    iconst_2
+    invokestatic jvm/DupTest/advanceCounter()I
+    dup2_x2
+
+    iconst_1
+    iadd
+    istore_1
+
+    iconst_2
+    iadd
+    istore_2
+
+    iconst_3
+    iadd
+    istore_3
+
+    iconst_4
+    iadd
+    istore 4
+
+    iconst_5
+    iadd
+    istore 5
+
+    bipush 6
+    iadd
+    istore 6
+
+    iload_1
+    iconst_2
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_2
+    iconst_4
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload_3
+    bipush 6
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload 4
+    bipush 8
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload 5
+    bipush 6
+    invokestatic jvm/TestCase/assertEquals(II)V
+
+    iload 6
+    bipush 8
+    invokestatic jvm/TestCase/assertEquals(II)V
+.end method
+
+.method public static main([Ljava/lang/String;)V
+    invokestatic jvm/DupTest/testDup()V
+    invokestatic jvm/DupTest/testDup_x1()V
+    invokestatic jvm/DupTest/testDup_x2()V
+    invokestatic jvm/DupTest/testDup2()V
+    invokestatic jvm/DupTest/testDup2_x1()V
+    invokestatic jvm/DupTest/testDup2_x2()V
+    return
+.end method
diff --git a/regression/run-suite.sh b/regression/run-suite.sh
index 15bd92a..9474ce4 100755
--- a/regression/run-suite.sh
+++ b/regression/run-suite.sh
@@ -52,6 +52,7 @@ if [ -z "$CLASS_LIST" ]; then
     run_java jvm.CloneTest 0
     run_java jvm.ControlTransferTest 0
     run_java jvm.ConversionTest 0
+    run_java jvm.DupTest 0
     run_java jvm.ExceptionsTest 0
     run_java jvm.ExitStatusIsOneTest 1
     run_java jvm.ExitStatusIsZeroTest 0
-- 
1.6.0.6


------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to