[vmkit-commits] [vmkit] r61629 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h JnjvmModule.cpp JnjvmModule.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Jan 4 12:03:24 PST 2009


Author: geoffray
Date: Sun Jan  4 14:03:23 2009
New Revision: 61629

URL: http://llvm.org/viewvc/llvm-project?rev=61629&view=rev
Log:
Move the initialization of array VTs to ClassArray, instead of JnjvmModule.



Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=61629&r1=61628&r2=61629&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Sun Jan  4 14:03:23 2009
@@ -1293,3 +1293,17 @@
 
   return false;
 }
+
+
+void ClassArray::initialiseVT(Class* cl) {
+  uint32 size =  (cl->virtualTableSize - VT_NB_FUNCS) * sizeof(void*);
+  
+  #define COPY(CLASS) \
+    memcpy((void*)((uintptr_t)CLASS + VT_SIZE), \
+           (void*)((uintptr_t)cl->virtualVT + VT_SIZE), size);
+
+    COPY(JavaArrayVT)
+    COPY(ArrayObjectVT)
+
+#undef COPY
+}

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=61629&r1=61628&r2=61629&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Sun Jan  4 14:03:23 2009
@@ -944,6 +944,11 @@
   /// InterfacesArray - The list of interfaces for array classes.
   ///
   static Class** InterfacesArray;
+
+  /// initialiseVT - Initialise the primitive and reference array VT.
+  /// super is the java/lang/Object class.
+  ///
+  static void initialiseVT(Class* super);
 };
 
 /// JavaMethod - This class represents Java methods.

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61629&r1=61628&r2=61629&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Sun Jan  4 14:03:23 2009
@@ -332,7 +332,7 @@
     if (I == End) {
       
       if (isCompiling(classDef)) {
-        classDef->virtualVT = makeVT(classDef);
+        makeVT(classDef);
       }
 
       const ArrayType* ATy = dyn_cast<ArrayType>(VTType->getContainedType(0));
@@ -348,7 +348,7 @@
       virtualTables.insert(std::make_pair(classDef, res));
     
       if (isCompiling(classDef)) {
-        classDef->virtualVT = makeVT(classDef);
+        makeVT(classDef);
         Function* Finalizer = ((Function**)classDef->virtualVT)[0];
         Function* Tracer = LCI->getVirtualTracer();
         Constant* C = CreateConstantFromVT(classDef->virtualVT,
@@ -451,6 +451,7 @@
   } else {
     VT = JavaObjectVT;
   }
+  cl->virtualVT = VT;
   return VT;
 }
 #endif
@@ -1193,17 +1194,18 @@
   return Array;
 }
 
-VirtualTable* JnjvmModule::makeVT(Class* cl) {
+void JnjvmModule::makeVT(Class* cl) {
   
   VirtualTable* VT = 0;
 #ifdef WITHOUT_VTABLE
   mvm::BumpPtrAllocator& allocator = cl->classLoader->allocator;
   VT = (VirtualTable*)allocator.Allocate(VT_SIZE);
   memcpy(VT, JavaObjectVT, VT_SIZE);
+  cl->virtualVT = VT;
 #else
   if (cl->super) {
     if (isStaticCompiling() && !cl->super->virtualVT) {
-      cl->super->virtualVT = makeVT(cl->super);
+      makeVT(cl->super);
     }
 
     cl->virtualTableSize = cl->super->virtualTableSize;
@@ -1255,16 +1257,7 @@
   // If there is no super, then it's the first VT that we allocate. Assign
   // this VT to native types.
    if (!(cl->super)) {
-    uint32 size =  (cl->virtualTableSize - VT_NB_FUNCS) * sizeof(void*);
-#define COPY(CLASS) \
-    memcpy((void*)((uintptr_t)CLASS + VT_SIZE), \
-           (void*)((uintptr_t)VT + VT_SIZE), size);
-
-    COPY(JavaArrayVT)
-    COPY(ArrayObjectVT)
-
-#undef COPY
-    
+    ClassArray::initialiseVT(cl);
    }
 #endif
   
@@ -1280,7 +1273,6 @@
   }
 
 #endif
-  return VT;
 }
 
 
@@ -1322,7 +1314,7 @@
     
     JnjvmModule* Mod = classDef->classLoader->getModule();
     if (!Mod->isStaticCompiling()) {
-      classDef->virtualVT = Mod->makeVT((Class*)classDef);
+      Mod->makeVT((Class*)classDef);
     }
   
   }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=61629&r1=61628&r2=61629&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Sun Jan  4 14:03:23 2009
@@ -227,7 +227,7 @@
 
   
   llvm::Function* makeTracer(Class* cl, bool stat);
-  VirtualTable* makeVT(Class* cl);
+  void makeVT(Class* cl);
   VirtualTable* allocateVT(Class* cl);
   
   static llvm::Constant* PrimitiveArrayVT;





More information about the vmkit-commits mailing list