< prev index next >

src/hotspot/cpu/arm/macroAssembler_arm.cpp

Print this page
rev 52777 : 8214512: ARM32: Jtreg test compiler/c2/Test8062950.java fails on ARM
Summary: fix assertion failures with -XX:-OptoBiasInlining
Reviewed-by: duke
Contributed-by: nick.gasson@arm.com

@@ -1969,11 +1969,11 @@
   return bs->resolve(this, decorators, obj);
 }
 
 
 #ifdef COMPILER2
-void MacroAssembler::fast_lock(Register Roop, Register Rbox, Register Rscratch, Register Rscratch2)
+void MacroAssembler::fast_lock(Register Roop, Register Rbox, Register Rscratch, Register Rscratch2, Register scratch3)
 {
   assert(VM_Version::supports_ldrex(), "unsupported, yet?");
 
   Register Rmark      = Rscratch2;
 

@@ -1983,15 +1983,17 @@
   assert(Rbox != Rmark, "");
 
   Label fast_lock, done;
 
   if (UseBiasedLocking && !UseOptoBiasInlining) {
-    Label failed;
-    biased_locking_enter(Roop, Rmark, Rscratch, false, noreg, done, failed);
-    bind(failed);
+    assert(scratch3 != noreg, "need extra temporary for -XX:-UseOptoBiasInlining");
+    biased_locking_enter(Roop, Rmark, Rscratch, false, scratch3, done, done);
+    // Fall through if lock not biased otherwise branch to done
   }
 
+  // Invariant: Rmark loaded below does not contain biased lock pattern
+
   ldr(Rmark, Address(Roop, oopDesc::mark_offset_in_bytes()));
   tst(Rmark, markOopDesc::unlocked_value);
   b(fast_lock, ne);
 
   // Check for recursive lock
< prev index next >