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