[vmkit-commits] [vmkit] r197883 - defines a J3LocalReferences class and uses it

Gael Thomas gael.thomas at lip6.fr
Sun Dec 22 09:34:39 PST 2013


Author: gthomas
Date: Sun Dec 22 11:34:38 2013
New Revision: 197883

URL: http://llvm.org/viewvc/llvm-project?rev=197883&view=rev
Log:
defines a J3LocalReferences class and uses it

Modified:
    vmkit/branches/mcjit/include/j3/j3classloader.h
    vmkit/branches/mcjit/include/j3/j3object.h
    vmkit/branches/mcjit/include/j3/j3thread.h
    vmkit/branches/mcjit/include/vmkit/stack.h
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc
    vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
    vmkit/branches/mcjit/lib/j3/vm/j3object.cc
    vmkit/branches/mcjit/lib/j3/vm/j3thread.cc

Modified: vmkit/branches/mcjit/include/j3/j3classloader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3classloader.h?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3classloader.h (original)
+++ vmkit/branches/mcjit/include/j3/j3classloader.h Sun Dec 22 11:34:38 2013
@@ -38,7 +38,7 @@ namespace j3 {
 		static J3MethodLess  j3MethodLess;
 
 		J3ObjectHandle*                      _javaClassLoader;
-		J3FixedPoint                         _fixedPoint;
+		J3LocalReferences                    _globalReferences;
 		pthread_mutex_t                      _mutex;       /* a lock */
 		vmkit::NameMap<J3Class*>::map        classes;      /* classes managed by this class loader */
 		vmkit::NameMap<J3Type*>::map         types;        /* shortcut to find types */
@@ -57,7 +57,7 @@ namespace j3 {
 	public:
 		J3ClassLoader(J3* vm, J3ObjectHandle* javaClassLoader, vmkit::BumpAllocator* allocator);
 
-		J3FixedPoint*                 fixedPoint() { return &_fixedPoint; }
+		J3LocalReferences*            globalReferences() { return &_globalReferences; }
 
 		J3ObjectHandle*               javaClassLoader() { return _javaClassLoader; }
 

Modified: vmkit/branches/mcjit/include/j3/j3object.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3object.h?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3object.h (original)
+++ vmkit/branches/mcjit/include/j3/j3object.h Sun Dec 22 11:34:38 2013
@@ -109,7 +109,8 @@ namespace j3 {
 	};
 
 	class J3ObjectHandle {
-		friend class J3FixedPoint;
+		friend class J3LocalReferences;
+		friend class J3GlobalReferences;
 		friend class J3Method;
 
 	public:
@@ -152,15 +153,12 @@ namespace j3 {
 #undef defAccessor
 	};
 
-	class J3FixedPoint : public vmkit::Stack<J3ObjectHandle> {
+	class J3LocalReferences : public vmkit::Stack<J3ObjectHandle> {
 	public:
-		J3FixedPoint(vmkit::BumpAllocator* _allocator) : vmkit::Stack<J3ObjectHandle>(_allocator) {}
+		J3LocalReferences(vmkit::BumpAllocator* _allocator) : vmkit::Stack<J3ObjectHandle>(_allocator) {}
 
-		J3ObjectHandle* syncPush(J3ObjectHandle* handle) { return syncPush(handle->obj()); }
-		J3ObjectHandle* unsyncPush(J3ObjectHandle* handle) { return unsyncPush(handle->obj()); }
-
-		J3ObjectHandle* syncPush(J3Object* obj);
-		J3ObjectHandle* unsyncPush(J3Object* obj);
+		J3ObjectHandle* push(J3ObjectHandle* handle) { return push(handle->obj()); }
+		J3ObjectHandle* push(J3Object* obj);
 	};
 
 	class J3Value {

Modified: vmkit/branches/mcjit/include/j3/j3thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3thread.h?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3thread.h (original)
+++ vmkit/branches/mcjit/include/j3/j3thread.h Sun Dec 22 11:34:38 2013
@@ -16,7 +16,7 @@ namespace j3 {
 	class J3Thread : public vmkit::Thread {
 		vmkit::BumpAllocator*      allocator;
 		JNIEnv                     _jniEnv;
-		J3FixedPoint               _fixedPoint;
+		J3LocalReferences          _localReferences;
 		J3ObjectHandle*            _pendingException;
 
 		J3Thread(J3* vm, vmkit::BumpAllocator* allocator);
@@ -25,16 +25,15 @@ namespace j3 {
 
 		J3Method*         getJavaCaller(uint32_t level=0);
 
-		void              ensureCapacity(uint32_t capacity);
-		J3ObjectHandle*   pendingException();
-		bool              hasPendingException() { return _pendingException; }
-		void              setPendingException(J3ObjectHandle* handle) { _pendingException = handle; }
-		J3FixedPoint*     fixedPoint() { return &_fixedPoint; }
-
-		J3ObjectHandle*   push(J3ObjectHandle* handle);
-		J3ObjectHandle*   push(J3Object* obj);
-		J3ObjectHandle*   tell();
-		void              restore(J3ObjectHandle* obj);
+		void               ensureCapacity(uint32_t capacity);
+		J3ObjectHandle*    pendingException();
+		bool               hasPendingException() { return _pendingException; }
+		void               setPendingException(J3ObjectHandle* handle) { _pendingException = handle; }
+
+		J3ObjectHandle*    push(J3ObjectHandle* handle);
+		J3ObjectHandle*    push(J3Object* obj);
+		J3ObjectHandle*    tell();
+		void               restore(J3ObjectHandle* ptr);
 
 		J3* vm() { return (J3*)Thread::vm(); }
 

Modified: vmkit/branches/mcjit/include/vmkit/stack.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/stack.h?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/stack.h (original)
+++ vmkit/branches/mcjit/include/vmkit/stack.h Sun Dec 22 11:34:38 2013
@@ -17,7 +17,6 @@ namespace vmkit {
 	class Stack {
 		static const uint32_t defaultNodeCapacity = 256;
 
-		pthread_mutex_t mutex;
 		BumpAllocator*  allocator;
 		StackNode<T>*   head;
 
@@ -35,35 +34,18 @@ namespace vmkit {
 
 	public:
 		Stack(BumpAllocator* _allocator) {
-			pthread_mutex_init(&mutex, 0);
 			allocator = _allocator;
 			head = 0;
 			createNode();
 		}
 
-		void unsyncEnsureCapacity(uint32_t capacity) {
+		void ensureCapacity(uint32_t capacity) {
 			T* reserve = head->top + capacity;
 			if(reserve > head->max)
 				createNode(capacity);
 		}
 
-		T* syncPush() { 
-			StackNode<T>* cur = head;
-			T* res = (T*)__sync_fetch_and_add((uintptr_t*)&cur->top, (uintptr_t)sizeof(T));
-
-			if(res < cur->max)
-				return res;
-
-			pthread_mutex_lock(&mutex);
-			if(cur->nextFree)
-				head = cur->nextFree;
-			else
-				createNode();
-			pthread_mutex_unlock(&mutex);
-			return syncPush();
-		}
-
-		T* unsyncPush() {
+		T* push() {
 			T* res = head->top++;
 
 			if(res < head->max)
@@ -73,10 +55,10 @@ namespace vmkit {
 				head = head->nextFree;
 			else
 				createNode();
-			return unsyncPush();
+			return push();
 		}
 
-		void unsyncPop() {
+		void pop() {
 			T* res = head->top - 1;
 			if(res < (T*)(head + 1)) {
 				head = head->nextBusy;
@@ -85,11 +67,11 @@ namespace vmkit {
 				head->top = res;
 		}
 
-		T* unsyncTell() { 
+		T* tell() { 
 			return head->top; 
 		}
 
-		void unsyncRestore(T* ptr) {
+		void restore(T* ptr) {
 			while(ptr <= (T*)head || ptr > head->max)
 				head = head->nextBusy;
 			head->top = ptr;

Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sun Dec 22 11:34:38 2013
@@ -120,7 +120,7 @@ J3ObjectHandle* J3::arrayToString(J3Obje
 	J3ObjectHandle* res = charArrayToStrings[array];
 	if(!res) {
 		J3ObjectHandle* prev = J3Thread::get()->tell();
-		res = initialClassLoader->fixedPoint()->syncPush(J3ObjectHandle::doNewObject(stringClass));
+		res = initialClassLoader->globalReferences()->push(J3ObjectHandle::doNewObject(stringClass));
 		J3Thread::get()->restore(prev);
 
 		stringInit->invokeSpecial(res, array, 0);
@@ -136,7 +136,7 @@ J3ObjectHandle* J3::nameToString(const v
 	J3ObjectHandle* res = nameToCharArrays[name];
 	if(!res) {
 		J3ObjectHandle* prev = J3Thread::get()->tell();
-		res = initialClassLoader->fixedPoint()->syncPush(J3ObjectHandle::doNewArray(charArrayClass, name->length()));
+		res = initialClassLoader->globalReferences()->push(J3ObjectHandle::doNewArray(charArrayClass, name->length()));
 		J3Thread::get()->restore(prev);
 
 		for(uint32_t i=0; i<name->length(); i++)

Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sun Dec 22 11:34:38 2013
@@ -146,7 +146,7 @@ J3ObjectHandle* J3ObjectType::javaClass(
 		if(!_javaClass) {
 			J3ObjectHandle* prev = J3Thread::get()->tell();
 			_javaClass = J3ObjectHandle::doNewObject(loader()->vm()->classClass);
-			_javaClass = loader()->fixedPoint()->syncPush(_javaClass);
+			_javaClass = loader()->globalReferences()->push(_javaClass);
 			J3Thread::get()->restore(prev);
 			_javaClass->setLong(loader()->vm()->classVMData, (int64_t)(uintptr_t)this);
 			loader()->vm()->classInit->invokeSpecial(_javaClass);
@@ -291,7 +291,7 @@ void J3Class::doInitialise() {
 		J3ObjectHandle* stacked = J3ObjectHandle::allocate(staticLayout.vt(),
 																											 loader()->vm()->dataLayout()->getTypeAllocSize(staticLayout.llvmType()
 																																																			->getContainedType(0)));
-		_staticInstance = loader()->fixedPoint()->syncPush(stacked);
+		_staticInstance = loader()->globalReferences()->push(stacked);
 		J3Thread::get()->restore(prev);
 
 		for(size_t i=0; i<staticLayout.nbFields; i++) {

Modified: vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Sun Dec 22 11:34:38 2013
@@ -22,7 +22,7 @@ J3ClassLoader::J3MethodLess J3ClassLoade
 
 J3ClassLoader::J3ClassLoader(J3* v, J3ObjectHandle* javaClassLoader, vmkit::BumpAllocator* allocator) 
 	: CompilationUnit(allocator, v, "class-loader"),
-		_fixedPoint(allocator),
+		_globalReferences(allocator),
 		classes(vmkit::Name::less, allocator),
 		types(vmkit::Name::less, allocator),
 		methodTypes(vmkit::Name::less, allocator), 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3object.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3object.cc?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3object.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3object.cc Sun Dec 22 11:34:38 2013
@@ -394,16 +394,10 @@ void* J3ObjectHandle::trampoline(J3Objec
 }
 
 /*
- *  J3FixedPoint
+ *  J3LocalReferences
  */
-J3ObjectHandle* J3FixedPoint::syncPush(J3Object* obj) {
-	J3ObjectHandle* res = Stack<J3ObjectHandle>::syncPush();
-	res->_obj = obj;
-	return res;
-}
-
-J3ObjectHandle* J3FixedPoint::unsyncPush(J3Object* obj) {
-	J3ObjectHandle* res = Stack<J3ObjectHandle>::unsyncPush();
+J3ObjectHandle* J3LocalReferences::push(J3Object* obj) {
+	J3ObjectHandle* res = Stack<J3ObjectHandle>::push();
 	res->_obj = obj;
 	return res;
 }

Modified: vmkit/branches/mcjit/lib/j3/vm/j3thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3thread.cc?rev=197883&r1=197882&r2=197883&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3thread.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3thread.cc Sun Dec 22 11:34:38 2013
@@ -9,7 +9,7 @@ using namespace j3;
 
 J3Thread::J3Thread(J3* vm, vmkit::BumpAllocator* allocator) : 
 	Thread(vm, allocator),
-	_fixedPoint(allocator) {
+	_localReferences(allocator) {
 	_jniEnv.functions = &jniEnvTable;
 }
 
@@ -40,23 +40,23 @@ J3ObjectHandle* J3Thread::pendingExcepti
 }
 
 void J3Thread::ensureCapacity(uint32_t capacity) {
-	_fixedPoint.unsyncEnsureCapacity(capacity);
+	_localReferences.ensureCapacity(capacity);
 }
 
 J3ObjectHandle* J3Thread::push(J3ObjectHandle* handle) { 
-	return _fixedPoint.unsyncPush(handle); 
+	return _localReferences.push(handle); 
 }
 
 J3ObjectHandle* J3Thread::push(J3Object* obj) { 
-	return _fixedPoint.unsyncPush(obj); 
+	return _localReferences.push(obj); 
 }
 
 J3ObjectHandle* J3Thread::tell() { 
-	return _fixedPoint.unsyncTell(); 
+	return _localReferences.tell(); 
 }
 
-void J3Thread::restore(J3ObjectHandle* obj) { 
-	_fixedPoint.unsyncRestore(obj); 
+void J3Thread::restore(J3ObjectHandle* ptr) { 
+	_localReferences.restore(ptr); 
 }
 
 J3Thread* J3Thread::get() { 





More information about the vmkit-commits mailing list