[vmkit-commits] [vmkit] r111399 - in /vmkit/trunk: include/j3/J3Intrinsics.h lib/J3/Compiler/J3Intrinsics.cpp lib/J3/Compiler/JavaAOTCompiler.cpp lib/J3/LLVMRuntime/runtime-isolate.ll lib/J3/LLVMRuntime/runtime-single.ll lib/J3/VMCore/JavaClass.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Wed Aug 18 13:25:16 PDT 2010
Author: geoffray
Date: Wed Aug 18 15:25:16 2010
New Revision: 111399
URL: http://llvm.org/viewvc/llvm-project?rev=111399&view=rev
Log:
Don't use a thin lock for class locks: it is not worth it to complicate the code of the ThinLock implementation.
Modified:
vmkit/trunk/include/j3/J3Intrinsics.h
vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll
vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll
vmkit/trunk/lib/J3/VMCore/JavaClass.h
Modified: vmkit/trunk/include/j3/J3Intrinsics.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/include/j3/J3Intrinsics.h (original)
+++ vmkit/trunk/include/j3/J3Intrinsics.h Wed Aug 18 15:25:16 2010
@@ -128,7 +128,6 @@
llvm::Constant* OffsetObjectSizeInClassConstant;
llvm::Constant* OffsetVTInClassConstant;
llvm::Constant* OffsetTaskClassMirrorInClassConstant;
- llvm::Constant* OffsetVirtualMethodsInClassConstant;
llvm::Constant* OffsetStaticInstanceInTaskClassMirrorConstant;
llvm::Constant* OffsetInitializedInTaskClassMirrorConstant;
llvm::Constant* OffsetStatusInTaskClassMirrorConstant;
Modified: vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp Wed Aug 18 15:25:16 2010
@@ -138,8 +138,6 @@
OffsetObjectSizeInClassConstant = constantOne;
OffsetVTInClassConstant = ConstantInt::get(Type::getInt32Ty(Context), 7);
OffsetTaskClassMirrorInClassConstant = constantThree;
- OffsetVirtualMethodsInClassConstant =
- ConstantInt::get(Type::getInt32Ty(Context), 9);
OffsetStaticInstanceInTaskClassMirrorConstant = constantThree;
OffsetStatusInTaskClassMirrorConstant = constantZero;
OffsetInitializedInTaskClassMirrorConstant = constantOne;
Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Wed Aug 18 15:25:16 2010
@@ -1043,9 +1043,6 @@
TempElts.clear();
ClassElts.push_back(ConstantArray::get(ATy, CStr, 1));
- // thinlock
- ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.ptrType));
-
if (cl->nbVirtualFields + cl->nbStaticFields) {
ATy = ArrayType::get(JavaIntrinsics.JavaFieldType->getContainedType(0),
cl->nbVirtualFields + cl->nbStaticFields);
Modified: vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll (original)
+++ vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll Wed Aug 18 15:25:16 2010
@@ -9,7 +9,7 @@
%VT* }
-%JavaClass = type { %JavaCommonClass, i32, i32, [32 x %TaskClassMirror], i8*,
+%JavaClass = type { %JavaCommonClass, i32, i32, [32 x %TaskClassMirror],
%JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16,
%JavaMethod*, i16, i8*, %ArrayUInt8*, i8*, %Attribut*,
i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 }
Modified: vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll (original)
+++ vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll Wed Aug 18 15:25:16 2010
@@ -6,7 +6,7 @@
%JavaClass**, i16, %UTF8*, %JavaClass*, i8*, %VT* }
-%JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror], i8*,
+%JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror],
%JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16,
%JavaMethod*, i16, i8*, %ArrayUInt8*, i8*, %Attribut*,
i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 }
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Wed Aug 18 15:25:16 2010
@@ -404,67 +404,6 @@
///
class Class : public CommonClass {
-private:
-
- /// FatLock - This class is the inflated lock of Class instances. It should
- /// be very rare that such locks are allocated.
- class FatLock : public mvm::PermanentObject {
- public:
- /// lockVar - When multiple threads want to load/resolve/initialize a class,
- /// they must be synchronized so that these steps are only performed once
- /// for a given class.
- mvm::LockRecursive lockVar;
-
- /// condVar - Used to wake threads waiting on the load/resolve/initialize
- /// process of this class, done by another thread.
- mvm::Cond condVar;
-
- bool owner() {
- return lockVar.selfOwner();
- }
-
- mvm::Thread* getOwner() {
- return lockVar.getOwner();
- }
-
- static FatLock* allocate(UserCommonClass* cl) {
- return new(cl->classLoader->allocator, "Class fat lock") FatLock();
- }
-
- uintptr_t getID() {
- return (((uintptr_t)this) >> 1) | mvm::FatMask;
- }
-
- static FatLock* getFromID(uintptr_t id) {
- return (FatLock*)(id << 1);
- }
-
- void deallocate() {
- // Too bad, I can't deallocate it because it is in permanent memory.
- }
-
- bool acquire(CommonClass* cl) {
- lockVar.lock();
- return true;
- }
-
- void acquireAll(uint32 nb) {
- lockVar.lockAll(nb);
- }
-
- void release(CommonClass* cl) {
- lockVar.unlock();
- }
-
- void broadcast() {
- condVar.broadcast();
- }
-
- void wait() {
- condVar.wait(&lockVar);
- }
- };
-
public:
/// virtualSize - The size of instances of this class.
@@ -480,11 +419,6 @@
///
TaskClassMirror IsolateInfo[NR_ISOLATES];
- /// lock - The lock of this class. It should be very rare that this lock
- /// inflates.
- ///
- mvm::ThinLock<FatLock, CommonClass, mvm::FatLockNoGC> lock;
-
/// virtualFields - List of all the virtual fields defined in this class.
/// This does not contain non-redefined super fields.
JavaField* virtualFields;
@@ -568,6 +502,10 @@
/// staticSize - The size of the static instance of this class.
///
uint32 staticSize;
+
+ /// lock - The lock of this class.
+ mvm::LockRecursive lock;
+ mvm::Cond condition;
/// getVirtualSize - Get the virtual size of instances of this class.
///
@@ -751,27 +689,26 @@
/// acquire - Acquire this class lock.
///
void acquire() {
- lock.acquire(this);
+ lock.lock();
}
/// release - Release this class lock.
///
void release() {
- lock.release(this);
+ lock.unlock();
}
/// waitClass - Wait for the class to be loaded/initialized/resolved.
///
void waitClass() {
- FatLock* FL = lock.changeToFatlock(this);
- FL->wait();
+ condition.wait(&lock);
}
/// broadcastClass - Unblock threads that were waiting on the class being
/// loaded/initialized/resolved.
///
void broadcastClass() {
- lock.broadcast();
+ condition.broadcast();
}
#ifndef ISOLATE
More information about the vmkit-commits
mailing list