[vmkit-commits] [vmkit] r180285 - Modified lock , JavaArray size / elements access.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 09:49:24 PDT 2013


Author: peter.senna
Date: Thu Apr 25 11:47:30 2013
New Revision: 180285

URL: http://llvm.org/viewvc/llvm-project?rev=180285&view=rev
Log:
Modified lock , JavaArray size / elements access.
(cherry picked from commit 3e25e3bb4a434434914d49221430be25efe82c28)

Modified:
    vmkit/trunk/include/j3/J3Intrinsics.h
    vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
    vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/j3/Compiler/JavaJIT.h
    vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp

Modified: vmkit/trunk/include/j3/J3Intrinsics.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=180285&r1=180284&r2=180285&view=diff
==============================================================================
--- vmkit/trunk/include/j3/J3Intrinsics.h (original)
+++ vmkit/trunk/include/j3/J3Intrinsics.h Thu Apr 25 11:47:30 2013
@@ -30,9 +30,8 @@ public:
   llvm::Type* JavaArrayDoubleType;
   llvm::Type* JavaArrayObjectType;
   
-  llvm::Type* ExceptionBufferType;
   llvm::Type* VTType;
-  llvm::Type* JavaVTType;
+  llvm::Type* ObjectHeaderType;
   llvm::Type* JavaObjectType;
   llvm::Type* JavaArrayType;
   llvm::Type* JavaCommonClassType;
@@ -45,7 +44,7 @@ public:
   llvm::Type* UTF8Type;
   llvm::Type* JavaMethodType;
   llvm::Type* JavaFieldType;
-  llvm::Type* AttributeType;
+  llvm::Type* AttributType;
   llvm::Type* JavaThreadType;
   llvm::Type* MutatorThreadType;
   llvm::Type* J3DenseMapType;
@@ -60,7 +59,6 @@ public:
   llvm::Function* PrintMethodEndFunction;
   llvm::Function* InitialiseClassFunction;
   llvm::Function* InitialisationCheckFunction;
-  llvm::Function* InitialisationCheckForJavaObjectFunction;
   llvm::Function* ForceInitialisationCheckFunction;
   llvm::Function* ForceLoadedCheckFunction;
   llvm::Function* ClassLookupFunction;
@@ -84,10 +82,6 @@ public:
   llvm::Function* MultiCallNewFunction;
   llvm::Function* GetArrayClassFunction;
 
-//  llvm::Function *CodeMarker1Function, *CodeMarker2Function;
-  llvm::Function* SetIsolateFunction;
-  llvm::Function* GetCachedValueFunction;
-  llvm::Function* GetClassDelegateePtrFunction;
   llvm::Function* GetClassDelegateeFunction;
   llvm::Function* RuntimeDelegateeFunction;
   llvm::Function* ArrayLengthFunction;
@@ -109,9 +103,9 @@ public:
   llvm::Function* GetFinalFloatFieldFunction;
   llvm::Function* GetFinalDoubleFieldFunction;
   
-  llvm::Constant* JavaArraySizeOffsetConstant;
   llvm::Constant* JavaArrayElementsOffsetConstant;
-  llvm::Constant* JavaObjectLockOffsetConstant;
+  llvm::Constant* HeaderArraySizeOffsetConstant;
+  llvm::Constant* HeaderObjectLockOffsetConstant;
   llvm::Constant* JavaObjectVTOffsetConstant;
 
   llvm::Constant* OffsetAccessInCommonClassConstant;
@@ -123,8 +117,6 @@ public:
   llvm::Constant* OffsetStaticInstanceInTaskClassMirrorConstant;
   llvm::Constant* OffsetInitializedInTaskClassMirrorConstant;
   llvm::Constant* OffsetStatusInTaskClassMirrorConstant;
-  llvm::Constant* OffsetCommonClassInClassConstant;
-  llvm::Constant* OffsetCommonClassInJavaVirtualTableConstant;
   
   llvm::Constant* OffsetDoYieldInThreadConstant;
   llvm::Constant* OffsetIsolateIDInThreadConstant;
@@ -158,11 +150,6 @@ public:
   llvm::Function* ArrayStoreExceptionFunction;
   llvm::Function* ArithmeticExceptionFunction;
   llvm::Function* ThrowExceptionFromJITFunction;
