equal
deleted
inserted
replaced
1596 // suspends threads for GC. Thread A is resumed to finish this |
1596 // suspends threads for GC. Thread A is resumed to finish this |
1597 // native method, but doesn't block here since it didn't see any |
1597 // native method, but doesn't block here since it didn't see any |
1598 // synchronization is progress, and escapes. |
1598 // synchronization is progress, and escapes. |
1599 |
1599 |
1600 __ set_thread_state(_thread_in_native_trans); |
1600 __ set_thread_state(_thread_in_native_trans); |
1601 if (UseMembar) { |
1601 __ z_fence(); |
1602 __ z_fence(); |
1602 |
1603 } else { |
|
1604 // Write serialization page so VM thread can do a pseudo remote |
|
1605 // membar. We use the current thread pointer to calculate a thread |
|
1606 // specific offset to write to within the page. This minimizes bus |
|
1607 // traffic due to cache line collision. |
|
1608 __ serialize_memory(Z_thread, Z_R1, Z_R0); |
|
1609 } |
|
1610 // Now before we return to java we must look for a current safepoint |
1603 // Now before we return to java we must look for a current safepoint |
1611 // (a new safepoint can not start since we entered native_trans). |
1604 // (a new safepoint can not start since we entered native_trans). |
1612 // We must check here because a current safepoint could be modifying |
1605 // We must check here because a current safepoint could be modifying |
1613 // the callers registers right this moment. |
1606 // the callers registers right this moment. |
1614 |
1607 |