< prev index next >

src/cpu/x86/vm/macroAssembler_x86.cpp

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

*** 1480,1490 **** if (RTMRetryCount > 0) { movl(retry_on_abort_count_Reg, RTMRetryCount); // Retry on abort bind(L_rtm_retry); } ! movptr(tmpReg, Address(objReg, 0)); testptr(tmpReg, markOopDesc::monitor_value); // inflated vs stack-locked|neutral|biased jcc(Assembler::notZero, IsInflated); if (PrintPreciseRTMLockingStatistics || profile_rtm) { Label L_noincrement; --- 1480,1490 ---- if (RTMRetryCount > 0) { movl(retry_on_abort_count_Reg, RTMRetryCount); // Retry on abort bind(L_rtm_retry); } ! movptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); testptr(tmpReg, markOopDesc::monitor_value); // inflated vs stack-locked|neutral|biased jcc(Assembler::notZero, IsInflated); if (PrintPreciseRTMLockingStatistics || profile_rtm) { Label L_noincrement;
*** 1495,1505 **** assert(stack_rtm_counters != NULL, "should not be NULL when profiling RTM"); atomic_incptr(ExternalAddress((address)stack_rtm_counters->total_count_addr()), scrReg); bind(L_noincrement); } xbegin(L_on_abort); ! movptr(tmpReg, Address(objReg, 0)); // fetch markword andptr(tmpReg, markOopDesc::biased_lock_mask_in_place); // look at 3 lock bits cmpptr(tmpReg, markOopDesc::unlocked_value); // bits = 001 unlocked jcc(Assembler::equal, DONE_LABEL); // all done if unlocked Register abort_status_Reg = tmpReg; // status of abort is stored in RAX --- 1495,1505 ---- assert(stack_rtm_counters != NULL, "should not be NULL when profiling RTM"); atomic_incptr(ExternalAddress((address)stack_rtm_counters->total_count_addr()), scrReg); bind(L_noincrement); } xbegin(L_on_abort); ! movptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); // fetch markword andptr(tmpReg, markOopDesc::biased_lock_mask_in_place); // look at 3 lock bits cmpptr(tmpReg, markOopDesc::unlocked_value); // bits = 001 unlocked jcc(Assembler::equal, DONE_LABEL); // all done if unlocked Register abort_status_Reg = tmpReg; // status of abort is stored in RAX
*** 1556,1566 **** assert(rtm_counters != NULL, "should not be NULL when profiling RTM"); atomic_incptr(ExternalAddress((address)rtm_counters->total_count_addr()), scrReg); bind(L_noincrement); } xbegin(L_on_abort); ! movptr(tmpReg, Address(objReg, 0)); movptr(tmpReg, Address(tmpReg, owner_offset)); testptr(tmpReg, tmpReg); jcc(Assembler::zero, DONE_LABEL); if (UseRTMXendForLockBusy) { xend(); --- 1556,1566 ---- assert(rtm_counters != NULL, "should not be NULL when profiling RTM"); atomic_incptr(ExternalAddress((address)rtm_counters->total_count_addr()), scrReg); bind(L_noincrement); } xbegin(L_on_abort); ! movptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); movptr(tmpReg, Address(tmpReg, owner_offset)); testptr(tmpReg, tmpReg); jcc(Assembler::zero, DONE_LABEL); if (UseRTMXendForLockBusy) { xend();
*** 1749,1769 **** stack_rtm_counters, method_data, profile_rtm, DONE_LABEL, IsInflated); } #endif // INCLUDE_RTM_OPT ! movptr(tmpReg, Address(objReg, 0)); // [FETCH] testptr(tmpReg, markOopDesc::monitor_value); // inflated vs stack-locked|neutral|biased jccb(Assembler::notZero, IsInflated); // Attempt stack-locking ... orptr (tmpReg, markOopDesc::unlocked_value); movptr(Address(boxReg, 0), tmpReg); // Anticipate successful CAS if (os::is_MP()) { lock(); } ! cmpxchgptr(boxReg, Address(objReg, 0)); // Updates tmpReg if (counters != NULL) { cond_inc32(Assembler::equal, ExternalAddress((address)counters->fast_path_entry_count_addr())); } jcc(Assembler::equal, DONE_LABEL); // Success --- 1749,1769 ---- stack_rtm_counters, method_data, profile_rtm, DONE_LABEL, IsInflated); } #endif // INCLUDE_RTM_OPT ! movptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); // [FETCH] testptr(tmpReg, markOopDesc::monitor_value); // inflated vs stack-locked|neutral|biased jccb(Assembler::notZero, IsInflated); // Attempt stack-locking ... orptr (tmpReg, markOopDesc::unlocked_value); movptr(Address(boxReg, 0), tmpReg); // Anticipate successful CAS if (os::is_MP()) { lock(); } ! cmpxchgptr(boxReg, Address(objReg, oopDesc::mark_offset_in_bytes())); // Updates tmpReg if (counters != NULL) { cond_inc32(Assembler::equal, ExternalAddress((address)counters->fast_path_entry_count_addr())); } jcc(Assembler::equal, DONE_LABEL); // Success
*** 1980,1990 **** #if INCLUDE_RTM_OPT if (UseRTMForStackLocks && use_rtm) { assert(!UseBiasedLocking, "Biased locking is not supported with RTM locking"); Label L_regular_unlock; ! movptr(tmpReg, Address(objReg, 0)); // fetch markword andptr(tmpReg, markOopDesc::biased_lock_mask_in_place); // look at 3 lock bits cmpptr(tmpReg, markOopDesc::unlocked_value); // bits = 001 unlocked jccb(Assembler::notEqual, L_regular_unlock); // if !HLE RegularLock xend(); // otherwise end... jmp(DONE_LABEL); // ... and we're done --- 1980,1990 ---- #if INCLUDE_RTM_OPT if (UseRTMForStackLocks && use_rtm) { assert(!UseBiasedLocking, "Biased locking is not supported with RTM locking"); Label L_regular_unlock; ! movptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); // fetch markword andptr(tmpReg, markOopDesc::biased_lock_mask_in_place); // look at 3 lock bits cmpptr(tmpReg, markOopDesc::unlocked_value); // bits = 001 unlocked jccb(Assembler::notEqual, L_regular_unlock); // if !HLE RegularLock xend(); // otherwise end... jmp(DONE_LABEL); // ... and we're done
*** 1992,2002 **** } #endif cmpptr(Address(boxReg, 0), (int32_t)NULL_WORD); // Examine the displaced header jcc (Assembler::zero, DONE_LABEL); // 0 indicates recursive stack-lock ! movptr(tmpReg, Address(objReg, 0)); // Examine the object's markword testptr(tmpReg, markOopDesc::monitor_value); // Inflated? jccb (Assembler::zero, Stacked); // It's inflated. #if INCLUDE_RTM_OPT --- 1992,2002 ---- } #endif cmpptr(Address(boxReg, 0), (int32_t)NULL_WORD); // Examine the displaced header jcc (Assembler::zero, DONE_LABEL); // 0 indicates recursive stack-lock ! movptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); // Examine the object's markword testptr(tmpReg, markOopDesc::monitor_value); // Inflated? jccb (Assembler::zero, Stacked); // It's inflated. #if INCLUDE_RTM_OPT
*** 2146,2156 **** // and be assured we observe the same value as above. movptr(tmpReg, Address(boxReg, 0)); if (os::is_MP()) { lock(); } ! cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box // Intention fall-thru into DONE_LABEL // DONE_LABEL is a hot target - we'd really like to place it at the // start of cache line by padding with NOPs. // See the AMD and Intel software optimization manuals for the --- 2146,2156 ---- // and be assured we observe the same value as above. movptr(tmpReg, Address(boxReg, 0)); if (os::is_MP()) { lock(); } ! cmpxchgptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); // Uses RAX which is box // Intention fall-thru into DONE_LABEL // DONE_LABEL is a hot target - we'd really like to place it at the // start of cache line by padding with NOPs. // See the AMD and Intel software optimization manuals for the
*** 2243,2253 **** } bind (Stacked); movptr(tmpReg, Address (boxReg, 0)); // re-fetch if (os::is_MP()) { lock(); } ! cmpxchgptr(tmpReg, Address(objReg, 0)); // Uses RAX which is box if (EmitSync & 65536) { bind (CheckSucc); } #endif --- 2243,2253 ---- } bind (Stacked); movptr(tmpReg, Address (boxReg, 0)); // re-fetch if (os::is_MP()) { lock(); } ! cmpxchgptr(tmpReg, Address(objReg, oopDesc::mark_offset_in_bytes())); // Uses RAX which is box if (EmitSync & 65536) { bind (CheckSucc); } #endif
< prev index next >