-
-  llvm::Constant* CurrentIsolateID;
-  llvm::Constant* OffsetHandlerMethodInExceptionBufferConstant;
-  llvm::Constant* OffsetHandlerIsolateIDInExceptionBufferConstant;
-  llvm::Constant* OffsetSetJmpBufferInExceptionBufferConstant;
 };
 
 }

Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180285&r1=180284&r2=180285&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 11:47:30 2013
@@ -46,6 +46,10 @@ void J3Intrinsics::init(llvm::Module* mo
 
   ResolvedConstantPoolType = ptrPtrType;
  
+
+  ObjectHeaderType = PointerType::getUnqual(module->getPointerSize() == Module::Pointer32 ?
+  		    Type::getInt32Ty(Context) : Type::getInt64Ty(Context));
+
   JavaObjectType = 
     PointerType::getUnqual(module->getTypeByName("JavaObject"));
 
@@ -111,11 +115,17 @@ void J3Intrinsics::init(llvm::Module* mo
                                           sizeof(JavaObject) + sizeof(ssize_t));
   
   
-  JavaArrayElementsOffsetConstant = constantTwo;
-  JavaArraySizeOffsetConstant = constantOne;
-  JavaObjectLockOffsetConstant = constantOne;
+
+  JavaArrayElementsOffsetConstant = constantOne;
+  //JavaArraySizeOffsetConstant = constantOne;
+  HeaderArraySizeOffsetConstant = constantZero;
+
+  //  JavaObjectLockOffsetConstant = constantOne;
+  HeaderObjectLockOffsetConstant = constantZero;
+
   JavaObjectVTOffsetConstant = constantZero;
 
+
   OffsetClassInVTConstant =
     ConstantInt::get(Type::getInt32Ty(Context),
                      JavaVirtualTable::getClassIndex());

Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180285&r1=180284&r2=180285&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:47:30 2013
@@ -25,6 +25,7 @@
 #include <llvm/Support/CFG.h>
 
 #include "vmkit/JIT.h"
+#include "vmkit/GC.h"
 
 #include "debug.h"
 #include "JavaArray.h"
@@ -724,22 +725,23 @@ llvm::Function* JavaJIT::nativeCompile(w
   return llvmFunction;
 }
 
+llvm::Value* JavaJIT::objectToHeader(Value* obj) {
+  obj = new PtrToIntInst(obj, intrinsics->pointerSizeType, "", currentBlock);
+  Value* d = ConstantInt::get(intrinsics->pointerSizeType, gcHeader::hiddenHeaderSize());
+	obj = BinaryOperator::CreateSub(obj, d, "", currentBlock);
+	return new IntToPtrInst(obj, intrinsics->ObjectHeaderType, "", currentBlock);
+}
+
 void JavaJIT::monitorEnter(Value* obj) {
-  std::vector<Value*> gep;
-  gep.push_back(intrinsics->constantZero);
-  gep.push_back(intrinsics->JavaObjectLockOffsetConstant);
-  Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock);
-  
+  Value* lockPtr = objectToHeader(obj);
+
   Value* lock = new LoadInst(lockPtr, "", currentBlock);
-  lock = new PtrToIntInst(lock, intrinsics->pointerSizeType, "", currentBlock);
+
   Value* NonLockBitsMask = ConstantInt::get(intrinsics->pointerSizeType,
                                             vmkit::ThinLock::NonLockBitsMask);
 
   lock = BinaryOperator::CreateAnd(lock, NonLockBitsMask, "", currentBlock);
 
-  lockPtr = new BitCastInst(lockPtr, 
-                            PointerType::getUnqual(intrinsics->pointerSizeType),
-                            "", currentBlock);
   Value* threadId = getMutatorThreadPtr();
   threadId = new PtrToIntInst(threadId, intrinsics->pointerSizeType, "",
                               currentBlock);
@@ -768,14 +770,10 @@ void JavaJIT::monitorEnter(Value* obj) {
 }
 
 void JavaJIT::monitorExit(Value* obj) {
-  std::vector<Value*> gep;
-  gep.push_back(intrinsics->constantZero);
-  gep.push_back(intrinsics->JavaObjectLockOffsetConstant);
-  Value* lockPtr = GetElementPtrInst::Create(obj, gep, "", currentBlock);
-  lockPtr = new BitCastInst(lockPtr, 
-                            PointerType::getUnqual(intrinsics->pointerSizeType),
-                            "", currentBlock);
+	Value* lockPtr = objectToHeader(obj);
+
   Value* lock = new LoadInst(lockPtr, "", currentBlock);
+
   Value* NonLockBitsMask = ConstantInt::get(
       intrinsics->pointerSizeType, vmkit::ThinLock::NonLockBitsMask);
 

Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.h?rev=180285&r1=180284&r2=180285&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.h (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.h Thu Apr 25 11:47:30 2013
@@ -163,6 +163,9 @@ private:
   llvm::PHINode* endNode;
 
   llvm::Value* jmpBuffer;
+
+  /// return the header of an object
+  llvm::Value* objectToHeader(llvm::Value* obj);
   
   /// arraySize - Get the size of the array.
   llvm::Value* arraySize(llvm::Value* obj) {

Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180285&r1=180284&r2=180285&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 11:47:30 2013
@@ -2164,16 +2164,12 @@ void JavaJIT::compileOpcodes(Reader& rea
         TheVT = new BitCastInst(TheVT, intrinsics->ptrType, "", currentBlock);
         Instruction* res = invoke(intrinsics->AllocateFunction, size, TheVT, "",
                                   currentBlock);
-        Value* cast = new BitCastInst(res, intrinsics->JavaArrayType, "",
-                                      currentBlock);
 
+
+        Value* header = objectToHeader(res);
         // Set the size
-        Value* gep4[2] = { intrinsics->constantZero,
-                           intrinsics->JavaArraySizeOffsetConstant };
-        Value* GEP = GetElementPtrInst::Create(cast, gep4, "", currentBlock);
-        
         arg1 = new IntToPtrInst(arg1, intrinsics->ptrType, "", currentBlock);
-        new StoreInst(arg1, GEP, currentBlock);
+        new StoreInst(arg1, header, currentBlock);
        
         addHighLevelType(res, dcl ? dcl : upcalls->ArrayOfObject);
         res = new BitCastInst(res, intrinsics->JavaObjectType, "", currentBlock);





More information about the vmkit-commits mailing list