[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