[vmkit-commits] [vmkit] r60172 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathField.cpp LLVMRuntime/runtime-default.ll VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaConstantPool.cpp VMCore/JavaJIT.cpp VMCore/JavaRuntimeJIT.cpp VMCore/JavaUpcalls.cpp VMCore/Jni.cpp VMCore/Jnjvm.cpp VMCore/JnjvmModule.cpp VMCore/JnjvmModule.h VMCore/VirtualTables.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Nov 27 07:02:02 PST 2008


Author: geoffray
Date: Thu Nov 27 09:01:54 2008
New Revision: 60172

URL: http://llvm.org/viewvc/llvm-project?rev=60172&view=rev
Log:
Make the static instance a simply malloc'ed object, not a JavaObject.


Modified:
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp?rev=60172&r1=60171&r2=60172&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathField.cpp Thu Nov 27 09:01:54 2008
@@ -66,7 +66,7 @@
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   const Typedef* type = field->getSignature();
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -103,7 +103,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -142,7 +142,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -174,7 +174,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -215,7 +215,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -246,7 +246,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -278,7 +278,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -311,7 +311,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -353,7 +353,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)_obj;
+  void* Obj = (void*)_obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -428,7 +428,7 @@
   NativeUtil::decapsulePrimitive(vm, buf, (JavaObject*)val, type);
 
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -473,7 +473,8 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
-  JavaObject* Obj = (JavaObject*)obj;
+  
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -502,7 +503,8 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
-  JavaObject* Obj = (JavaObject*)obj;
+  
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -541,7 +543,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -577,7 +579,7 @@
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
   
-  JavaObject* Obj = (JavaObject*)obj;
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -613,7 +615,8 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
-  JavaObject* Obj = (JavaObject*)obj;
+  
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -647,7 +650,8 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
-  JavaObject* Obj = (JavaObject*)obj;
+  
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -679,7 +683,8 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
-  JavaObject* Obj = (JavaObject*)obj;
+  
+  void* Obj = (void*)obj;
   
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);
@@ -709,7 +714,8 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* slot = vm->upcalls->fieldSlot;
   JavaField* field = (JavaField*)slot->getInt32Field((JavaObject*)Field);
-  JavaObject* Obj = (JavaObject*)obj;
+  
+  void* Obj = (void*)obj;
 
   if (isStatic(field->access)) {
     UserClass* cl = internalGetClass(vm, field, Field);

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=60172&r1=60171&r2=60172&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Thu Nov 27 09:01:54 2008
@@ -88,7 +88,7 @@
 declare i32 @getDepth(%JavaClass*) readnone 
 
 ;;; getStaticInstance - Get the static instance of this class.
-declare %JavaObject* @getStaticInstance(%JavaClass*) readnone 
+declare i8* @getStaticInstance(%JavaClass*) readnone 
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Nov 27 09:01:54 2008
@@ -97,7 +97,6 @@
 
 Class::Class() : CommonClass() {
   ctpInfo = 0;
-  staticVT = 0;
   JInfo = 0;
   outerClass = 0;
   innerOuterResolved = false;
@@ -140,8 +139,7 @@
     classLoader->allocator.Deallocate(ctpInfo);
   }
 
-  classLoader->allocator.Deallocate(staticVT);
-
+  classLoader->allocator.Deallocate(_staticInstance);
   // Currently, only regular classes have a heap allocated virtualVT.
   // Array classes have a C++ allocated virtualVT and primitive classes
   // do not have a virtualVT.
@@ -310,6 +308,7 @@
   innerOuterResolved = false;
   display = 0;
   nbInnerClasses = 0;
+  staticTracer = 0;
 #if !defined(ISOLATE) && !defined(ISOLATE_SHARING)
   _staticInstance = 0;
 #endif
@@ -642,7 +641,7 @@
   }
 }
 
