[vmkit-commits] [vmkit] r55595 - in /vmkit/branches/isolate/lib/JnJVM: Isolate/IsolateCommonClass.cpp Isolate/IsolateCommonClass.h VMCore/JavaClass.h VMCore/JavaConstantPool.cpp VMCore/JavaJIT.cpp VMCore/JavaRuntimeJIT.cpp VMCore/JnjvmModuleProvider.cpp VMCore/LowerConstantCalls.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Aug 31 22:47:17 PDT 2008


Author: geoffray
Date: Mon Sep  1 00:47:17 2008
New Revision: 55595

URL: http://llvm.org/viewvc/llvm-project?rev=55595&view=rev
Log:
Small bugfixes, assertion correction and improvements for the isolate
environment.


Modified:
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp
    vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
    vmkit/branches/isolate/lib/JnJVM/VMCore/LowerConstantCalls.cpp

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.cpp Mon Sep  1 00:47:17 2008
@@ -94,6 +94,8 @@
             def->status = prepared;
             status = prepared;
             def->classLoader->TheModule->resolveVirtualClass(def);
+            virtualSize = def->virtualSize;
+            virtualVT = def->virtualVT;
             def->status = resolved;
             status = resolved;
             classDef->broadcastClass();
@@ -159,7 +161,7 @@
       temp = loader->loadName(name, true, false);
     }
     ctpRes[index] = temp;
-    ctpInfo->ctpRes[index] = getClass()->classDef;
+    ctpInfo->ctpRes[index] = temp->classDef;
   }
   return temp;
 }

Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h Mon Sep  1 00:47:17 2008
@@ -188,7 +188,7 @@
                                   UserCommonClass*& fieldCl);
   
   
-  uint64 getVirtualSize() {
+  uint32 getVirtualSize() {
     return virtualSize;
   }
 
@@ -319,7 +319,7 @@
     return ctpInfo;
   }
 
-  uint64 getStaticSize() {
+  uint32 getStaticSize() {
     return ((Class*)classDef)->getStaticSize();
   }
 

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h Mon Sep  1 00:47:17 2008
@@ -963,7 +963,7 @@
   ///
   #define GETFIELD(TYPE, TYPE_NAME) \
   TYPE get##TYPE_NAME##Field(JavaObject* obj) { \
-    assert((classDef->getStatus()) >= inClinit); \
+    assert(classDef->isResolved()); \
     void* ptr = (void*)((uint64)obj + ptrOffset); \
     return ((TYPE*)ptr)[0]; \
   }
@@ -972,7 +972,7 @@
   ///
   #define SETFIELD(TYPE, TYPE_NAME) \
   void set##TYPE_NAME##Field(JavaObject* obj, TYPE val) { \
-    assert((classDef->getStatus()) >= inClinit); \
+    assert(classDef->isResolved()); \
     void* ptr = (void*)((uint64)obj + ptrOffset); \
     ((TYPE*)ptr)[0] = val; \
   }

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp Mon Sep  1 00:47:17 2008
@@ -434,7 +434,7 @@
   assert(sign && "No cached signature after JITting");
   utf8 = UTF8At(ctpDef[ntIndex] >> 16);
   cl = loadClass(entry >> 16);
-  cl->resolveClass();
+  assert(cl && cl->isResolved() && "No class after loadClass");
 }
   
 void JavaConstantPool::resolveField(uint32 index, CommonClass*& cl,
@@ -445,7 +445,7 @@
   assert(sign && "No cached Typedef after JITting");
   utf8 = UTF8At(ctpDef[ntIndex] >> 16);
   cl = loadClass(entry >> 16);
-  cl->resolveClass();
+  assert(cl && cl->isResolved() && "No class after loadClass");
 }
 
 JavaField* JavaConstantPool::lookupField(uint32 index, bool stat) {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp Mon Sep  1 00:47:17 2008
@@ -2060,6 +2060,12 @@
                         "", ifFalse);
   Value* meth = new BitCastInst(_meth, virtualPtrType, "", 
                                 currentBlock);
+#ifdef MULTIPLE_VM
+  cache = new LoadInst(cachePtr, "", currentBlock);
+  Value* newCtpCache = CallInst::Create(JnjvmModule::GetCtpCacheNodeFunction,
+                                        cache, "", currentBlock);
+  args.push_back(newCtpCache);
+#endif
   Value* ret = invoke(meth, args, "", currentBlock);
   if (node) {
     node->addIncoming(ret, currentBlock);
@@ -2075,9 +2081,10 @@
   meth = new BitCastInst(_meth, virtualPtrType, "", currentBlock);
   
 #ifdef MULTIPLE_VM
+  args.pop_back();
   cache = new LoadInst(cachePtr, "", currentBlock);
-  Value* newCtpCache = CallInst::Create(JnjvmModule::GetCtpCacheNodeFunction,
-                                        cache, "", currentBlock);
+  newCtpCache = CallInst::Create(JnjvmModule::GetCtpCacheNodeFunction,
+                                 cache, "", currentBlock);
   args.push_back(newCtpCache);
 #endif
   ret = invoke(meth, args, "", currentBlock);

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Mon Sep  1 00:47:17 2008
@@ -58,9 +58,13 @@
   }
 
   if (!rcache) {
+#ifndef MULTIPLE_VM
     JavaMethod* dmeth = ocl->lookupMethod(utf8, sign->keyName, false, true);
     assert(dmeth->classDef->isReady() &&
            "Class not ready in a virtual lookup.");
+#else
+    JavaMethod* dmeth = ocl->lookupMethod(utf8, sign->keyName, false, true);
+#endif
     if (cache->methPtr) {
       rcache = new CacheNode(enveloppe);
     } else {

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Mon Sep  1 00:47:17 2008
@@ -98,7 +98,9 @@
     LLVMMethodInfo* LMI = ((JnjvmModule*)TheModule)->getMethodInfo(meth);
     uint64_t offset = LMI->getOffset()->getZExtValue();
     assert(meth->classDef->isResolved() && "Class not resolved");
+#ifndef MULTIPLE_VM
     assert(meth->classDef->isReady() && "Class not ready");
+#endif
     assert(meth->classDef->virtualVT && "Class has no VT");
     assert(meth->classDef->virtualTableSize > offset && 
         "The method's offset is greater than the virtual table size");

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=55595&r1=55594&r2=55595&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/LowerConstantCalls.cpp Mon Sep  1 00:47:17 2008
@@ -330,6 +330,17 @@
           Value* VT = new LoadInst(VTPtr, "", CI);
           CI->replaceAllUsesWith(VT);
           CI->eraseFromParent();
+        } else if (V == jnjvm::JnjvmModule::GetCtpCacheNodeFunction) {
+          Changed = true;
+          Value* val = Call.getArgument(0); 
+          std::vector<Value*> indexes; 
+          indexes.push_back(mvm::jit::constantZero);
+          indexes.push_back(mvm::jit::constantFour);
+          Value* VTPtr = GetElementPtrInst::Create(val, indexes.begin(),
+                                                   indexes.end(), "", CI);
+          Value* VT = new LoadInst(VTPtr, "", CI);
+          CI->replaceAllUsesWith(VT);
+          CI->eraseFromParent();
         } else if (V == jnjvm::JnjvmModule::GetJnjvmArrayClassFunction) {
           Changed = true;
           Value* val = Call.getArgument(0); 





More information about the vmkit-commits mailing list