< prev index next >

src/cpu/aarch64/vm/interp_masm_aarch64.cpp

Print this page
rev 12121 : Use oopDesc::mark_offset_in_bytes() instead of just 0 to access object mark word in assembly.

@@ -666,20 +666,21 @@
     if (UseBiasedLocking) {
       biased_locking_enter(lock_reg, obj_reg, swap_reg, tmp, false, done, &slow_case);
     }
 
     // Load (object->mark() | 1) into swap_reg
-    ldr(rscratch1, Address(obj_reg, 0));
+    ldr(rscratch1, Address(obj_reg, oopDesc::mark_offset_in_bytes()));
     orr(swap_reg, rscratch1, 1);
 
     // Save (object->mark() | 1) into BasicLock's displaced header
     str(swap_reg, Address(lock_reg, mark_offset));
 
     assert(lock_offset == 0,
            "displached header must be first word in BasicObjectLock");
 
     Label fail;
+    assert(oopDesc::mark_offset_in_bytes() == 0, "assumption");
     if (PrintBiasedLockingStatistics) {
       Label fast;
       cmpxchgptr(swap_reg, lock_reg, obj_reg, rscratch1, fast, &fail);
       bind(fast);
       atomic_incw(Address((address)BiasedLocking::fast_path_entry_count_addr()),

@@ -775,10 +776,11 @@
 
     // Test for recursion
     cbz(header_reg, done);
 
     // Atomic swap back the old header
+    assert(oopDesc::mark_offset_in_bytes() == 0, "assumption");
     cmpxchgptr(swap_reg, header_reg, obj_reg, rscratch1, done, /*fallthrough*/NULL);
 
     // Call the runtime routine for slow case.
     str(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset_in_bytes())); // restore obj
     call_VM(noreg,
< prev index next >