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/02/13 12:10:55 UTC

svn commit: r506971 - in /harmony/enhanced/drlvm/trunk: build/make/ build/make/components/vm/ vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/ vm/gc_cc/src/ vm/gc_gen/javasrc/org/apache/harmony/drlvm/gc_gen/ vm/gc_gen/src/common/ vm/include/ vm/include...

Author: varlax
Date: Tue Feb 13 03:10:35 2007
New Revision: 506971

URL: http://svn.apache.org/viewvc?view=rev&rev=506971
Log:
Applied HARMONY-3126 [drlvm] VMMagic: migration to new interfaces
Tested on SUSE10@ia32.

Added:
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.cpp   (with props)
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.h   (with props)
Modified:
    harmony/enhanced/drlvm/trunk/build/make/build.xml
    harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_cc.xml
    harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_gen.xml
    harmony/enhanced/drlvm/trunk/build/make/components/vm/hythr.xml
    harmony/enhanced/drlvm/trunk/build/make/components/vm/kernel_classes.xml
    harmony/enhanced/drlvm/trunk/build/make/lnx.properties
    harmony/enhanced/drlvm/trunk/build/make/setup.xml
    harmony/enhanced/drlvm/trunk/build/make/win.properties
    harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java
    harmony/enhanced/drlvm/trunk/vm/gc_cc/src/prepare.cpp
    harmony/enhanced/drlvm/trunk/vm/gc_gen/javasrc/org/apache/harmony/drlvm/gc_gen/GCHelper.java
    harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_class.cpp
    harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h
    harmony/enhanced/drlvm/trunk/vm/include/open/vm.h
    harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/dynopt/StaticProfiler.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/VMInterface.h
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.h
    harmony/enhanced/drlvm/trunk/vm/thread/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java
    harmony/enhanced/drlvm/trunk/vm/vmcore/include/class_member.h
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class_File_Loader.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Prepare.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/gc/root_set_enum_common.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_trace.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelperFastPath.java

Modified: harmony/enhanced/drlvm/trunk/build/make/build.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/build.xml?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/build.xml (original)
+++ harmony/enhanced/drlvm/trunk/build/make/build.xml Tue Feb 13 03:10:35 2007
@@ -480,7 +480,7 @@
                                            deploy.getting_started,
                                            deploy.copy_classlib,
                                            deploy.antlr,
-                                           deploy.mmtk,
+                                           deploy.vmmagic,
                                            deploy.tweakname">
         
         <!-- copy our hythr for the launcher to use -->
@@ -572,18 +572,18 @@
         </if> 
     </target>
 
-    <target name="deploy.mmtk">
+    <target name="deploy.vmmagic">
         <copy todir="${build.deploy.dir}/jdk/jre/lib/boot">
-            <fileset dir="${build.MMTK.home}">
-                <include name="mmtk-20061012.jar" />
+            <fileset dir="${build.VMMAGIC.home}">
+                <include name="vmmagic-20070207.jar" />
             </fileset>
         </copy>
         <loadfile srcFile="${build.deploy.dir}/jdk/jre/lib/boot/bootclasspath.properties" property="boot.jars.list" />
-        <if> <not><contains string="${boot.jars.list}" substring="=mmtk-20061012.jar"/></not>
+        <if> <not><contains string="${boot.jars.list}" substring="=vmmagic-20070207.jar"/></not>
         <then>
 <concat append="true" destfile="${build.deploy.dir}/jdk/jre/lib/boot/bootclasspath.properties">
-# Dependency for unboxed mmtk package
-bootclasspath.100=mmtk-20061012.jar
+# Dependency for vmmagic package
+bootclasspath.100=vmmagic-20070207.jar
 </concat>
 <fixcrlf srcdir="${build.deploy.dir}/jdk/jre/lib/boot" includes="bootclasspath.properties"/>
         </then>

Modified: harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_cc.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_cc.xml?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_cc.xml (original)
+++ harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_cc.xml Tue Feb 13 03:10:35 2007
@@ -106,7 +106,7 @@
 
             <fileset dir="${external.dep.CLASSLIB.jardir}" includes="*.jar" />
             <pathelement location="${vm.kernel_classes.jardir}/kernel.jar"/>
-            <fileset dir="${build.MMTK.home}" includes="mmtk-20061012.jar" />
+            <fileset dir="${build.VMMAGIC.home}" includes="vmmagic-20070207.jar" />
         </path>
 
         <property name="jarname" value="gc_cc.jar"/>

Modified: harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_gen.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_gen.xml?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_gen.xml (original)
+++ harmony/enhanced/drlvm/trunk/build/make/components/vm/gc_gen.xml Tue Feb 13 03:10:35 2007
@@ -130,7 +130,7 @@
 
             <fileset dir="${external.dep.CLASSLIB.jardir}" includes="*.jar" />
             <pathelement location="${vm.kernel_classes.jardir}/kernel.jar"/>
-            <fileset dir="${build.MMTK.home}" includes="mmtk-20061012.jar" />
+            <fileset dir="${build.VMMAGIC.home}" includes="vmmagic-20070207.jar" />
         </path>
 
         <property name="jarname" value="gc_gen.jar"/>

Modified: harmony/enhanced/drlvm/trunk/build/make/components/vm/hythr.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/components/vm/hythr.xml?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/components/vm/hythr.xml (original)
+++ harmony/enhanced/drlvm/trunk/build/make/components/vm/hythr.xml Tue Feb 13 03:10:35 2007
@@ -117,7 +117,7 @@
 
             <fileset dir="${external.dep.CLASSLIB.jardir}" includes="*.jar" />
             <pathelement location="${vm.kernel_classes.jardir}/kernel.jar"/>
-            <fileset dir="${build.MMTK.home}" includes="mmtk-20061012.jar" />
+            <fileset dir="${build.VMMAGIC.home}" includes="vmmagic-20070207.jar" />
         </path>
 
         <property name="jarname" value="hythr.jar"/>

Modified: harmony/enhanced/drlvm/trunk/build/make/components/vm/kernel_classes.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/components/vm/kernel_classes.xml?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/components/vm/kernel_classes.xml (original)
+++ harmony/enhanced/drlvm/trunk/build/make/components/vm/kernel_classes.xml Tue Feb 13 03:10:35 2007
@@ -42,7 +42,7 @@
 
             <fileset dir="${external.dep.CLASSLIB.jardir}" includes="*.jar" />
             <fileset dir="${build.ANTLR.home}" includes="antlr-2.7.5.jar" />
-            <fileset dir="${build.MMTK.home}" includes="mmtk-20061012.jar" />
+            <fileset dir="${build.VMMAGIC.home}" includes="vmmagic-20070207.jar" />
         </path>
 
         <!-- compile time debug information - true by default for kernel classes -->

Modified: harmony/enhanced/drlvm/trunk/build/make/lnx.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/lnx.properties?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/lnx.properties (original)
+++ harmony/enhanced/drlvm/trunk/build/make/lnx.properties Tue Feb 13 03:10:35 2007
@@ -76,8 +76,8 @@
 remote.ANTLR.archive.type=asis
 
 # org.vmmagic unboxed package. Used to enable address arithmetic in Java
-remote.MMTK.archive=http://cs.anu.edu.au/people/Robin.Garner/mmtk-20061012.jar
-remote.MMTK.archive.type=asis
+remote.VMMAGIC.archive=http://cs.anu.edu.au/people/Robin.Garner/vmmagic-20070207.jar
+remote.VMMAGIC.archive.type=asis
 
 # Xalan-Java version 2.7.0
 XALAN_HOME=${external.dep.CLASSLIB}/depends/jars/xalan-j_2.7.0

