equal
deleted
inserted
replaced
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"); |