2625 // volatile membars (for stores; compare Parse::do_put_xxx), which |
2625 // volatile membars (for stores; compare Parse::do_put_xxx), which |
2626 // we cannot do effectively here because we probably only have a |
2626 // we cannot do effectively here because we probably only have a |
2627 // rough approximation of type. |
2627 // rough approximation of type. |
2628 need_mem_bar = true; |
2628 need_mem_bar = true; |
2629 // For Stores, place a memory ordering barrier now. |
2629 // For Stores, place a memory ordering barrier now. |
2630 if (is_store) |
2630 if (is_store) { |
2631 insert_mem_bar(Op_MemBarRelease); |
2631 insert_mem_bar(Op_MemBarRelease); |
|
2632 } else { |
|
2633 if (support_IRIW_for_not_multiple_copy_atomic_cpu) { |
|
2634 insert_mem_bar(Op_MemBarVolatile); |
|
2635 } |
|
2636 } |
2632 } |
2637 } |
2633 |
2638 |
2634 // Memory barrier to prevent normal and 'unsafe' accesses from |
2639 // Memory barrier to prevent normal and 'unsafe' accesses from |
2635 // bypassing each other. Happens after null checks, so the |
2640 // bypassing each other. Happens after null checks, so the |
2636 // exception paths do not take memory state from the memory barrier, |
2641 // exception paths do not take memory state from the memory barrier, |