Modified: harmony/enhanced/drlvm/trunk/build/make/setup.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/setup.xml?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/setup.xml (original)
+++ harmony/enhanced/drlvm/trunk/build/make/setup.xml Tue Feb 13 03:10:35 2007
@@ -106,7 +106,7 @@
         <property name="XALAN.check.file" value="xalan.jar" />
         <property name="VM.check.file" value="vmcore/src/init/vm_init.cpp" />
         <property name="ANTLR.check.file" value="antlr-2.7.5.jar" />
-        <property name="MMTK.check.file" value="mmtk-20061012.jar" />
+        <property name="VMMAGIC.check.file" value="vmmagic-20070207.jar" />
         <property name="PATCHES.check.file" value="README.txt" />
     </target>
 
@@ -181,7 +181,7 @@
 
 
     <target name="setup.resources" depends="plugin.antcontrib">
-        <property name="common.resources" value="LOG4CXX,CPPTASKS,XALAN,VM,ANTLR,PATCHES,JASMIN,MMTK" />
+        <property name="common.resources" value="LOG4CXX,CPPTASKS,XALAN,VM,ANTLR,PATCHES,JASMIN,VMMAGIC" />
         <property name="build.resources" value="CPPTASKS" />
         <if>
             <isset property="if.lnx" />

Modified: harmony/enhanced/drlvm/trunk/build/make/win.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/build/make/win.properties?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/build/make/win.properties (original)
+++ harmony/enhanced/drlvm/trunk/build/make/win.properties Tue Feb 13 03:10:35 2007
@@ -75,8 +75,8 @@
 remote.ANTLR.archive.type=asis
 
 # org.vmmagic unboxed package. Used to enable address arithmetic in Java
-remote.MMTK.archive=http://cs.anu.edu.au/people/Robin.Garner/mmtk-20061012.jar
-remote.MMTK.archive.type=asis
+remote.VMMAGIC.archive=http://cs.anu.edu.au/people/Robin.Garner/vmmagic-20070207.jar
+remote.VMMAGIC.archive.type=asis
 
 # Xalan-Java version 2.7.0
 XALAN_HOME=${external.dep.CLASSLIB}/depends/jars/xalan-j_2.7.0

Modified: harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java Tue Feb 13 03:10:35 2007
@@ -36,7 +36,8 @@
     private static final int GC_OBJECT_ALIGNMENT = 4; //TODO: EM64 or IPF could have 8!
 
 
