[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