[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