-void JavaField::InitField(JavaObject* obj, uint64 val) {
+void JavaField::InitField(void* obj, uint64 val) {
   
   Typedef* type = getSignature();
   if (!type->isPrimitive()) {
@@ -669,19 +668,19 @@
   }
 }
 
-void JavaField::InitField(JavaObject* obj, JavaObject* val) {
+void JavaField::InitField(void* obj, JavaObject* val) {
   ((JavaObject**)((uint64)obj + ptrOffset))[0] = val;
 }
 
-void JavaField::InitField(JavaObject* obj, double val) {
+void JavaField::InitField(void* obj, double val) {
   ((double*)((uint64)obj + ptrOffset))[0] = val;
 }
 
-void JavaField::InitField(JavaObject* obj, float val) {
+void JavaField::InitField(void* obj, float val) {
   ((float*)((uint64)obj + ptrOffset))[0] = val;
 }
 
-void JavaField::initField(JavaObject* obj, Jnjvm* vm) {
+void JavaField::initField(void* obj, Jnjvm* vm) {
   const Typedef* type = getSignature();
   Attribut* attribut = lookupAttribut(Attribut::constantAttribut);
 
@@ -712,11 +711,8 @@
   } 
 }
 
-JavaObject* UserClass::allocateStaticInstance(Jnjvm* vm) {
-  JavaObject* val = 
-    (JavaObject*)vm->gcAllocator.allocateManagedObject(getStaticSize(),
-                                                       getStaticVT());
-  val->initialise(this);
+void* UserClass::allocateStaticInstance(Jnjvm* vm) {
+  void* val = classLoader->allocator.Allocate(getStaticSize());
   setStaticInstance(val);
   return val;
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Nov 27 09:01:54 2008
@@ -124,7 +124,7 @@
 public:
   JavaState status;
   JavaObject* delegatee;
-  JavaObject* staticInstance;
+  mvm::Object* staticInstance;
 };
 #endif
 
@@ -665,27 +665,22 @@
   ///
   bool innerOuterResolved;
   
-  /// staticSize - The size of the static instance of this class.
-  ///
-  uint32 staticSize;
-
-  /// staticVT - The virtual table of the static instance of this class.
+  /// setInnerAccess - Set the access flags of this inner class.
   ///
-  VirtualTable* staticVT;
-
   void setInnerAccess(uint32 access) {
     innerAccess = access;
   }
   
+  /// staticSize - The size of the static instance of this class.
+  ///
+  uint32 staticSize;
+  
+  /// getStaticSize - Get the size of the static instance.
+  ///
   uint32 getStaticSize() {
     return staticSize;
   }
   
-  VirtualTable* getStaticVT() {
-    return staticVT;
-  }
-
-
 #ifndef ISOLATE_SHARING
   /// doNew - Allocates a Java object whose class is this class.
   ///
@@ -711,27 +706,29 @@
   ///
   Attribut* lookupAttribut(const UTF8* key);
   
+  void (*staticTracer)(void*);
+
   /// staticInstance - Get the static instance of this class. A static instance
   /// is inlined when the vm is in a single environment. In a multiple
   /// environment, the static instance is in a hashtable.
   ///
 #if !defined(ISOLATE_SHARING) && !defined(ISOLATE)
-  JavaObject* _staticInstance;
+  void* _staticInstance;
   
-  JavaObject* getStaticInstance() {
+  void* getStaticInstance() {
     return _staticInstance;
   }
   
-  void setStaticInstance(JavaObject* val) {
+  void setStaticInstance(void* val) {
     _staticInstance = val;
   }
 #else
 #if defined(ISOLATE)
-  JavaObject* getStaticInstance() {
+  void* getStaticInstance() {
     return getCurrentTaskClassMirror().staticInstance;
   }
 
-  void setStaticInstance(JavaObject* val) {
+  void setStaticInstance(void* val) {
     getCurrentTaskClassMirror().staticInstance = val;
   }
 
@@ -740,7 +737,7 @@
   
   /// allocateStaticInstance - Allocate the static instance of this class.
   ///
-  JavaObject* allocateStaticInstance(Jnjvm* vm);
+  void* allocateStaticInstance(Jnjvm* vm);
   
   /// Class - Create a class in the given virtual machine and with the given
   /// name.
@@ -1040,10 +1037,10 @@
   
   /// InitField - Set an initial value to the field of an object.
   ///
-  void InitField(JavaObject* obj, uint64 val = 0);
-  void InitField(JavaObject* obj, JavaObject* val);
-  void InitField(JavaObject* obj, double val);
-  void InitField(JavaObject* obj, float val);
+  void InitField(void* obj, uint64 val = 0);
+  void InitField(void* obj, JavaObject* val);
+  void InitField(void* obj, double val);
+  void InitField(void* obj, float val);
 
 public:
 
@@ -1093,7 +1090,7 @@
   /// initField - Init the value of the field in the given object. This is
   /// used for static fields which have a default value.
   ///
-  void initField(JavaObject* obj, Jnjvm* vm);
+  void initField(void* obj, Jnjvm* vm);
 
   /// lookupAttribut - Look up the attribut in the field's list of attributs.
   ///
@@ -1106,7 +1103,7 @@
   /// getVritual*Field - Get a virtual field of an object.
   ///
   #define GETFIELD(TYPE, TYPE_NAME) \
-  TYPE get##TYPE_NAME##Field(JavaObject* obj) { \
+  TYPE get##TYPE_NAME##Field(void* obj) { \
     assert(classDef->isResolved()); \
     void* ptr = (void*)((uint64)obj + ptrOffset); \
     return ((TYPE*)ptr)[0]; \
@@ -1115,7 +1112,7 @@
   /// set*Field - Set a field of an object.
   ///
   #define SETFIELD(TYPE, TYPE_NAME) \
-  void set##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \
+  void set##TYPE_NAME##Field(void* obj, TYPE val) { \
     assert(classDef->isResolved()); \
     void* ptr = (void*)((uint64)obj + ptrOffset); \
     ((TYPE*)ptr)[0] = val; \

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Thu Nov 27 09:01:54 2008
@@ -493,7 +493,7 @@
       } 
 #ifndef ISOLATE_SHARING
       else if (cl->isReady()) {
-        JavaObject* S = field->classDef->getStaticInstance();
+        void* S = field->classDef->getStaticInstance();
         ctpRes[index] = (void*)((uint64)S + field->ptrOffset);
       }
 #endif

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Thu Nov 27 09:01:54 2008
@@ -835,11 +835,9 @@
     if (isVirtual(compilingMethod->access)) {
       argsSync = llvmFunction->arg_begin();
     } else {
-      Value* cl = module->getNativeClass(compilingClass);
+      Value* cl = module->getJavaClass(compilingClass);
       cl = new LoadInst(cl, "", currentBlock);
-      Value* arg = CallInst::Create(module->GetStaticInstanceFunction, cl, "",
-                             currentBlock);
-      argsSync = arg;
+      argsSync = cl;
     }
     llvm::CallInst::Create(module->ReleaseObjectFunction, argsSync, "",
                            synchronizeExceptionBlock);

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Thu Nov 27 09:01:54 2008
@@ -127,7 +127,7 @@
   JavaField* field = cl->lookupField(utf8, sign->keyName, true, true, &fieldCl);
   
   fieldCl->initialiseClass(JavaThread::get()->getJVM());
-  JavaObject* obj = ((UserClass*)fieldCl)->getStaticInstance();
+  void* obj = ((UserClass*)fieldCl)->getStaticInstance();
   
   assert(obj && "No static instance in static field lookup");
   

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Thu Nov 27 09:01:54 2008
@@ -226,7 +226,7 @@
   
   JCL->loadName(threadGroup->getName(), true, true);
   threadGroup->initialiseClass(vm);
-  JavaObject* Stat = threadGroup->getStaticInstance();
+  void* Stat = threadGroup->getStaticInstance();
   JavaObject* RG = rootGroup->getObjectField(Stat);
   group->setObjectField(th, RG);
   groupAddThread->invokeIntSpecial(vm, threadGroup, RG, th);

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Thu Nov 27 09:01:54 2008
@@ -1382,7 +1382,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jobject)field->getObjectField(Stat);
 
   END_EXCEPTION
@@ -1397,7 +1397,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jboolean)field->getInt8Field(Stat);
 
   END_EXCEPTION
@@ -1412,7 +1412,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jbyte)field->getInt8Field(Stat);
 
   END_EXCEPTION
@@ -1427,7 +1427,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jchar)field->getInt16Field(Stat);
 
   END_EXCEPTION
@@ -1442,7 +1442,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jshort)field->getInt16Field(Stat);
 
   END_EXCEPTION
@@ -1457,7 +1457,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jint)field->getInt32Field(Stat);
 
   END_EXCEPTION
@@ -1472,7 +1472,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jlong)field->getLongField(Stat);
 
   END_EXCEPTION
@@ -1487,7 +1487,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jfloat)field->getFloatField(Stat);
 
   END_EXCEPTION
