[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