1392 // change thread state |
1392 // change thread state |
1393 __ mov(rscratch1, _thread_in_native_trans); |
1393 __ mov(rscratch1, _thread_in_native_trans); |
1394 __ lea(rscratch2, Address(rthread, JavaThread::thread_state_offset())); |
1394 __ lea(rscratch2, Address(rthread, JavaThread::thread_state_offset())); |
1395 __ stlrw(rscratch1, rscratch2); |
1395 __ stlrw(rscratch1, rscratch2); |
1396 |
1396 |
1397 if (os::is_MP()) { |
1397 if (UseMembar) { |
1398 if (UseMembar) { |
1398 // Force this write out before the read below |
1399 // Force this write out before the read below |
1399 __ dmb(Assembler::ISH); |
1400 __ dmb(Assembler::ISH); |
1400 } else { |
1401 } else { |
1401 // Write serialization page so VM thread can do a pseudo remote membar. |
1402 // Write serialization page so VM thread can do a pseudo remote membar. |
1402 // We use the current thread pointer to calculate a thread specific |
1403 // We use the current thread pointer to calculate a thread specific |
1403 // offset to write to within the page. This minimizes bus traffic |
1404 // offset to write to within the page. This minimizes bus traffic |
1404 // due to cache line collision. |
1405 // due to cache line collision. |
1405 __ serialize_memory(rthread, rscratch2); |
1406 __ serialize_memory(rthread, rscratch2); |
|
1407 } |
|
1408 } |
1406 } |
1409 |
1407 |
1410 // check for safepoint operation in progress and/or pending suspend requests |
1408 // check for safepoint operation in progress and/or pending suspend requests |
1411 { |
1409 { |
1412 Label L, Continue; |
1410 Label L, Continue; |