src/hotspot/share/gc/shared/c2/barrierSetC2.cpp
changeset 53765 e002408eb0c0
parent 52424 e3d79743f57d
child 57582 a79a819a8218
child 58678 9cf78a70fa4f
equal deleted inserted replaced
53764:8bf7e0823202 53765:e002408eb0c0
    73 Node* BarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val) const {
    73 Node* BarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val) const {
    74   DecoratorSet decorators = access.decorators();
    74   DecoratorSet decorators = access.decorators();
    75 
    75 
    76   bool mismatched = (decorators & C2_MISMATCHED) != 0;
    76   bool mismatched = (decorators & C2_MISMATCHED) != 0;
    77   bool unaligned = (decorators & C2_UNALIGNED) != 0;
    77   bool unaligned = (decorators & C2_UNALIGNED) != 0;
       
    78   bool unsafe = (decorators & C2_UNSAFE_ACCESS) != 0;
    78   bool requires_atomic_access = (decorators & MO_UNORDERED) == 0;
    79   bool requires_atomic_access = (decorators & MO_UNORDERED) == 0;
    79 
    80 
    80   bool in_native = (decorators & IN_NATIVE) != 0;
    81   bool in_native = (decorators & IN_NATIVE) != 0;
    81   assert(!in_native, "not supported yet");
    82   assert(!in_native, "not supported yet");
    82 
    83 
    91       Node* new_val = kit->dstore_rounding(val.node());
    92       Node* new_val = kit->dstore_rounding(val.node());
    92       val.set_node(new_val);
    93       val.set_node(new_val);
    93     }
    94     }
    94 
    95 
    95     store = kit->store_to_memory(kit->control(), access.addr().node(), val.node(), access.type(),
    96     store = kit->store_to_memory(kit->control(), access.addr().node(), val.node(), access.type(),
    96                                      access.addr().type(), mo, requires_atomic_access, unaligned, mismatched);
    97                                      access.addr().type(), mo, requires_atomic_access, unaligned, mismatched, unsafe);
    97     access.set_raw_access(store);
    98     access.set_raw_access(store);
    98   } else {
    99   } else {
    99     assert(!requires_atomic_access, "not yet supported");
   100     assert(!requires_atomic_access, "not yet supported");
   100     assert(access.is_opt_access(), "either parse or opt access");
   101     assert(access.is_opt_access(), "either parse or opt access");
   101     C2OptAccess& opt_access = static_cast<C2OptAccess&>(access);
   102     C2OptAccess& opt_access = static_cast<C2OptAccess&>(access);
   130   bool mismatched = (decorators & C2_MISMATCHED) != 0;
   131   bool mismatched = (decorators & C2_MISMATCHED) != 0;
   131   bool requires_atomic_access = (decorators & MO_UNORDERED) == 0;
   132   bool requires_atomic_access = (decorators & MO_UNORDERED) == 0;
   132   bool unaligned = (decorators & C2_UNALIGNED) != 0;
   133   bool unaligned = (decorators & C2_UNALIGNED) != 0;
   133   bool control_dependent = (decorators & C2_CONTROL_DEPENDENT_LOAD) != 0;
   134   bool control_dependent = (decorators & C2_CONTROL_DEPENDENT_LOAD) != 0;
   134   bool pinned = (decorators & C2_PINNED_LOAD) != 0;
   135   bool pinned = (decorators & C2_PINNED_LOAD) != 0;
       
   136   bool unsafe = (decorators & C2_UNSAFE_ACCESS) != 0;
   135 
   137 
   136   bool in_native = (decorators & IN_NATIVE) != 0;
   138   bool in_native = (decorators & IN_NATIVE) != 0;
   137 
   139 
   138   MemNode::MemOrd mo = access.mem_node_mo();
   140   MemNode::MemOrd mo = access.mem_node_mo();
   139   LoadNode::ControlDependency dep = pinned ? LoadNode::Pinned : LoadNode::DependsOnlyOnTest;
   141   LoadNode::ControlDependency dep = pinned ? LoadNode::Pinned : LoadNode::DependsOnlyOnTest;
   146 
   148 
   147     if (in_native) {
   149     if (in_native) {
   148       load = kit->make_load(control, adr, val_type, access.type(), mo);
   150       load = kit->make_load(control, adr, val_type, access.type(), mo);
   149     } else {
   151     } else {
   150       load = kit->make_load(control, adr, val_type, access.type(), adr_type, mo,
   152       load = kit->make_load(control, adr, val_type, access.type(), adr_type, mo,
   151                             dep, requires_atomic_access, unaligned, mismatched);
   153                             dep, requires_atomic_access, unaligned, mismatched, unsafe);
   152     }
   154     }
   153     access.set_raw_access(load);
   155     access.set_raw_access(load);
   154   } else {
   156   } else {
   155     assert(!requires_atomic_access, "not yet supported");
   157     assert(!requires_atomic_access, "not yet supported");
   156     assert(access.is_opt_access(), "either parse or opt access");
   158     assert(access.is_opt_access(), "either parse or opt access");