equal
deleted
inserted
replaced
1759 if (is_oop) { |
1759 if (is_oop) { |
1760 // Store to object so mark the card of the header |
1760 // Store to object so mark the card of the header |
1761 post_barrier(object.result(), value.result()); |
1761 post_barrier(object.result(), value.result()); |
1762 } |
1762 } |
1763 |
1763 |
1764 if (is_volatile && os::is_MP()) { |
1764 if (!support_IRIW_for_not_multiple_copy_atomic_cpu && is_volatile && os::is_MP()) { |
1765 __ membar(); |
1765 __ membar(); |
1766 } |
1766 } |
1767 } |
1767 } |
1768 |
1768 |
1769 |
1769 |
1818 // Otherwise the patching code won't know how to find the |
1818 // Otherwise the patching code won't know how to find the |
1819 // instruction to patch. |
1819 // instruction to patch. |
1820 address = new LIR_Address(object.result(), PATCHED_ADDR, field_type); |
1820 address = new LIR_Address(object.result(), PATCHED_ADDR, field_type); |
1821 } else { |
1821 } else { |
1822 address = generate_address(object.result(), x->offset(), field_type); |
1822 address = generate_address(object.result(), x->offset(), field_type); |
|
1823 } |
|
1824 |
|
1825 if (support_IRIW_for_not_multiple_copy_atomic_cpu && is_volatile && os::is_MP()) { |
|
1826 __ membar(); |
1823 } |
1827 } |
1824 |
1828 |
1825 bool needs_atomic_access = is_volatile || AlwaysAtomicAccesses; |
1829 bool needs_atomic_access = is_volatile || AlwaysAtomicAccesses; |
1826 if (needs_atomic_access && !needs_patching) { |
1830 if (needs_atomic_access && !needs_patching) { |
1827 volatile_field_load(address, reg, info); |
1831 volatile_field_load(address, reg, info); |
2235 |
2239 |
2236 off.load_item(); |
2240 off.load_item(); |
2237 src.load_item(); |
2241 src.load_item(); |
2238 |
2242 |
2239 LIR_Opr value = rlock_result(x, x->basic_type()); |
2243 LIR_Opr value = rlock_result(x, x->basic_type()); |
|
2244 |
|
2245 if (support_IRIW_for_not_multiple_copy_atomic_cpu && x->is_volatile() && os::is_MP()) { |
|
2246 __ membar(); |
|
2247 } |
2240 |
2248 |
2241 get_Object_unsafe(value, src.result(), off.result(), type, x->is_volatile()); |
2249 get_Object_unsafe(value, src.result(), off.result(), type, x->is_volatile()); |
2242 |
2250 |
2243 #if INCLUDE_ALL_GCS |
2251 #if INCLUDE_ALL_GCS |
2244 // We might be reading the value of the referent field of a |
2252 // We might be reading the value of the referent field of a |
2393 |
2401 |
2394 set_no_result(x); |
2402 set_no_result(x); |
2395 |
2403 |
2396 if (x->is_volatile() && os::is_MP()) __ membar_release(); |
2404 if (x->is_volatile() && os::is_MP()) __ membar_release(); |
2397 put_Object_unsafe(src.result(), off.result(), data.result(), type, x->is_volatile()); |
2405 put_Object_unsafe(src.result(), off.result(), data.result(), type, x->is_volatile()); |
2398 if (x->is_volatile() && os::is_MP()) __ membar(); |
2406 if (!support_IRIW_for_not_multiple_copy_atomic_cpu && x->is_volatile() && os::is_MP()) __ membar(); |
2399 } |
2407 } |
2400 |
2408 |
2401 |
2409 |
2402 void LIRGenerator::do_SwitchRanges(SwitchRangeArray* x, LIR_Opr value, BlockBegin* default_sux) { |
2410 void LIRGenerator::do_SwitchRanges(SwitchRangeArray* x, LIR_Opr value, BlockBegin* default_sux) { |
2403 int lng = x->length(); |
2411 int lng = x->length(); |