< 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 >