-    public static Address alloc(int objSize, int allocationHandle) throws InlinePragma {
+    @Inline
+    public static Address alloc(int objSize, int allocationHandle) {
         Address tlsAddr = VMHelper.getTlsBaseAddress();
 
         Address tlsFreeFieldAddr = tlsAddr.plus(TLS_CURRENT_OFFSET);
@@ -57,17 +58,18 @@
     }
 
 
-   public static Address allocArray(int arrayLen, int elemSize, int allocationHandle)  throws InlinePragma {
+    @Inline   
+    public static Address allocArray(int arrayLen, int elemSize, int allocationHandle) {
         if (arrayLen >= 0) {
             int firstElementOffset = ARRAY_LEN_OFFSET + (elemSize==8?8:4);
             int size = firstElementOffset + elemSize*arrayLen;
             size = (((size + (GC_OBJECT_ALIGNMENT - 1)) & (~(GC_OBJECT_ALIGNMENT - 1))));
 
             Address arrayAddress = alloc(size, allocationHandle); //never null!
-            arrayAddress.store(arrayLen, Offset.fromInt(ARRAY_LEN_OFFSET));
+            arrayAddress.store(arrayLen, Offset.fromIntZeroExtend(ARRAY_LEN_OFFSET));
             return arrayAddress;
         }
-        return VMHelper.newVectorUsingAllocHandle(arrayLen, elemSize, allocationHandle);
+        return VMHelper.newVectorUsingAllocHandle(arrayLen, allocationHandle);
     }
 
 

Modified: harmony/enhanced/drlvm/trunk/vm/gc_cc/src/prepare.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_cc/src/prepare.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_cc/src/prepare.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_cc/src/prepare.cpp Tue Feb 13 03:10:35 2007
@@ -64,7 +64,7 @@
     unsigned idx;
     for(idx = 0; idx < num_fields; idx++) {
         Field_Handle fh = class_get_instance_field_recursive(ch, idx);
-        if(field_is_reference(fh)) {
+        if(field_is_gc_enumerable(fh)) {
             num_ref_fields++;
         }
     }
@@ -93,7 +93,7 @@
 
     for(idx = 0; idx < num_fields; idx++) {
         Field_Handle fh = class_get_instance_field_recursive(ch, idx);
-        if(field_is_reference(fh)) {
+        if(field_is_gc_enumerable(fh)) {
             int offset = field_get_offset(fh);
             if (offset == skip) continue;
             *refs = offset;

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/javasrc/org/apache/harmony/drlvm/gc_gen/GCHelper.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/javasrc/org/apache/harmony/drlvm/gc_gen/GCHelper.java?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/javasrc/org/apache/harmony/drlvm/gc_gen/GCHelper.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/javasrc/org/apache/harmony/drlvm/gc_gen/GCHelper.java Tue Feb 13 03:10:35 2007
@@ -33,7 +33,8 @@
 
     public static final int TLS_GC_OFFSET = TLSGCOffset();
 
-    public static Address alloc(int objSize, int allocationHandle)  throws InlinePragma {
+    @Inline
+    public static Address alloc(int objSize, int allocationHandle) {
         Address TLS_BASE = VMHelper.getTlsBaseAddress();
 
         Address allocator_addr = TLS_BASE.plus(TLS_GC_OFFSET);
@@ -56,17 +57,18 @@
     private static final int ARRAY_LEN_OFFSET = 8;
     private static final int GC_OBJECT_ALIGNMENT = 4; //TODO: EM64 or IPF could have 8!
 
-    public static Address allocArray(int arrayLen, int elemSize, int allocationHandle)  throws InlinePragma {
+    @Inline
+    public static Address allocArray(int arrayLen, int elemSize, int allocationHandle) {
         if (arrayLen >= 0) {
             int firstElementOffset = ARRAY_LEN_OFFSET + (elemSize==8?8:4);
             int size = firstElementOffset + elemSize*arrayLen;
             size = (((size + (GC_OBJECT_ALIGNMENT - 1)) & (~(GC_OBJECT_ALIGNMENT - 1))));
 
             Address arrayAddress = alloc(size, allocationHandle); //never null!
-            arrayAddress.store(arrayLen, Offset.fromInt(ARRAY_LEN_OFFSET));
+            arrayAddress.store(arrayLen, Offset.fromIntZeroExtend(ARRAY_LEN_OFFSET));
             return arrayAddress;
         }
-        return VMHelper.newVectorUsingAllocHandle(arrayLen, elemSize, allocationHandle);
+        return VMHelper.newVectorUsingAllocHandle(arrayLen, allocationHandle);
     }
 
     /** NOS (nursery object space) is higher in address than other spaces.
@@ -77,7 +79,8 @@
     public static Address NOS_BOUNDARY = getNosBoundary();
     public static boolean GEN_MODE = getGenMode();
 
-    public static void write_barrier_slot_rem(Address p_objBase, Address p_objSlot, Address p_target)  throws InlinePragma {
+    @Inline
+    public static void write_barrier_slot_rem(Address p_objBase, Address p_objSlot, Address p_target) {
       
        /* If the slot is in NOS or the target is not in NOS, we simply return*/
         if(p_objSlot.GE(NOS_BOUNDARY) || p_target.LT(NOS_BOUNDARY) || !GEN_MODE) {

Modified: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_class.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_class.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_class.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_class.cpp Tue Feb 13 03:10:35 2007
@@ -70,7 +70,7 @@
   unsigned idx;
   for(idx = 0; idx < num_fields; idx++) {
     Field_Handle fh = class_get_instance_field_recursive(ch, idx);
-    if(field_is_reference(fh)) {
+    if(field_is_gc_enumerable(fh)) {
       num_ref_fields++;
     }
   }
@@ -102,7 +102,7 @@
   int *result = new_ref_array;
   for(unsigned int idx = 0; idx < num_fields; idx++) {
     Field_Handle fh = class_get_instance_field_recursive(ch, idx);
-    if(field_is_reference(fh)) {
+    if(field_is_gc_enumerable(fh)) {
       int offset = field_get_offset(fh);
 #ifndef BUILD_IN_REFERENT
       if(is_reference && offset == gc_referent_offset) continue;

Modified: harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h Tue Feb 13 03:10:35 2007
@@ -196,6 +196,7 @@
                                             Method_Handle caller,
                                             Method_Handle callee);
 
+VMEXPORT Boolean method_has_annotation(Method_Handle target, Class_Handle antn_type);
 
 //
 // Class

Modified: harmony/enhanced/drlvm/trunk/vm/include/open/vm.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/open/vm.h?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/open/vm.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/open/vm.h Tue Feb 13 03:10:35 2007
@@ -431,13 +431,13 @@
  VMEXPORT Class_Handle field_get_class(Field_Handle fh);
 
 /**
- * @return <code>TRUE</code> if the field is of a reference type.
+ * @return <code>TRUE</code> if the field must be enumerated by GC
  *
  * This function doesn't cause resolution of the class of the field.
  */
- VMEXPORT Boolean field_is_reference(Field_Handle fh);
+ VMEXPORT Boolean field_is_gc_enumerable(Field_Handle fh);
 
-/**
+ /**
  * @return <code>TRUE</code> if the field is literal. In Java, it means that the
  *          field had the ConstantValue attribute set (JVMS2, Section  4.7.2).
  */

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf Tue Feb 13 03:10:35 2007
@@ -148,4 +148,6 @@
 -XDvm.component.classpath.hythr=hythr.jar
 
 #VM helpers
--Dvm.components.vmcore.startupclass=org.apache.harmony.drlvm.VMHelperFastPath
+-Dvm.components.vmcore1.startupclass=org.apache.harmony.drlvm.VMHelper
+-Dvm.components.vmcore2.startupclass=org.apache.harmony.drlvm.VMHelperFastPath
+

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/dynopt/StaticProfiler.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/dynopt/StaticProfiler.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/dynopt/StaticProfiler.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/dynopt/StaticProfiler.cpp Tue Feb 13 03:10:35 2007
@@ -32,6 +32,8 @@
 
 /** see article:  "Static Branch Frequency and Program Profile Analysis / Wu, Laurus, IEEE/ACM 1994" */
 
+//TODO: avoid using postdom information. A lot of exceptions-paths make it useless.
+
 namespace Jitrino{
 
 DEFINE_SESSION_ACTION(StaticProfilerPass, statprof, "Perform edge annotation pass based on static heuristics");
@@ -188,20 +190,20 @@
 
 /** looks for unconditional path to inner loop header.
  */
-static bool hasUncondPathToInnerLoopHeader(Node* parentLoopHeader, LoopTree* loopTree,  Edge* edge) {
+static Node* findLoopHeaderOnUncondPath(Node* parentLoopHeader, LoopTree* loopTree,  Edge* edge) {
     Node* node = edge->getTargetNode();
     if (!node->isBlockNode() || node == parentLoopHeader) {
-        return false;
+        return NULL;
     }
 
     if (loopTree->isLoopHeader(node)) {
-        return true;
+        return node;
     }
     Edge* uncondEdge = node->getUnconditionalEdge();
     if (uncondEdge==NULL) {
-        return false;
+        return NULL;
     }
-    return hasUncondPathToInnerLoopHeader(parentLoopHeader, loopTree, uncondEdge);
+    return findLoopHeaderOnUncondPath(parentLoopHeader, loopTree, uncondEdge);
 }
 
 /** returns TRUE if
@@ -458,22 +460,25 @@
 
 
 /**  Loop header heuristic (LHH)
- *   Predict a successor that is a loop header or loop pre-header
- *   and does not post-dominate will be taken
+ *   Predict a successor that is a loop header or loop pre-header will be taken
  */
 static double loopHeaderHeuristic(const StaticProfilerContext* c) {
     Node* parentLoopHeader = c->loopTree->getLoopHeader(c->node, true);
     
-    bool edge1Accepted = hasUncondPathToInnerLoopHeader(parentLoopHeader, c->loopTree, c->edge1) 
-        && !c->postDomTree->dominates(c->edge1->getTargetNode(), c->node);
-    
-    bool edge2Accepted = hasUncondPathToInnerLoopHeader(parentLoopHeader, c->loopTree, c->edge2) 
-        && !c->postDomTree->dominates(c->edge2->getTargetNode(), c->node);
-    
-    if (edge1Accepted == edge2Accepted) {
+    Node* edge1Loop = findLoopHeaderOnUncondPath(parentLoopHeader, c->loopTree, c->edge1);
+    Node* edge2Loop = findLoopHeaderOnUncondPath(parentLoopHeader, c->loopTree, c->edge2);
+        
+    if ( (edge1Loop!=NULL && edge2Loop!=NULL) || edge2Loop==edge2Loop) {
+        return PROB_HEURISTIC_FAIL;
+    }
+    Node* edge1Target = c->edge1->getTargetNode();
+    Node* edge2Target = c->edge2->getTargetNode();
+    if ((edge1Loop != NULL && !c->domTree->dominates(edge1Target, edge1Loop))
+        || (edge2Loop != NULL && !c->domTree->dominates(edge2Target, edge2Loop))) 
+    {
         return PROB_HEURISTIC_FAIL;
     }
-    return edge1Accepted ? PROB_LOOP_HEADER_HEURISTIC : 1 - PROB_LOOP_HEADER_HEURISTIC;
+    return edge1Loop!=NULL? PROB_LOOP_HEADER_HEURISTIC : 1 - PROB_LOOP_HEADER_HEURISTIC;
 }
 
 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp Tue Feb 13 03:10:35 2007
@@ -27,6 +27,8 @@
 
 namespace Jitrino {
 
+#define PRAGMA_INLINE "org/vmmagic/pragma/Inline"
+
 struct HelperInlinerFlags {
     const char* inlinerPipelineName;
 
@@ -53,8 +55,11 @@
 
 class HelperInlinerAction: public Action {
 public:
+    HelperInlinerAction() : inlinePragma(NULL){}
     void init();
     HelperInlinerFlags& getFlags() {return flags;}
+    
+    NamedType* inlinePragma;
 protected:
     HelperInlinerFlags flags;
 };
@@ -101,13 +106,13 @@
     flags.wb_signature = "(Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Address;Lorg/vmmagic/unboxed/Address;)V";
 
     READ_STANDARD_HELPER_FLAGS(ldInterface);
-    flags.ldInterface_signature = "(Ljava/lang/Object;I)Lorg/vmmagic/unboxed/Address;";
+    flags.ldInterface_signature = "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Address;)Lorg/vmmagic/unboxed/Address;";
     
     READ_STANDARD_HELPER_FLAGS(checkCast);
-    flags.checkCast_signature = "(Ljava/lang/Object;IZZZI)Ljava/lang/Object;";
+    flags.checkCast_signature = "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Address;ZZZI)Ljava/lang/Object;";
     
     READ_STANDARD_HELPER_FLAGS(instanceOf);
-    flags.instanceOf_signature = "(Ljava/lang/Object;IZZZI)Z";
+    flags.instanceOf_signature = "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Address;ZZZI)Z";
 }
 
 
@@ -115,7 +120,7 @@
 public:
     HelperInliner(HelperInlinerSession* _sessionAction, MemoryManager& tmpMM, CompilationContext* _cc, Inst* _inst)  
         : flags(((HelperInlinerAction*)_sessionAction->getAction())->getFlags()), localMM(tmpMM), 
-        cc(_cc), inst(_inst), action(_sessionAction), method(NULL)
+        cc(_cc), inst(_inst), session(_sessionAction), method(NULL)
     {
         irm = cc->getHIRManager();
         instFactory = &irm->getInstFactory();
@@ -137,7 +142,7 @@
     MemoryManager& localMM;
     CompilationContext* cc;
     Inst* inst;
-    HelperInlinerSession* action;
+    HelperInlinerSession* session;
     MethodDesc*  method;
 
 //these fields used by almost every subclass -> cache them
@@ -160,6 +165,12 @@
         }\
         method = ensureClassIsResolvedAndInitialized(flags.flagPrefix##_className, flags.flagPrefix##_methodName, flags.flagPrefix##_signature);\
         if (!method) return;\
+        HelperInlinerAction* action = (HelperInlinerAction*)session->getAction();\
+        if (!action->inlinePragma) { \
+            action->inlinePragma = cc->getVMCompilationInterface()->resolveClassUsingBootstrapClassloader(PRAGMA_INLINE);\
+        } \
+        if (!action->inlinePragma) return;\
+        \
         doInline();\
     }\
     virtual void doInline();\
@@ -275,9 +286,11 @@
 
 typedef StlVector<MethodCallInst*> InlineVector;
 
-#define PRAGMA_INLINE "org/vmmagic/pragma/InlinePragma"
 
 void HelperInliner::inlineVMHelper(MethodCallInst* origCall) {
+    NamedType* inlinePragma = ((HelperInlinerAction*)session->getAction())->inlinePragma;
+    assert(inlinePragma!=0);
+
     InlineVector  methodsToInline(localMM);
     methodsToInline.push_back(origCall);
     while (!methodsToInline.empty()) {
@@ -293,7 +306,7 @@
         CompilationContext inlineCC(cc->getCompilationLevelMemoryManager(), ci, cc->getCurrentJITContext());
         inlineCC.setPipeline(cc->getPipeline());
 
-        Inliner inliner(action, localMM, *irm, false);
+        Inliner inliner(session, localMM, *irm, false);
         InlineNode* regionToInline = inliner.createInlineNode(inlineCC, call);
 
         inliner.connectRegion(regionToInline);
@@ -311,15 +324,10 @@
                 if (inst->isMethodCall()) {
                     MethodCallInst* methodCall = inst->asMethodCallInst();
                     MethodDesc* md = methodCall->getMethodDesc();
-                    uint32 nThrows = md->getNumThrows();
-                    for (uint32 i=0; i<nThrows;i++) {
-                        NamedType* type = md->getThrowType(i);
-                        const char* name = type->getName();
-                        if (!strcmp(name, PRAGMA_INLINE)) {
-                            methodsToInline.push_back(methodCall);
-                            if (Log::isEnabled()) {
-                                Log::out()<<"Found InlinePragma, adding to the queue:";methodCall->print(Log::out());Log::out()<<std::endl;
-                            }
+                    if (md->hasAnnotation(inlinePragma)) {
+                        methodsToInline.push_back(methodCall);
+                        if (Log::isEnabled()) {
+                            Log::out()<<"Found Inline pragma, adding to the queue:";methodCall->print(Log::out());Log::out()<<std::endl;
                         }
                     }
                 }
@@ -563,10 +571,15 @@
 
     Opnd* baseOpnd = inst->getSrc(0);
     assert(baseOpnd->getType()->isObject());
+    
     Type* type = inst->asTypeInst()->getTypeInfo();
-    int typeId = (int)type->asNamedType()->getRuntimeIdentifier(); //TODO: EM64T or IPF incompatible convertion
-    Opnd* typeOpnd  = opndManager->createSsaTmpOpnd(typeManager->getInt32Type());
-    instFactory->makeLdConst(typeOpnd, typeId)->insertBefore(inst);
+    Opnd* typeOpnd  = opndManager->createSsaTmpOpnd(typeManager->getUnmanagedPtrType(typeManager->getInt8Type()));
+    Opnd* typeValOpnd = opndManager->createSsaTmpOpnd(typeManager->getUIntPtrType());
+    void* typeId = type->asNamedType()->getRuntimeIdentifier();
+    instFactory->makeLdConst(typeValOpnd, (int)typeId)->insertBefore(inst); //TODO: fix this for EM64T
+    Modifier mod = Modifier(Overflow_None)|Modifier(Exception_Never)|Modifier(Strict_No);
+    instFactory->makeConv(mod, Type::UnmanagedPtr, typeOpnd, typeValOpnd)->insertBefore(inst);
+    
     Opnd* resOpnd = inst->getDst();
     Opnd* tauSafeOpnd = opndManager->createSsaTmpOpnd(typeManager->getTauType());
     instFactory->makeTauSafe(tauSafeOpnd)->insertBefore(inst);
@@ -599,15 +612,19 @@
     assert(type->isObject());
     ObjectType* castType = type->asObjectType();
 
-    int  typeId = (int)castType->getRuntimeIdentifier();
+    void* typeId = castType->getRuntimeIdentifier();
     bool isArrayType = castType->isArrayType();
     bool isInterfaceType = castType->isInterface();
     bool isFastInstanceOf = castType->getFastInstanceOfFlag();
     bool isFinalTypeCast = castType->isFinalClass();
     int  fastCheckDepth = isFastInstanceOf ? castType->getClassDepth() : 0;
     
-    Opnd* typeIdOpnd = opndManager->createSsaTmpOpnd(typeManager->getInt32Type()); //TODO: em64t & ipf!
-    instFactory->makeLdConst(typeIdOpnd, typeId)->insertBefore(inst);
+    Opnd* typeValOpnd = opndManager->createSsaTmpOpnd(typeManager->getInt32Type()); 
+    instFactory->makeLdConst(typeValOpnd, (int)typeId)->insertBefore(inst);//TODO: em64t & ipf!
+
+    Opnd* typeOpnd = opndManager->createSsaTmpOpnd(typeManager->getUnmanagedPtrType(typeManager->getInt8Type())); 
+    Modifier mod = Modifier(Overflow_None)|Modifier(Exception_Never)|Modifier(Strict_No);
+    instFactory->makeConv(mod, Type::UnmanagedPtr, typeOpnd, typeValOpnd)->insertBefore(inst);
 
     Opnd* isArrayOpnd = opndManager->createSsaTmpOpnd(typeManager->getBooleanType());
     instFactory->makeLdConst(isArrayOpnd, isArrayType)->insertBefore(inst);
@@ -624,7 +641,7 @@
     Opnd* tauSafeOpnd = opndManager->createSsaTmpOpnd(typeManager->getTauType());
     instFactory->makeTauSafe(tauSafeOpnd)->insertBefore(inst);
 
-    Opnd* args[6] = {objOpnd, typeIdOpnd, isArrayOpnd, isInterfaceOpnd, isFinalOpnd, fastCheckDepthOpnd};
+    Opnd* args[6] = {objOpnd, typeOpnd, isArrayOpnd, isInterfaceOpnd, isFinalOpnd, fastCheckDepthOpnd};
     MethodCallInst* call = instFactory->makeDirectCall(opndManager->getNullOpnd(), tauSafeOpnd, tauSafeOpnd, 6, args, method)->asMethodCallInst();
     
     call->insertBefore(inst);
@@ -655,15 +672,19 @@
     assert(type->isObject());
     ObjectType* castType = type->asObjectType();
 
-    int  typeId = (int)castType->getRuntimeIdentifier();
+    void* typeId = castType->getRuntimeIdentifier();
     bool isArrayType = castType->isArrayType();
     bool isInterfaceType = castType->isInterface();
     bool isFastInstanceOf = castType->getFastInstanceOfFlag();
     bool isFinalTypeCast = castType->isFinalClass();
     int  fastCheckDepth = isFastInstanceOf ? castType->getClassDepth() : 0;
 
-    Opnd* typeIdOpnd = opndManager->createSsaTmpOpnd(typeManager->getInt32Type()); //TODO: em64t & ipf!
-    instFactory->makeLdConst(typeIdOpnd, typeId)->insertBefore(inst);
+    Opnd* typeValOpnd = opndManager->createSsaTmpOpnd(typeManager->getInt32Type()); 
+    instFactory->makeLdConst(typeValOpnd, (int)typeId)->insertBefore(inst);//TODO: em64t & ipf!
+
+    Opnd* typeOpnd = opndManager->createSsaTmpOpnd(typeManager->getUnmanagedPtrType(typeManager->getInt8Type())); 
+    Modifier mod = Modifier(Overflow_None)|Modifier(Exception_Never)|Modifier(Strict_No);
+    instFactory->makeConv(mod, Type::UnmanagedPtr, typeOpnd, typeValOpnd)->insertBefore(inst);
 
     Opnd* isArrayOpnd = opndManager->createSsaTmpOpnd(typeManager->getBooleanType());
     instFactory->makeLdConst(isArrayOpnd, isArrayType)->insertBefore(inst);
@@ -680,7 +701,7 @@
     Opnd* tauSafeOpnd = opndManager->createSsaTmpOpnd(typeManager->getTauType());
     instFactory->makeTauSafe(tauSafeOpnd)->insertBefore(inst);
 
-    Opnd* args[6] = {objOpnd, typeIdOpnd, isArrayOpnd, isInterfaceOpnd, isFinalOpnd, fastCheckDepthOpnd};
+    Opnd* args[6] = {objOpnd, typeOpnd, isArrayOpnd, isInterfaceOpnd, isFinalOpnd, fastCheckDepthOpnd};
     MethodCallInst* call = instFactory->makeDirectCall(inst->getDst(), tauSafeOpnd, tauSafeOpnd, 6, args, method)->asMethodCallInst();
 
     call->insertBefore(inst);

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp Tue Feb 13 03:10:35 2007
@@ -66,6 +66,7 @@
 
     const char* name = type->getName();    
     if (!strcmp(name, "org/vmmagic/unboxed/Address") 
+        //TODO: ObjectReference must have a ManagedPointer/Object type
         || !strcmp(name, "org/vmmagic/unboxed/ObjectReference")) 
     {
         return tm.getUnmanagedPtrType(tm.getInt8Type());
@@ -73,7 +74,7 @@
         || !strcmp(name, "org/vmmagic/unboxed/Offset")
         || !strcmp(name, "org/vmmagic/unboxed/Extent")) 
     {
-            return tm.getUIntPtrType();
+        return tm.getUIntPtrType();
     } else if (!strcmp(name, "org/vmmagic/unboxed/WordArray")
         || !strcmp(name, "org/vmmagic/unboxed/OffsetArray")
         || !strcmp(name, "org/vmmagic/unboxed/ExtentArray") 
@@ -1108,7 +1109,7 @@
         if (field->isInitOnly() && !field->getParentType()->needsInitialization()) {
             //the final static field of the initialized class
             Type* fieldType = field->getFieldType();
-            if (field->getFieldType()->isNumeric()) {
+            if (field->getFieldType()->isNumeric() || field->getFieldType()->isBoolean()) {
                 Opnd* constVal = NULL;
                 void* fieldAddr = field->getAddress();
                 switch(fieldType->tag) {
@@ -1119,6 +1120,7 @@
                     case Type::Int64:   constVal=irBuilder.genLdConstant(*(int64*)fieldAddr);break;
                     case Type::Float:   constVal=irBuilder.genLdConstant(*(float*)fieldAddr);break;
                     case Type::Double:  constVal=irBuilder.genLdConstant(*(double*)fieldAddr);break;
+                    case Type::Boolean: constVal=irBuilder.genLdConstant(*(bool*)fieldAddr);break;
                     default: assert(0); //??
                 }
                 if (constVal != NULL) {
@@ -3808,7 +3810,7 @@
     //
     // fromXXX, toXXX - static creation from something
     //
-    if (!strcmp(mname, "fromInt") 
+    if (!strcmp(mname, "fromLong") 
         || !strcmp(mname, "fromIntSignExtend") 
         || !strcmp(mname, "fromIntZeroExtend")
         || !strcmp(mname, "fromObject")  
@@ -4013,7 +4015,7 @@
     }
 
     if (!strcmp(mname,"newVectorUsingAllocHandle")) {
-        assert(numArgs == 3);
+        assert(numArgs == 2);
         Opnd* res = irBuilder.genVMHelperCall(CompilationInterface::Helper_NewVector_UsingVtable, resType, numArgs, srcOpnds);
         pushOpnd(res);
         return;

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/VMInterface.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/VMInterface.h?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/VMInterface.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/VMInterface.h Tue Feb 13 03:10:35 2007
@@ -160,6 +160,7 @@
     virtual uint32      getNumHandlers()    = 0;
     virtual uint32      getNumThrows()    = 0;
     virtual NamedType*  getThrowType(uint32 i) = 0;
+    virtual bool        hasAnnotation(NamedType* type) = 0;
     
     // Exception handler and signature parsing API
     virtual unsigned    parseJavaHandlers(ExceptionCallback&) = 0;

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.cpp Tue Feb 13 03:10:35 2007
@@ -1059,4 +1059,8 @@
     return res;
 }
 
+bool DrlVMMethodDesc::hasAnnotation(NamedType* type) {
+    return method_has_annotation(drlMethod, (Class_Handle)type->getVMTypeHandle());
+}
+
 } //namespace Jitrino

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.h?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/vm/drl/DrlVMInterface.h Tue Feb 13 03:10:35 2007
@@ -278,6 +278,7 @@
     uint32       getNumHandlers()  {return method_get_num_handlers(drlMethod);}
     uint32       getNumThrows() {return method_number_throws(drlMethod);}
     NamedType*   getThrowType(uint32 i);
+    bool         hasAnnotation(NamedType* type);
 
     //
     // accessors for method info, code and data

Modified: harmony/enhanced/drlvm/trunk/vm/thread/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/javasrc/org/apache/harmony/drlvm/thread/ThreadHelper.java Tue Feb 13 03:10:35 2007
@@ -32,12 +32,14 @@
 
     public static final int TLS_THREAD_ID_OFFSET=getThreadIdOffset();
 
-    static int getThreadId() throws InlinePragma {
+    @Inline
+    static int getThreadId() {
         Address tlsAddr = VMHelper.getTlsBaseAddress();
         Address tlsThreadIdFieldAddr = tlsAddr.plus(TLS_THREAD_ID_OFFSET);
         return tlsThreadIdFieldAddr.loadInt();
     }
 
+    @Inline
     static void monitorEnterUseReservation(Object obj) {
         Address lockWordPtr = ObjectReference.fromObject(obj).toAddress().plus(LOCK_WORD_OFFSET);
         int threadId = getThreadId();
@@ -85,6 +87,7 @@
     public static final int FAT_LOCK_MASK = 0x80000000;
     public static final int RECURSION_MASK = 0x0000f800;
 
+    @Inline
     static void monitorExit(Object obj) {
         Address lockWordPtr = ObjectReference.fromObject(obj).toAddress().plus(LOCK_WORD_OFFSET);
         int lockword = lockWordPtr.loadInt();

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/class_member.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/class_member.h?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/class_member.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/class_member.h Tue Feb 13 03:10:35 2007
@@ -174,6 +174,7 @@
         _field_type_desc = 0;
         _offset_computed = 0;
         _is_injected = 0;
+        _is_magic_type = 0;
         track_access = 0;
         track_modification = 0;
     }
@@ -212,7 +213,7 @@
     unsigned is_volatile()  {return (_access_flags&ACC_VOLATILE);} 
     unsigned is_transient() {return (_access_flags&ACC_TRANSIENT);} 
     bool is_enum()          {return (_access_flags&ACC_ENUM)?true:false;} 
-
+    
     bool parse(Global_Env& env, Class* clss, ByteReader& cfs);
 
     unsigned calculate_size();
@@ -223,6 +224,8 @@
     Boolean is_injected() {return _is_injected;}
     void set_injected() { _is_injected = 1; }
 
+    Boolean is_magic_type()    {return  _is_magic_type;}
+    
     void set_track_access(bool value) {
         track_access = value ? 1 : 0 ;
     }
@@ -252,6 +255,7 @@
     Const_Java_Value const_value;
     TypeDesc* _field_type_desc;
     unsigned _is_injected : 1;
+    unsigned _is_magic_type : 1;
     unsigned _offset_computed : 1;
 
     /** Turns on sending FieldAccess events on access to this field */

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/C_Interface.cpp Tue Feb 13 03:10:35 2007
@@ -1790,11 +1790,11 @@
 } //field_get_class_of_field_value
 
 
-Boolean field_is_reference(Field_Handle fh)
+Boolean field_is_gc_enumerable(Field_Handle fh)
 {
     assert((Field *)fh);
     Java_Type typ = field_get_type(fh);
-    return typ == JAVA_TYPE_CLASS || typ == JAVA_TYPE_ARRAY;
+    return (typ == JAVA_TYPE_CLASS || typ == JAVA_TYPE_ARRAY) && !fh->is_magic_type();
 } //field_is_reference
 
 
@@ -2752,4 +2752,31 @@
     }
     destroy_property_value(value);
     return return_value;
+}
+
+
+static Annotation* lookup_annotation(AnnotationTable* table, Class* owner, Class* antn_type) {
+    for (unsigned i = table->length - 1; i >= 0; --i) {
+        Annotation* antn = table->table[i];
+        Type_Info_Handle tih = (Type_Info_Handle) type_desc_create_from_java_descriptor(antn->type->bytes, owner->get_class_loader());
+        if (tih) {
+            Class* type = type_info_get_class(tih);
+            if (antn_type == type) {
+                return antn;
+            }
+        }
+    }
+    LOG("No such annotation " << antn_type->get_name()->bytes);
+    return NULL;
+}
+
+
+Boolean method_has_annotation(Method_Handle target, Class_Handle antn_type) {
+    assert(target);
+    assert(antn_type);
+    if (target->get_declared_annotations()) {
+        Annotation* antn = lookup_annotation(target->get_declared_annotations(), target->get_class(), antn_type);
+        return antn!=NULL;
+    }
+    return false;
 }

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class_File_Loader.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class_File_Loader.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class_File_Loader.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class_File_Loader.cpp Tue Feb 13 03:10:35 2007
@@ -739,6 +739,22 @@
     // DIE( "unreachable code!" ); // exclude remark #111: statement is unreachable
 }
 
+static bool is_magic_type_name(const String* name) {
+    static String* MAGIC_TYPE_NAMES[]={
+        VM_Global_State::loader_env->string_pool.lookup("org/vmmagic/unboxed/Address"),
+        VM_Global_State::loader_env->string_pool.lookup("org/vmmagic/unboxed/Offset"), 
+        VM_Global_State::loader_env->string_pool.lookup("org/vmmagic/unboxed/Word"),
+        VM_Global_State::loader_env->string_pool.lookup("org/vmmagic/unboxed/Extent"),
+        NULL
+    };
+    for (int i=0;;i++)    {
+        String* magicClassName = MAGIC_TYPE_NAMES[i];
+        if (magicClassName == NULL) break;
+        if (magicClassName == name) return true;
+    }
+    return false;
+}
+
 //checks of field and method name depend on class version 
 static const uint16 JAVA5_CLASS_FILE_VERSION = 49;
 
@@ -791,6 +807,11 @@
             << "0x" << std::hex << _access_flags);
         return false;
     }
+
+    //check if field is magic type
+     if (is_magic_type_name(clss->get_name())) {
+         _is_magic_type = 1;
+     }
 
     //check field attributes
     uint16 attr_count;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Prepare.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Prepare.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Prepare.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Prepare.cpp Tue Feb 13 03:10:35 2007
@@ -51,6 +51,11 @@
 #include "dump.h"
 
 
+static unsigned get_magic_type_size(Field* field) {
+    //all magic sizes use size==machine word today
+    return sizeof(char*);
+}
+
 // For Java currently, fields are not packed: an int16 occupies a full 32 bit word.
 // "do_field_compaction" is true, e.g., for packed ("sequential") layout.
 // If the "clss" pointer is non-NULL, the type must be that of an instance field and any
@@ -88,8 +93,10 @@
     case 'L': 
     case '[': 
         {
-            // compress static reference fields.
-            if (VM_Global_State::loader_env->compress_references) {
+            if (field->is_magic_type()) {
+                sz = get_magic_type_size(field);
+            } else if (VM_Global_State::loader_env->compress_references) {
+                // compress static reference fields.
                 sz = sizeof(COMPRESSED_REFERENCE);
             } else {
                 sz = OBJECT_REF_SIZE;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/gc/root_set_enum_common.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/gc/root_set_enum_common.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/gc/root_set_enum_common.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/gc/root_set_enum_common.cpp Tue Feb 13 03:10:35 2007
@@ -95,8 +95,7 @@
                 for(unsigned i = 0; i < n_fields; i++) {
                     Field* f = c->get_field(i);
                     if(f->is_static()) {
-                        char desc0 = f->get_descriptor()->bytes[0];
-                        if(desc0 == 'L' || desc0 == '[') {
+                        if(field_is_gc_enumerable(f)) {
                             // The field is static and it is a reference.
                             if (global_env->compress_references) {
                                 vm_enumerate_compressed_root_reference((uint32 *)f->get_address(), FALSE);

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_trace.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_trace.cpp?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_trace.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_trace.cpp Tue Feb 13 03:10:35 2007
@@ -100,7 +100,7 @@
         unsigned i;
         for (i = 0; i < num_fields; i++) {
             Field_Handle fh = class_get_instance_field_recursive(ch, i);
-            if (field_is_reference(fh)) {
+            if (field_is_gc_enumerable(fh)) {
                 int offset = field_get_offset(fh);
                 Slot slot((void*)((UDATA)referrer + offset));
                 if (slot.is_null()) continue;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelper.java Tue Feb 13 03:10:35 2007
@@ -30,9 +30,11 @@
 
     public static Address getTlsBaseAddress() {fail(); return null;}
 
+    //TODO: allocation handle is int only on 32bit OS or (64bit OS && compressed mode)
     public static Address newResolvedUsingAllocHandleAndSize(int objSize, int allocationHandle) {fail(); return null;}
     
-    public static Address newVectorUsingAllocHandle(int arrayLen, int elemSize, int allocationHandle) {fail(); return null;}
+    //TODO: allocation handle is int only on 32bit OS or (64bit OS && compressed mode)
+    public static Address newVectorUsingAllocHandle(int arrayLen, int allocationHandle) {fail(); return null;}
 
     public static void monitorEnter(Object obj) {fail();}
 
@@ -40,13 +42,34 @@
 
     public static void writeBarrier(Address objBase, Address objSlot, Address source) {fail();}
 
-    public static Address getInterfaceVTable(Object obj, int intfTypeId) {fail(); return null;}
+    public static Address getInterfaceVTable(Object obj, Address intfTypePtr) {fail(); return null;}
  
-    public static Object checkCast(Object obj, int castType) {fail(); return null;}
+    public static Object checkCast(Object obj, Address castTypePtr) {fail(); return null;}
  
-    public static boolean instanceOf(Object obj, int castType) {fail(); return false;}
-
+    public static boolean instanceOf(Object obj, Address castTypePtr) {fail(); return false;}
 
     protected static void fail() {throw new RuntimeException("Not supported!");}
 
+
+    public static final int POINTER_TYPE_SIZE          = getPointerTypeSize();
+    public static final boolean COMPRESSED_REFS_MODE   = isCompressedRefsMode();
+    public static final boolean COMPRESSED_VTABLE_MODE = isCompressedVTableMode();
+    public static final long COMPRESSED_VTABLE_BASE_OFFSET    = getCompressedModeVTableBaseOffset();
+    public static final long COMPRESSED_REFS_OBJ_BASE_OFFSET  = getCompressedModeObjectBaseOffset();
+
+    /** @return pointer-type size. 4 or 8 */
+    private static native int getPointerTypeSize();
+
+    /** @return true if VM is run in compressed reference mode */
+    private static native boolean isCompressedRefsMode();
+
+    /** @return true if VM is run in compressed vtables mode */
+    private static native boolean isCompressedVTableMode();
+
+    /** @return vtable base offset if is in compressed-refs mode or -1*/
+    private static native long getCompressedModeVTableBaseOffset();
+
+    /** @return object base offset if is in compressed-refs mode or -1*/
+    private static native long getCompressedModeObjectBaseOffset();
 }
+

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelperFastPath.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelperFastPath.java?view=diff&rev=506971&r1=506970&r2=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelperFastPath.java (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/org/apache/harmony/drlvm/VMHelperFastPath.java Tue Feb 13 03:10:35 2007
@@ -21,10 +21,8 @@
 package org.apache.harmony.drlvm;
 
 import org.apache.harmony.drlvm.VMHelper;
-import org.vmmagic.unboxed.Address;
-import org.vmmagic.unboxed.ObjectReference;
-import org.vmmagic.unboxed.Offset;
-import org.vmmagic.pragma.InlinePragma;
+import org.vmmagic.unboxed.*;
+import org.vmmagic.pragma.*;
 
 public class VMHelperFastPath {
 
@@ -39,84 +37,92 @@
     private static final int CLASS_INF_TABLE_2_OFFSET = getVtableIntfTableOffset(2);
     private static final int CLASS_DEPTH_OFFSET = getClassDepthOffset();
 
-    private static final int POINTER_SIZE=4;//todo: em64 & ipf incompatible!
-
     private VMHelperFastPath() {}
 
+    @Inline
+    public static Address getVTableAddress(Object obj) {
+        Address objAddr = ObjectReference.fromObject(obj).toAddress();
+        if (VMHelper.COMPRESSED_VTABLE_MODE) {
+            int vtableOffset = objAddr.loadInt(Offset.fromIntZeroExtend(OBJ_VTABLE_OFFSET));
+            Address res = Address.fromLong(VMHelper.COMPRESSED_VTABLE_BASE_OFFSET + vtableOffset);
+            return res;
+        }
+        return objAddr.loadAddress(Offset.fromIntZeroExtend(OBJ_VTABLE_OFFSET));
+        
+    }
+
 
 //TODO: leave only one version 
 //TODO: refactor code to use getVtableIntfTableOffset method (+ avoid extra comparisons while refactoring)
 
-    public static Address getInterfaceVTable3(Object obj, int intfType)  {
-
-        Address objAddr = ObjectReference.fromObject(obj).toAddress();
-        Address vtableAddr = objAddr.loadAddress(Offset.fromInt(OBJ_VTABLE_OFFSET));
-
-        int inf0Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_0_OFFSET));
-        if (inf0Type == intfType) {
-            return vtableAddr.loadAddress(Offset.fromInt(CLASS_INF_TABLE_0_OFFSET));               
+    @Inline
+    public static Address getInterfaceVTable3(Object obj, Address intfType)  {
+        Address vtableAddr = getVTableAddress(obj);
+
+        Address inf0Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_0_OFFSET));
+        if (inf0Type.EQ(intfType)) {
+            return vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TABLE_0_OFFSET));               
         }
     
-        int inf1Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_1_OFFSET));
-        if (inf1Type == intfType) {
-            return vtableAddr.loadAddress(Offset.fromInt(CLASS_INF_TABLE_1_OFFSET));               
+        Address inf1Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_1_OFFSET));
+        if (inf1Type.EQ(intfType)) {
+            return vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TABLE_1_OFFSET));               
         }
 
-        int inf2Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_2_OFFSET));
-        if (inf2Type == intfType) {
-            return vtableAddr.loadAddress(Offset.fromInt(CLASS_INF_TABLE_2_OFFSET));               
+        Address inf2Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_2_OFFSET));
+        if (inf2Type.EQ(intfType)) {
+            return vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TABLE_2_OFFSET));               
         }
         //slow path version
         return VMHelper.getInterfaceVTable(obj, intfType);
     }
 
-    public static Address getInterfaceVTable2(Object obj, int intfType)  {
-        Address objAddr = ObjectReference.fromObject(obj).toAddress();
-        Address vtableAddr = objAddr.loadAddress(Offset.fromInt(OBJ_VTABLE_OFFSET));
-
-        int inf0Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_0_OFFSET));
-        if (inf0Type == intfType) {
-            return vtableAddr.loadAddress(Offset.fromInt(CLASS_INF_TABLE_0_OFFSET));               
+    @Inline
+    public static Address getInterfaceVTable2(Object obj, Address intfType)  {
+        Address vtableAddr = getVTableAddress(obj);
+
+        Address inf0Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_0_OFFSET));
+        if (inf0Type.EQ(intfType)) {
+            return vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TABLE_0_OFFSET));               
         }
     
-        int inf1Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_1_OFFSET));
-        if (inf1Type == intfType) {
-            return vtableAddr.loadAddress(Offset.fromInt(CLASS_INF_TABLE_1_OFFSET));               
+        Address inf1Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_1_OFFSET));
+        if (inf1Type.EQ(intfType)) {
+            return vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TABLE_1_OFFSET));               
         }
 
         //slow path version
         return VMHelper.getInterfaceVTable(obj, intfType);
     }
 
-    public static Address getInterfaceVTable1(Object obj, int intfType)  {
-        Address objAddr = ObjectReference.fromObject(obj).toAddress();
-        Address vtableAddr = objAddr.loadAddress(Offset.fromInt(OBJ_VTABLE_OFFSET));
-
-        int inf0Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_0_OFFSET));
-        if (inf0Type == intfType) {
-            return vtableAddr.loadAddress(Offset.fromInt(CLASS_INF_TABLE_0_OFFSET));               
+    @Inline
+    public static Address getInterfaceVTable1(Object obj, Address intfType)  {
+        Address vtableAddr = getVTableAddress(obj);
+
+        Address inf0Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_0_OFFSET));
+        if (inf0Type.EQ(intfType)) {
+            return vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TABLE_0_OFFSET));               
         }
     
         //slow path version
         return VMHelper.getInterfaceVTable(obj, intfType);
     }
 
-    public static boolean instanceOf(Object obj, int castType, boolean isArray, boolean isInterface, boolean isFinalTypeCast, int fastCheckDepth) throws InlinePragma {
+    @Inline
+    public static boolean instanceOf(Object obj, Address castType, boolean isArray, boolean isInterface, boolean isFinalTypeCast, int fastCheckDepth) {
         if (obj == null) {
             return false;
         }
         if (isInterface) {
-            Address objAddr = ObjectReference.fromObject(obj).toAddress();
-            Address vtableAddr = objAddr.loadAddress(Offset.fromInt(OBJ_VTABLE_OFFSET));
-
+            Address vtableAddr = getVTableAddress(obj);
 
-            int inf0Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_0_OFFSET));
-            if (inf0Type == castType) {
+            Address inf0Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_0_OFFSET));
+            if (inf0Type.EQ(castType)) {
                 return true;
             }
     
-            int inf1Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_1_OFFSET));
-            if (inf1Type == castType) {
+            Address inf1Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_1_OFFSET));
+            if (inf1Type.EQ(castType)) {
                 return true;
             }
         } else if (!isArray && fastCheckDepth!=0) {
@@ -126,22 +132,21 @@
         
     }
 
-    public static Object checkCast(Object obj, int castType, boolean isArray, boolean isInterface, boolean isFinalTypeCast, int fastCheckDepth) throws InlinePragma {
+    @Inline
+    public static Object checkCast(Object obj, Address castType, boolean isArray, boolean isInterface, boolean isFinalTypeCast, int fastCheckDepth) {
         if (obj == null) {
             return obj;
         }
         if (isInterface) {
-            Address objAddr = ObjectReference.fromObject(obj).toAddress();
-            Address vtableAddr = objAddr.loadAddress(Offset.fromInt(OBJ_VTABLE_OFFSET));
+            Address vtableAddr = getVTableAddress(obj);
 
-
-            int inf0Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_0_OFFSET));
-            if (inf0Type == castType) {
+            Address inf0Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_0_OFFSET));
+            if (inf0Type.EQ(castType)) {
                 return obj;
             }
     
-            int inf1Type = vtableAddr.loadInt(Offset.fromInt(CLASS_INF_TYPE_1_OFFSET));
-            if (inf1Type == castType) {
+            Address inf1Type = vtableAddr.loadAddress(Offset.fromIntZeroExtend(CLASS_INF_TYPE_1_OFFSET));
+            if (inf1Type.EQ(castType)) {
                 return obj;
             }
         } else if (!isArray && fastCheckDepth!=0 && fastClassInstanceOf(obj, castType, isFinalTypeCast, fastCheckDepth)) {
@@ -150,20 +155,21 @@
         return VMHelper.checkCast(obj, castType);
     }
 
-    public static boolean fastClassInstanceOf(Object obj, int castType, boolean isFinalTypeCast, int fastCheckDepth) throws InlinePragma {
-        Address objAddr = ObjectReference.fromObject(obj).toAddress();
-        Address objVtableAddr = objAddr.loadAddress(Offset.fromInt(OBJ_VTABLE_OFFSET));
-        int objClassType  = objVtableAddr.loadInt(Offset.fromInt(VTABLE_CLASS_OFFSET));//todo em64t & ipf incompat
+    @Inline
+    public static boolean fastClassInstanceOf(Object obj, Address castType, boolean isFinalTypeCast, int fastCheckDepth) {
+        Address objVtableAddr = getVTableAddress(obj);
+        Address objClassType  = objVtableAddr.loadAddress(Offset.fromIntZeroExtend(VTABLE_CLASS_OFFSET));
 
-        if (objClassType == castType) {
+        if (objClassType.EQ(castType)) {
             return true;
         }
         if (isFinalTypeCast) {
             return false;
         }
        
-        int depthSubType = objVtableAddr.loadInt(Offset.fromInt(VTABLE_SUPERCLASSES_OFFSET + POINTER_SIZE*(fastCheckDepth-1)));
-        return depthSubType == castType;
+        int subTypeOffset = VTABLE_SUPERCLASSES_OFFSET + VMHelper.POINTER_TYPE_SIZE*(fastCheckDepth-1);
+        Address depthSubType = objVtableAddr.loadAddress(Offset.fromIntZeroExtend(subTypeOffset));
+        return depthSubType.EQ(castType);
     }
 
 

Added: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.cpp?view=auto&rev=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.cpp Tue Feb 13 03:10:35 2007
@@ -0,0 +1,59 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+
+#include "org_apache_harmony_drlvm_VMHelper.h"
+
+#include "open/vm.h"
+#include "open/vm_util.h"
+#include "environment.h"
+#include <assert.h>
+
+JNIEXPORT jint JNICALL Java_org_apache_harmony_drlvm_VMHelper_getPointerTypeSize (JNIEnv *, jclass) {
+    return (jint)sizeof(void*);
+}
+
+
+JNIEXPORT jboolean JNICALL Java_org_apache_harmony_drlvm_VMHelper_isCompressedRefsMode(JNIEnv *, jclass) {
+    return (jboolean)VM_Global_State::loader_env->compress_references;
+}
+
+JNIEXPORT jboolean JNICALL Java_org_apache_harmony_drlvm_VMHelper_isCompressedVTableMode(JNIEnv *, jclass) {
+#ifdef USE_COMPRESSED_VTABLE_POINTERS
+    return true;
+#else
+    return false;
+#endif
+}
+
+
+JNIEXPORT jlong JNICALL Java_org_apache_harmony_drlvm_VMHelper_getCompressedModeVTableBaseOffset(JNIEnv *, jclass) {
+    bool cm = (jboolean)VM_Global_State::loader_env->compress_references;
+    if (cm) {
+        return (jlong)vm_get_vtable_base();
+    }
+    return -1;
+}
+
+
+JNIEXPORT jlong JNICALL Java_org_apache_harmony_drlvm_VMHelper_getCompressedModeObjectBaseOffset(JNIEnv *, jclass) {
+    bool cm = (jboolean)VM_Global_State::loader_env->compress_references;
+    if (cm) {
+        return (jlong)VM_Global_State::loader_env->heap_base;;
+    }
+    return -1;
+}

Propchange: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.h?view=auto&rev=506971
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.h (added)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.h Tue Feb 13 03:10:35 2007
@@ -0,0 +1,54 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+#include <jni.h>
+
+
+/* Header for class org.apache.harmony.drlvm.VMHelperFastPath */
+
+#ifndef _ORG_APACHE_HARMONY_DRLVM_VMHELPER_H
+#define _ORG_APACHE_HARMONY_DRLVM_VMHELPER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+JNIEXPORT jint JNICALL Java_org_apache_harmony_drlvm_VMHelper_getPointerTypeSize
+  (JNIEnv *, jclass);
+
+
+JNIEXPORT jboolean JNICALL Java_org_apache_harmony_drlvm_VMHelper_isCompressedRefsMode
+  (JNIEnv *, jclass);
+
+JNIEXPORT jboolean JNICALL Java_org_apache_harmony_drlvm_VMHelper_isCompressedVTableMode
+(JNIEnv *, jclass);
+
+
+JNIEXPORT jlong JNICALL Java_org_apache_harmony_drlvm_VMHelper_getCompressedModeVTableBaseOffset
+  (JNIEnv *, jclass);
+
+
+JNIEXPORT jlong JNICALL Java_org_apache_harmony_drlvm_VMHelper_getCompressedModeObjectBaseOffset
+  (JNIEnv *, jclass);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ORG_APACHE_HARMONY_DRLVM_VMHELPER_H */

Propchange: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/native/org_apache_harmony_drlvm_VMHelper.h
------------------------------------------------------------------------------
    svn:eol-style = native