< prev index next >
src/cpu/x86/vm/interp_masm_x86.cpp
Print this page
rev 8961 : [mq]: diff-shenandoah.patch
@@ -1068,10 +1068,13 @@
Label slow_case;
// Load object pointer into obj_reg
movptr(obj_reg, Address(lock_reg, obj_offset));
+ // Need to preemptively evacuate obj because we CAS the mark word later.
+ oopDesc::bs()->interpreter_write_barrier(this, 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
@@ -1163,10 +1166,13 @@
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()));
+ // Need to preemptively evacuate obj because we CAS the mark word later.
+ oopDesc::bs()->interpreter_write_barrier(this, obj_reg);
+
// Free entry
movptr(Address(lock_reg, BasicObjectLock::obj_offset_in_bytes()), (int32_t)NULL_WORD);
if (UseBiasedLocking) {
biased_locking_exit(obj_reg, header_reg, done);
< prev index next >