[vmkit-commits] [vmkit] r117365 - in /vmkit/trunk: include/j3/J3Intrinsics.h lib/J3/Compiler/ExceptionsDwarf.inc lib/J3/Compiler/J3Intrinsics.cpp lib/J3/Compiler/JavaJIT.cpp lib/J3/Compiler/JavaJIT.h

Gael Thomas gael.thomas at lip6.fr
Tue Oct 26 07:23:08 PDT 2010


Author: gthomas
Date: Tue Oct 26 09:23:08 2010
New Revision: 117365

URL: http://llvm.org/viewvc/llvm-project?rev=117365&view=rev
Log:
continue the unification

Modified:
    vmkit/trunk/include/j3/J3Intrinsics.h
    vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc
    vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
    vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/J3/Compiler/JavaJIT.h

Modified: vmkit/trunk/include/j3/J3Intrinsics.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/include/j3/J3Intrinsics.h (original)
+++ vmkit/trunk/include/j3/J3Intrinsics.h Tue Oct 26 09:23:08 2010
@@ -132,7 +132,8 @@
   llvm::Constant* OffsetStatusInTaskClassMirrorConstant;
   
   llvm::Constant* OffsetDoYieldInThreadConstant;
-  llvm::Constant* OffsetIsolateInThreadConstant;
+  llvm::Constant* OffsetIsolateIDInThreadConstant;
+  llvm::Constant* OffsetVMInThreadConstant;
   llvm::Constant* OffsetCXXExceptionInThreadConstant;
 	llvm::Constant* OffsetThreadInMutatorThreadConstant;
   llvm::Constant* OffsetJNIInJavaThreadConstant;

Modified: vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc (original)
+++ vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc Tue Oct 26 09:23:08 2010
@@ -390,10 +390,7 @@
     // catch the exception but resume unwinding.
     JnjvmClassLoader* loader = compilingClass->classLoader;;
     if (loader != loader->bootstrapLoader) {
-      Value* threadId = getCurrentThread(module->MutatorThreadType);
-      Value* Isolate = GetElementPtrInst::Create(threadId,
-                                                 module->constantFour, "",
-                                                 currentBlock);
+      Value* Isolate = genGetVMPtr(genGetMutatorThreadPtr());
      
       Isolate = new LoadInst(Isolate, "", currentBlock);
       Isolate = new BitCastInst(Isolate, module->ptrPtrType, "", currentBlock);
@@ -415,13 +412,9 @@
     }
 #endif
    
-    Value* threadId = getCurrentThread(module->JavaThreadType);
-    Value* geps[2] = { module->constantZero,
-                       module->OffsetJavaExceptionInJavaThreadConstant };
-
-    Value* javaExceptionPtr = GetElementPtrInst::Create(threadId, geps,
-                                                        geps + 2, "",
-                                                        currentBlock);
+		Value* mutatorThreadId = genGetMutatorThreadPtr();
+		Value* javaThreadId = genGetJavaThreadPtr(mutatorThreadId);
+    Value* javaExceptionPtr = getGetJavaExceptionPtr(javaThreadId);
     
     // Get the Java exception.
     Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock);
@@ -467,21 +460,13 @@
     
     currentBlock = cur->nativeHandler;
  
-    threadId = getCurrentThread(module->JavaThreadType);
-    javaExceptionPtr = GetElementPtrInst::Create(threadId, geps, geps + 2, "",
-                                                 currentBlock);
+		mutatorThreadId = genGetMutatorThreadPtr();
+		javaThreadId = genGetJavaThreadPtr(mutatorThreadId);
+    javaExceptionPtr = getGetJavaExceptionPtr(javaThreadId);
     
     // Get the Java exception.
     Value* exc = new LoadInst(javaExceptionPtr, "", currentBlock);
-    
-    Value* geps2[4] = { module->constantZero,
-                        module->constantZero,
-												module->OffsetThreadInMutatorThreadConstant,
-                        module->OffsetCXXExceptionInThreadConstant };
-    
-    Value* cxxExceptionPtr = GetElementPtrInst::Create(threadId, geps2,
-                                                       geps2 + 4, "",
-                                                       currentBlock);
+    Value* cxxExceptionPtr = genGetCXXExceptionPtr(mutatorThreadId);
 
     // Clear exceptions.
     new StoreInst(module->constantPtrNull, cxxExceptionPtr, currentBlock);
@@ -517,7 +502,7 @@
   
     // Change the isolate we are currently running, now that we have catched
     // the exception: the exception may have been thrown by another isolate.
