[vmkit-commits] [vmkit] r200847 - Monitor enter and monitor exit are now instance methods.

Gael Thomas gael.thomas at lip6.fr
Wed Feb 5 08:01:11 PST 2014


Author: gthomas
Date: Wed Feb  5 10:01:11 2014
New Revision: 200847

URL: http://llvm.org/viewvc/llvm-project?rev=200847&view=rev
Log:
Monitor enter and monitor exit are now instance methods.

Modified:
    vmkit/branches/mcjit/include/j3/j3meta.def
    vmkit/branches/mcjit/include/j3/j3object.h
    vmkit/branches/mcjit/lib/j3/vm/j3object.cc

Modified: vmkit/branches/mcjit/include/j3/j3meta.def
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3meta.def?rev=200847&r1=200846&r2=200847&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3meta.def (original)
+++ vmkit/branches/mcjit/include/j3/j3meta.def Wed Feb  5 10:01:11 2014
@@ -4,8 +4,8 @@ _x(funcJ3TypeJavaClass,             "j3:
 _x(funcJniEnv,                      "j3::J3::jniEnv()", 0)
 _x(funcJ3ArrayObjectMultianewArray, "j3::J3ArrayObject::multianewArray(j3::J3ArrayClass*, unsigned int, unsigned int*)", 0)
 _x(funcJ3ObjectAllocate,            "j3::J3Object::allocate(j3::J3VirtualTable*, unsigned long)", 0)
-_x(funcJ3ObjectMonitorEnter,        "j3::J3Object::monitorEnter(j3::J3Object*, j3::J3LockRecord*)", 0)
-_x(funcJ3ObjectMonitorExit,         "j3::J3Object::monitorExit(j3::J3Object*)", 0)
+_x(funcJ3ObjectMonitorEnter,        "j3::J3Object::monitorEnter(j3::J3LockRecord*)", 0)
+_x(funcJ3ObjectMonitorExit,         "j3::J3Object::monitorExit()", 0)
 _x(funcThrowException,              "vmkit::VMKit::throwException(void*)", 0)
 _x(funcReplayException,             "j3::J3Thread::replayException()", 0)
 _x(funcClassCastException,          "j3::J3::classCastException()", 0)

Modified: vmkit/branches/mcjit/include/j3/j3object.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3object.h?rev=200847&r1=200846&r2=200847&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3object.h (original)
+++ vmkit/branches/mcjit/include/j3/j3object.h Wed Feb  5 10:01:11 2014
@@ -122,8 +122,8 @@ namespace j3 {
 		static J3LockRecord* asLockRecord(uintptr_t header) { return (J3LockRecord*)header; }
 		static J3Monitor*    asMonitor(uintptr_t header) { return (J3Monitor*)(header & ~3); }
 
-		static void monitorEnter(J3Object* object, J3LockRecord* lockRecord) __attribute__((always_inline));
-		static void monitorExit(J3Object* object) __attribute__((always_inline));
+		void monitorEnter(J3LockRecord* lockRecord) __attribute__((always_inline));
+		void monitorExit() __attribute__((always_inline));
 
 		static J3Object* allocate(J3VirtualTable* vt, uintptr_t n);
 		static J3Object* doNew(J3Class* cl);

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=200847&r1=200846&r2=200847&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3object.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3object.cc Wed Feb  5 10:01:11 2014
@@ -287,9 +287,8 @@ J3Object* J3Object::doNew(J3Class* cl) {
 	return allocate(cl->vt(), cl->structSize());
 }
 
-void J3Object::monitorEnter(J3Object* obj, J3LockRecord* newRecord) {
-	volatile uintptr_t* pheader = &obj->_header;
-	uintptr_t header = *pheader;
+void J3Object::monitorEnter(J3LockRecord* newRecord) {
+	uintptr_t header = _header;
 
 	if(isStackLocked(header)) {
 		J3LockRecord* record = asLockRecord(header);
@@ -300,27 +299,26 @@ void J3Object::monitorEnter(J3Object* ob
 	} else if(isUnlocked(header)) {
 		newRecord->header = header;
 		newRecord->lockCount = 1;
-		if(__sync_val_compare_and_swap(pheader, header, (uintptr_t)newRecord) == header)
+		if(__sync_val_compare_and_swap(&_header, header, (uintptr_t)newRecord) == header)
 			return;
 	}
-	obj->inflate()->lock();
+	inflate()->lock();
 }
 
-void J3Object::monitorExit(J3Object* obj) {
-	volatile uintptr_t* pheader = &obj->_header;
-	uintptr_t  header = *pheader;
+void J3Object::monitorExit() {
+	uintptr_t  header = _header;
 
 	if(isStackLocked(header)) {
 		J3LockRecord* record = asLockRecord(header);
 		if(vmkit::Thread::get(record) == vmkit::Thread::get()) {
 			if(!--record->lockCount) {
-				if(__sync_val_compare_and_swap(pheader, header, record->header) == header)
+				if(__sync_val_compare_and_swap(&_header, header, record->header) == header)
 					return;
 			} else
 				return;
 		}
 	}
-	obj->inflate()->unlock();
+	inflate()->unlock();
 }
 
 uint32_t J3Object::hashCode() {





More information about the vmkit-commits mailing list