hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
changeset 34160 3240e478a30e
parent 33105 294e48b4f704
child 34185 ee71c590a456
equal deleted inserted replaced
34153:cbcfa2a6fe0b 34160:3240e478a30e
  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();