@@ -1502,7 +1502,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   return (jdouble)field->getDoubleField(Stat);
 
   END_EXCEPTION
@@ -1518,7 +1518,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setObjectField(Stat, (JavaObject*)value);
   
   END_EXCEPTION
@@ -1533,7 +1533,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setInt8Field(Stat, (uint8)value);
 
   END_EXCEPTION
@@ -1548,7 +1548,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setInt8Field(Stat, (sint8)value);
 
   END_EXCEPTION
@@ -1563,7 +1563,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setInt16Field(Stat, (uint16)value);
 
   END_EXCEPTION
@@ -1578,7 +1578,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setInt16Field(Stat, (sint16)value);
 
   END_EXCEPTION
@@ -1593,7 +1593,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setInt32Field(Stat, (sint32)value);
 
   END_EXCEPTION
@@ -1608,7 +1608,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setLongField(Stat, (sint64)value);
 
   END_EXCEPTION
@@ -1623,7 +1623,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setFloatField(Stat, (float)value);
 
   END_EXCEPTION
@@ -1638,7 +1638,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaField* field = (JavaField*)fieldID;
   UserClass* cl = (UserClass*)NativeUtil::resolvedImplClass(vm, clazz, true);
-  JavaObject* Stat = cl->getStaticInstance();
+  void* Stat = cl->getStaticInstance();
   field->setDoubleField(Stat, (double)value);
 
   END_EXCEPTION

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Nov 27 09:01:54 2008
@@ -127,12 +127,12 @@
 #if defined(ISOLATE) || defined(ISOLATE_SHARING)
     // Isolate environments allocate the static instance on their own, not when
     // the class is being resolved.
