You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2007/03/23 13:48:55 UTC
svn commit: r521708 - in /harmony/enhanced/drlvm/trunk:
src/test/regression/H1840/ src/test/regression/H3446/ vm/jitrino/src/jet/
Author: varlax
Date: Fri Mar 23 05:48:54 2007
New Revision: 521708
URL: http://svn.apache.org/viewvc?view=rev&rev=521708
Log:
Applied HARMONY-1840, HARMONY-3446 [drlvm][jet] JSR handling fixes
Regression tests added
Added:
harmony/enhanced/drlvm/trunk/src/test/regression/H1840/
harmony/enhanced/drlvm/trunk/src/test/regression/H1840/SimplestTest.j
harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml
harmony/enhanced/drlvm/trunk/src/test/regression/H3446/
harmony/enhanced/drlvm/trunk/src/test/regression/H3446/SubSubTest.j
harmony/enhanced/drlvm/trunk/src/test/regression/H3446/run.test.xml
Modified:
harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H1840/SimplestTest.j
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H1840/SimplestTest.j?view=auto&rev=521708
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H1840/SimplestTest.j (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H1840/SimplestTest.j Fri Mar 23 05:48:54 2007
@@ -0,0 +1,20 @@
+.class public org/apache/harmony/drlvm/tests/regression/h1840/SimplestTest
+.super junit/framework/TestCase
+.method public <init>()V
+ aload_0
+ invokespecial junit/framework/TestCase/<init>()V
+ return
+.end method
+
+;
+; Launches testcases which check subroutine verification.
+;
+.method public test()V
+ .limit stack 1
+ .limit locals 2
+
+ jsr LabelSub
+LabelSub:
+ return
+.end method
+
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml?view=auto&rev=521708
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml Fri Mar 23 05:48:54 2007
@@ -0,0 +1,9 @@
+<project name="RUN HARMONY-1840 Regression Test">
+ <target name="run-test">
+ <run-junit-test
+ test="org.apache.harmony.drlvm.tests.regression.h1840.SimplestTest"
+ vmarg="-Xem:jet -XX:-vm.assert_dialog">
+ </run-junit-test>
+ </target>
+</project>
+
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H3446/SubSubTest.j
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H3446/SubSubTest.j?view=auto&rev=521708
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H3446/SubSubTest.j (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H3446/SubSubTest.j Fri Mar 23 05:48:54 2007
@@ -0,0 +1,28 @@
+.class public org/apache/harmony/drlvm/tests/regression/h3446/SubSubTest
+.super junit/framework/TestCase
+.method public <init>()V
+ aload_0
+ invokespecial junit/framework/TestCase/<init>()V
+ return
+.end method
+
+;
+; Subroutine is called from the other subroutine and
+; from the top level code.
+;
+.method public test()V
+ .limit stack 1
+ .limit locals 2
+
+ jsr LabelSub
+ jsr LabelSubSub
+ return
+LabelSub:
+ astore 1
+ jsr LabelSubSub
+ ret 1
+LabelSubSub:
+ astore 0
+ ret 0
+.end method
+
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H3446/run.test.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H3446/run.test.xml?view=auto&rev=521708
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H3446/run.test.xml (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H3446/run.test.xml Fri Mar 23 05:48:54 2007
@@ -0,0 +1,9 @@
+<project name="RUN HARMONY-3446 Regression Test">
+ <target name="run-test">
+ <run-junit-test
+ test="org.apache.harmony.drlvm.tests.regression.h3446.SubSubTest"
+ vmarg="-Xem:jet -XX:-vm.assert_dialog">
+ </run-junit-test>
+ </target>
+</project>
+
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp?view=diff&rev=521708&r1=521707&r2=521708
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp Fri Mar 23 05:48:54 2007
@@ -874,13 +874,21 @@
if (bbinfo.processed) {
if (bbinfo.jsr_target) {
// we're processing JSR subroutine
- assert(jsr_lead == pc);
- // Simply load the state back to the parent's
- BBState* prevState = m_bbStates[parentPC];
- assert(m_jsrStates.find(jsr_lead) != m_jsrStates.end());
- const BBState* jsrState = m_jsrStates[jsr_lead];
- //prevState.jframe.init(&jsrState.jframe);
- *prevState = *jsrState;
+ if (jsr_lead != NOTHING) {
+ assert(jsr_lead == pc);
+ // Simply load the state back to the parent's
+ BBState* prevState = m_bbStates[parentPC];
+ assert(m_jsrStates.find(jsr_lead) != m_jsrStates.end());
+ const BBState* jsrState = m_jsrStates[jsr_lead];
+ //prevState.jframe.init(&jsrState.jframe);
+ *prevState = *jsrState;
+ }
+ else {
+ // we have a fall through (and not through a JSR) path
+ // to a subroutine
+ // do nothing here - we only need to return the state
+ // back for JSR
+ }
}
return false;
}
@@ -888,15 +896,15 @@
BBState * parentState;
{
const BBInfo& parentBB = m_bbs[parentPC];
- // If we see that parent block was a JSR subroutine, this in fact
- // means that the parent block ended with a JSR call, and then
+ // If we see that parent block was a JSR subroutine, this may mean
+ // that the parent block ended with a JSR call, and then
// 'parentPC' of this block was substituted (see the appropriate
// code in comp_gen_code_bb()).
- // So, in this block we must use the state after the JSR subroutine.
+ // So, in this case we must use the state after the JSR subroutine.
// The 'jsr_lead != parentPC' prevents from taking state from m_jsrStates
// when the parentPC is the real parent, that is in a JSR subroutine
// with several blocks.
- if (parentBB.jsr_target && jsr_lead != parentPC) {
+ if (parentBB.jsr_target && jsr_lead != parentPC && jsr_lead != pc) {
assert(m_jsrStates.find(parentPC) != m_jsrStates.end());
parentState = m_jsrStates[parentPC];
}