< prev index next >

src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp

Print this page
*** 661,19 ***
    // rsp or the address of the box (in scr) into &m->owner.  If the CAS succeeds
    // we later store "Self" into m->Owner.  Transiently storing a stack address
    // (rsp or the address of the box) into  m->owner is harmless.
    // Invariant: tmpReg == 0.  tmpReg is EAX which is the implicit cmpxchg comparand.
    lock();
!   cmpxchgptr(scrReg, Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)));
    movptr(Address(scrReg, 0), 3);          // box->_displaced_header = 3
-   // If we weren't able to swing _owner from null to the BasicLock
-   // then take the slow path.
-   jccb  (Assembler::notZero, NO_COUNT);
-   // update _owner from BasicLock to thread
-   get_thread (scrReg);                    // beware: clobbers ICCs
-   movptr(Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)), scrReg);
-   xorptr(boxReg, boxReg);                 // set icc.ZFlag = 1 to indicate success
  
    // If the CAS fails we can either retry or pass control to the slow path.
    // We use the latter tactic.
    // Pass the CAS result in the icc.ZFlag into DONE_LABEL
    // If the CAS was successful ...
--- 661,12 ---
    // rsp or the address of the box (in scr) into &m->owner.  If the CAS succeeds
    // we later store "Self" into m->Owner.  Transiently storing a stack address
    // (rsp or the address of the box) into  m->owner is harmless.
    // Invariant: tmpReg == 0.  tmpReg is EAX which is the implicit cmpxchg comparand.
    lock();
!   cmpxchgptr(thread, Address(boxReg, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)));
    movptr(Address(scrReg, 0), 3);          // box->_displaced_header = 3
  
    // If the CAS fails we can either retry or pass control to the slow path.
    // We use the latter tactic.
    // Pass the CAS result in the icc.ZFlag into DONE_LABEL
    // If the CAS was successful ...
< prev index next >