-    Value* threadId = 0;
+    Value* mutatorThreadId = 0;
     Value* OldIsolateID = 0;
     Value* IsolateIDPtr = 0;
     Value* OldIsolate = 0;
@@ -525,10 +510,10 @@
     Value* IsolatePtr = 0;
     currentBlock = cur->javaHandler;
     if (loader != loader->bootstrapLoader) {
-      threadId = getCurrentThread(module->MutatorThreadType);
+      mutatorThreadId = genGetMutatorThreadPtr();
      
-      IsolateIDPtr = GetElementPtrInst::Create(threadId, module->constantThree,
-                                               "", cur->javaHandler);
+      IsolateIDPtr = genGetIsolateIDPtr(mutatorThreadId);
+
       const Type* realType = PointerType::getUnqual(module->pointerSizeType);
       IsolateIDPtr = new BitCastInst(IsolateIDPtr, realType, "",
                                      cur->javaHandler);
@@ -538,8 +523,7 @@
                                      loader->getIsolate()->IsolateID);
 
       new StoreInst(MyID, IsolateIDPtr, cur->javaHandler);
-      IsolatePtr = GetElementPtrInst::Create(threadId, module->constantFour, "",
-                                             cur->javaHandler);
+      IsolatePtr = genGetVMPtr(mutatorThreadId);
      
       OldIsolate = new LoadInst(IsolatePtr, "", cur->javaHandler);
       NewIsolate = module->getIsolate(loader->getIsolate(), currentBlock);
@@ -562,18 +546,9 @@
   if (PI == PE) {
     endExceptionBlock->eraseFromParent();
   } else {
-    Value* threadId = getCurrentThread(module->JavaThreadType);
-    Value* geps2[4] = { module->constantZero,
-                        module->constantZero,
-												module->OffsetThreadInMutatorThreadConstant,
-                        module->OffsetCXXExceptionInThreadConstant };
-    
-    Value* cxxExceptionPtr = GetElementPtrInst::Create(threadId, geps2,
-                                                       geps2 + 4, "",
-                                                       currentBlock);
-    cxxExceptionPtr = new LoadInst(cxxExceptionPtr, "", currentBlock);
-    llvm::CallInst::Create(module->unwindResume, cxxExceptionPtr, "",
-                           currentBlock);
+    Value* cxxExceptionPtr = genGetCXXExceptionPtr(genGetMutatorThreadPtr());
+    Value* cxxException = new LoadInst(cxxExceptionPtr, "", currentBlock);
+    llvm::CallInst::Create(module->unwindResume, cxxException, "", currentBlock);
     new UnreachableInst(currentBlock);
   }
   

Modified: vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp Tue Oct 26 09:23:08 2010
@@ -142,7 +142,8 @@
   OffsetStatusInTaskClassMirrorConstant = constantZero;
   OffsetInitializedInTaskClassMirrorConstant = constantOne;
   
-  OffsetIsolateInThreadConstant =           ConstantInt::get(Type::getInt32Ty(Context), 1);
+  OffsetIsolateIDInThreadConstant =         ConstantInt::get(Type::getInt32Ty(Context), 1);
+  OffsetVMInThreadConstant =                ConstantInt::get(Type::getInt32Ty(Context), 2);
   OffsetDoYieldInThreadConstant =           ConstantInt::get(Type::getInt32Ty(Context), 4);
   OffsetCXXExceptionInThreadConstant =      ConstantInt::get(Type::getInt32Ty(Context), 11);
 	OffsetThreadInMutatorThreadConstant =     ConstantInt::get(Type::getInt32Ty(Context), 0);

Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp Tue Oct 26 09:23:08 2010
@@ -274,6 +274,69 @@
   return threadId;
 }
 
