< prev index next >
src/cpu/x86/vm/interp_masm_x86.cpp
Print this page
rev 12152 : [mq]: verification.patch
@@ -959,10 +959,11 @@
// We use c_rarg1/rdx so that if we go slow path it will be the correct
// register for unlock_object to pass to VM directly
lea(robj, monitor); // address of first monitor
movptr(rax, Address(robj, BasicObjectLock::obj_offset_in_bytes()));
+ shenandoah_store_addr_check(rax); // Invariant
testptr(rax, rax);
jcc(Assembler::notZero, unlock);
pop(state);
if (throw_monitor_exception) {
@@ -1041,10 +1042,11 @@
jmp(restart);
}
bind(loop);
// check if current entry is used
+ shenandoah_lock_check(rmon);
cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), (int32_t) NULL);
jcc(Assembler::notEqual, exception);
addptr(rmon, entry_size); // otherwise advance to next entry
bind(entry);
@@ -1138,10 +1140,12 @@
Label slow_case;
// Load object pointer into obj_reg
movptr(obj_reg, Address(lock_reg, obj_offset));
+ shenandoah_store_addr_check(obj_reg);
+
if (UseBiasedLocking) {
biased_locking_enter(lock_reg, obj_reg, swap_reg, tmp_reg, false, done, &slow_case);
}
// Load immediate 1 into swap_reg %rax
@@ -1154,10 +1158,11 @@
movptr(Address(lock_reg, mark_offset), swap_reg);
assert(lock_offset == 0,
"displaced header must be first word in BasicObjectLock");
+ // obj_reg has been checked a few lines up.
if (os::is_MP()) lock();
cmpxchgptr(lock_reg, Address(obj_reg, 0));
if (PrintBiasedLockingStatistics) {
cond_inc32(Assembler::zero,
ExternalAddress((address) BiasedLocking::fast_path_entry_count_addr()));
@@ -1232,10 +1237,11 @@
// structure Store the BasicLock address into %rax
lea(swap_reg, Address(lock_reg, BasicObjectLock::lock_offset_in_bytes()));
// Load oop into obj_reg(%c_rarg3)
movptr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset_in_bytes()));
+ shenandoah_store_addr_check(obj_reg); // Invariant
// Free entry
movptr(Address(lock_reg, BasicObjectLock::obj_offset_in_bytes()), (int32_t)NULL_WORD);
if (UseBiasedLocking) {
< prev index next >