-    JavaObject* val = cl->allocateStaticInstance(vm);
+    void* val = cl->allocateStaticInstance(vm);
 #else
     // Single environment allocates the static instance during resolution, so
     // that compiled code can access it directly (with an initialization
     // check just before the access)
-    JavaObject* val = cl->getStaticInstance();
+    void* val = cl->getStaticInstance();
     if (!val) {
       val = cl->allocateStaticInstance(vm);
     }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Thu Nov 27 09:01:54 2008
@@ -178,7 +178,7 @@
   if (I == End) {
     LLVMClassInfo* LCI = getClassInfo(classDef);
     LCI->getStaticType();
-    JavaObject* obj = ((Class*)classDef)->getStaticInstance();
+    void* obj = ((Class*)classDef)->getStaticInstance();
 #ifndef ISOLATE
     if (!obj && !isStaticCompiling()) {
       Class* cl = (Class*)classDef;
@@ -193,9 +193,9 @@
 #endif
     Constant* cons = 
       ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty,
-                                uint64_t (obj)), JnjvmModule::JavaObjectType);
+                                uint64_t (obj)), ptrType);
       
-    varGV = new GlobalVariable(JnjvmModule::JavaObjectType, !staticCompilation,
+    varGV = new GlobalVariable(ptrType, !staticCompilation,
                                GlobalValue::ExternalLinkage,
                                cons, "", this);
 
@@ -330,13 +330,16 @@
   Value* GC = ++func->arg_begin();
   Args.push_back(GC);
 #endif
-  if (stat || cl->super == 0) {
-    CallInst::Create(JavaObjectTracerFunction, Args.begin(), Args.end(),
-                     "", block);
-  } else {
-    LLVMClassInfo* LCP = (LLVMClassInfo*)getClassInfo((Class*)(cl->super));
-    CallInst::Create(LCP->getVirtualTracer(), Args.begin(),
-                     Args.end(), "", block);
+  if (!stat) {
+    if (cl->super == 0) {
+      CallInst::Create(JavaObjectTracerFunction, Args.begin(), Args.end(),
+                        "", block);
+
+    } else {
+      LLVMClassInfo* LCP = (LLVMClassInfo*)getClassInfo((Class*)(cl->super));
+      CallInst::Create(LCP->getVirtualTracer(), Args.begin(),
+                       Args.end(), "", block);
+    }
   }
   
   for (uint32 i = 0; i < nbFields; ++i) {
@@ -372,79 +375,75 @@
   return func;
 }
 
-VirtualTable* JnjvmModule::makeVT(Class* cl, bool stat) {
+VirtualTable* JnjvmModule::makeVT(Class* cl) {
   
   VirtualTable* VT = 0;
-#ifndef WITHOUT_VTABLE
-  if (stat) {
-#endif
-    mvm::BumpPtrAllocator& allocator = cl->classLoader->allocator;
-    VT = (VirtualTable*)allocator.Allocate(VT_SIZE);
-    memcpy(VT, JavaObject::VT, VT_SIZE);
-#ifndef WITHOUT_VTABLE
+#ifdef WITHOUT_VTABLE
+  mvm::BumpPtrAllocator& allocator = cl->classLoader->allocator;
+  VT = (VirtualTable*)allocator.Allocate(VT_SIZE);
+  memcpy(VT, JavaObject::VT, VT_SIZE);
+#else
+  if (cl->super) {
+    cl->virtualTableSize = cl->super->virtualTableSize;
   } else {
-    if (cl->super) {
-      cl->virtualTableSize = cl->super->virtualTableSize;
-    } else {
-      cl->virtualTableSize = VT_NB_FUNCS;
-    }
+    cl->virtualTableSize = VT_NB_FUNCS;
+  }
+
+  // Allocate the virtual table.
+  VT = allocateVT(cl);
 
-    // Allocate the virtual table.
-    VT = allocateVT(cl);
+  // Fill the virtual table with function pointers.
+  ExecutionEngine* EE = mvm::MvmModule::executionEngine;
+  for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
+    JavaMethod& meth = cl->virtualMethods[i];
+    LLVMMethodInfo* LMI = getMethodInfo(&meth);
+    Function* func = LMI->getMethod();
 
-    // Fill the virtual table with function pointers.
-    ExecutionEngine* EE = mvm::MvmModule::executionEngine;
-    for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
-      JavaMethod& meth = cl->virtualMethods[i];
-      LLVMMethodInfo* LMI = getMethodInfo(&meth);
-      Function* func = LMI->getMethod();
-
-      // Special handling for finalize method. Don't put a finalizer
-      // if there is none, or if it is empty.
-      if (meth.offset == 0) {
+    // Special handling for finalize method. Don't put a finalizer
+    // if there is none, or if it is empty.
+    if (meth.offset == 0) {
 #ifdef ISOLATE_SHARING
-        ((void**)VT)[0] = 0;
+      ((void**)VT)[0] = 0;
 #else
-        JnjvmClassLoader* loader = cl->classLoader;
-        Function* func = loader->getModuleProvider()->parseFunction(&meth);
-        if (!cl->super) meth.canBeInlined = true;
-        Function::iterator BB = func->begin();
-        BasicBlock::iterator I = BB->begin();
-        if (isa<ReturnInst>(I)) {
-          ((void**)VT)[0] = 0;
-        } else {
-          // LLVM does not allow recursive compilation. Create the code now.
-          ((void**)VT)[0] = EE->getPointerToFunction(func);
-        }
+      JnjvmClassLoader* loader = cl->classLoader;
+      Function* func = loader->getModuleProvider()->parseFunction(&meth);
+      if (!cl->super) meth.canBeInlined = true;
+      Function::iterator BB = func->begin();
+      BasicBlock::iterator I = BB->begin();
+      if (isa<ReturnInst>(I)) {
+        ((void**)VT)[0] = 0;
+      } else {
+        // LLVM does not allow recursive compilation. Create the code now.
+        ((void**)VT)[0] = EE->getPointerToFunction(func);
       }
+    }
 #endif
 
-      if (staticCompilation) {
-        ((void**)VT)[meth.offset] = func;
-      } else {
-        ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
-      }
+    if (staticCompilation) {
+      ((void**)VT)[meth.offset] = func;
+    } else {
+      ((void**)VT)[meth.offset] = EE->getPointerToFunctionOrStub(func);
     }
+  }
  
-    // 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*);
+  // 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 + VT_SIZE), \
            (void*)((uintptr_t)VT + VT_SIZE), size);
 
-      COPY(JavaArray)
-      COPY(JavaObject)
-      COPY(ArrayObject)
+    COPY(JavaArray)
+    COPY(JavaObject)
+    COPY(ArrayObject)
 
 #undef COPY
-    }
-  }
+   }
 #endif
   
 #ifdef WITH_TRACER
-  llvm::Function* func = makeTracer(cl, stat);
+  llvm::Function* func = makeTracer(cl, false);
   
   if (staticCompilation) {
     ((void**)VT)[VT_TRACER_OFFSET] = func;
@@ -453,7 +452,6 @@
     ((void**)VT)[VT_TRACER_OFFSET] = codePtr;
     func->deleteBody();
   }
-  
 
 #endif
   return VT;
@@ -474,7 +472,7 @@
     
     for (uint32 i = 0; i < classDef->nbVirtualFields; ++i) {
       JavaField& field = classDef->virtualFields[i];
-      field.num = i;
+      field.num = i + 1;
       Typedef* type = field.getSignature();
       LLVMAssessorInfo& LAI = JnjvmModule::getTypedefInfo(type);
       fields.push_back(LAI.llvmType);
@@ -498,7 +496,7 @@
     
     JnjvmModule* Mod = classDef->classLoader->getModule();
     if (!Mod->isStaticCompiling()) {
-      classDef->virtualVT = Mod->makeVT((Class*)classDef, false);
+      classDef->virtualVT = Mod->makeVT((Class*)classDef);
     }
   
 
@@ -512,7 +510,6 @@
   if (!staticType) {
     Class* cl = (Class*)classDef;
     std::vector<const llvm::Type*> fields;
-    fields.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
 
     for (uint32 i = 0; i < classDef->nbStaticFields; ++i) {
       JavaField& field = classDef->staticFields[i];
@@ -530,15 +527,20 @@
     
     for (uint32 i = 0; i < classDef->nbStaticFields; ++i) {
       JavaField& field = classDef->staticFields[i];
-      field.ptrOffset = sl->getElementOffset(i + 1);
+      field.ptrOffset = sl->getElementOffset(i);
     }
     
     uint64 size = mvm::MvmModule::getTypeSize(structType);
     cl->staticSize = size;
     
     JnjvmModule* Mod = cl->classLoader->getModule();
-    if (!Mod->isStaticCompiling()) {
-      cl->staticVT = Mod->makeVT((Class*)classDef, true);
+    Function* F = Mod->makeTracer(cl, true);
+    if (Mod->isStaticCompiling()) {
+      cl->staticTracer = (void (*)(void*)) (uintptr_t) F;
+    } else {
+      cl->staticTracer = (void (*)(void*)) (uintptr_t)
+        Mod->executionEngine->getPointerToFunction(F);
+      F->deleteBody();
     }
   }
   return staticType;
@@ -627,8 +629,8 @@
     } else {
       JnjvmModule::resolveVirtualClass(fieldDef->classDef); 
     }
-    // Increment by one because zero is JavaObject
-    offsetConstant = ConstantInt::get(Type::Int32Ty, fieldDef->num + 1);
+    
+    offsetConstant = ConstantInt::get(Type::Int32Ty, fieldDef->num);
   }
   return offsetConstant;
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Thu Nov 27 09:01:54 2008
@@ -214,7 +214,7 @@
 
   
   llvm::Function* makeTracer(Class* cl, bool stat);
-  VirtualTable* makeVT(Class* cl, bool stat);
+  VirtualTable* makeVT(Class* cl);
   VirtualTable* allocateVT(Class* cl);
 
   

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Thu Nov 27 09:01:54 2008
@@ -78,7 +78,9 @@
   for (uint32 i =0; i < NR_ISOLATES; ++i) {
     TaskClassMirror &M = IsolateInfo[i];
     M.delegatee->MARK_AND_TRACE;
-    M.staticInstance->MARK_AND_TRACE;
+    if (M.staticInstance) {
+      ((Class*)this)->staticTracer(M.staticInstance);
+    }
   }
 #endif
 }
@@ -87,7 +89,8 @@
   CommonClass::CALL_TRACER;
   bytes->MARK_AND_TRACE;
 #if !defined(ISOLATE)
-  _staticInstance->MARK_AND_TRACE;
+  if (_staticInstance)
+    staticTracer(_staticInstance);
 #endif
 }
 





More information about the vmkit-commits mailing list