+llvm::Value* JavaJIT::genGetMutatorThreadPtr() {
+  Value* FrameAddr = CallInst::Create(intrinsics->llvm_frameaddress,
+                                     	intrinsics->constantZero, "", currentBlock);
+  Value* threadId = new PtrToIntInst(FrameAddr, intrinsics->pointerSizeType, "",
+                              			 currentBlock);
+  threadId = BinaryOperator::CreateAnd(threadId, intrinsics->constantThreadIDMask,
+                                       "", currentBlock);
+  threadId = new IntToPtrInst(threadId, intrinsics->MutatorThreadType, "", currentBlock);
+
+  return threadId;
+}
+
+llvm::Value* JavaJIT::genGetJavaThreadPtr(llvm::Value* mutatorThreadPtr) {
+  return new BitCastInst(mutatorThreadPtr, intrinsics->JavaThreadType, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetIsolateIDPtr(llvm::Value* mutatorThreadPtr) { 
+	Value* GEP[3] = { intrinsics->constantZero,
+										intrinsics->OffsetThreadInMutatorThreadConstant,
+										intrinsics->OffsetIsolateIDInThreadConstant };
+    
+	return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetVMPtr(llvm::Value* mutatorThreadPtr) { 
+	Value* GEP[3] = { intrinsics->constantZero,
+										intrinsics->OffsetThreadInMutatorThreadConstant,
+										intrinsics->OffsetVMInThreadConstant };
+    
+	return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetDoYieldPtr(llvm::Value* mutatorThreadPtr) { 
+	Value* GEP[3] = { intrinsics->constantZero,
+										intrinsics->OffsetThreadInMutatorThreadConstant,
+										intrinsics->OffsetDoYieldInThreadConstant };
+    
+	return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetCXXExceptionPtr(llvm::Value* mutatorThreadPtr) { 
+	Value* GEP[3] = { intrinsics->constantZero,
+										intrinsics->OffsetThreadInMutatorThreadConstant,
+										intrinsics->OffsetCXXExceptionInThreadConstant };
+    
+	return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetJNIEnvPtr(llvm::Value* javaThreadPtr) { 
+	Value* GEP[2] = { intrinsics->constantZero,
+										intrinsics->OffsetJNIInJavaThreadConstant };
+    
+	return GetElementPtrInst::Create(javaThreadPtr, GEP, GEP + 2, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetJavaExceptionPtr(llvm::Value* javaThreadPtr) { 
+	Value* GEP[2] = { intrinsics->constantZero,
+										intrinsics->OffsetJavaExceptionInJavaThreadConstant };
+    
+	return GetElementPtrInst::Create(javaThreadPtr, GEP, GEP + 2, "", currentBlock);
+}
+
+
 extern "C" void j3ThrowExceptionFromJIT();
 
 llvm::Function* JavaJIT::nativeCompile(intptr_t natPtr) {
@@ -351,13 +414,7 @@
   std::vector<Value*> nativeArgs;
   
   
-  Value* threadId = getCurrentThread(intrinsics->JavaThreadType);
-
-  Value* geps[2] = { intrinsics->constantZero,
-                     intrinsics->OffsetJNIInJavaThreadConstant };
-
-  Value* jniEnv = GetElementPtrInst::Create(threadId, geps, geps + 2, "",
-                                            currentBlock);
+  Value* jniEnv = genGetJNIEnvPtr(genGetJavaThreadPtr(genGetMutatorThreadPtr()));
  
   jniEnv = new BitCastInst(jniEnv, intrinsics->ptrType, "", currentBlock);
 
@@ -1162,14 +1219,7 @@
   }
   
   if (TheCompiler->useCooperativeGC()) {
-    Value* threadId = getCurrentThread(intrinsics->MutatorThreadType);
-    
-    Value* GEP[3] = { intrinsics->constantZero,
-											intrinsics->OffsetThreadInMutatorThreadConstant,
-                      intrinsics->OffsetDoYieldInThreadConstant };
-    
-    Value* YieldPtr = GetElementPtrInst::Create(threadId, GEP, GEP + 3, "",
-                                                currentBlock);
+    Value* YieldPtr = genGetDoYieldPtr(genGetMutatorThreadPtr());
 
     Value* Yield = new LoadInst(YieldPtr, "", currentBlock);
 

Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.h?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaJIT.h (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaJIT.h Tue Oct 26 09:23:08 2010
@@ -154,6 +154,17 @@
   /// getCurrentThread - Emit code to get the current thread.
   llvm::Value* getCurrentThread(const llvm::Type* Ty);
 
+	llvm::Value* genGetMutatorThreadPtr();
+	llvm::Value* genGetIsolateIDPtr(llvm::Value* mutatorThreadPtr);
+	llvm::Value* genGetVMPtr(llvm::Value* mutatorThreadPtr);
+	llvm::Value* genGetDoYieldPtr(llvm::Value* mutatorThreadPtr);
+	llvm::Value* genGetCXXExceptionPtr(llvm::Value* mutatorThreadPtr);
+
+	llvm::Value* genGetJavaThreadPtr(llvm::Value* mutatorThreadPtr);
+	llvm::Value* genGetJNIEnvPtr(llvm::Value* javaThreadPtr);
+	llvm::Value* genGetJavaExceptionPtr(llvm::Value* javaThreadPtr);
+	
+
 //===------------------------- Debugging support --------------------------===//
   
   llvm::MDNode* DbgSubprogram;





More information about the vmkit-commits mailing list