257 bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; |
257 bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; |
258 bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; |
258 bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; |
259 bool on_reference = on_weak || on_phantom; |
259 bool on_reference = on_weak || on_phantom; |
260 ModRefBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp_thread); |
260 ModRefBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp_thread); |
261 if (on_oop && on_reference) { |
261 if (on_oop && on_reference) { |
|
262 // LR is live. It must be saved around calls. |
|
263 __ enter(); // barrier may call runtime |
262 // Generate the G1 pre-barrier code to log the value of |
264 // Generate the G1 pre-barrier code to log the value of |
263 // the referent field in an SATB buffer. |
265 // the referent field in an SATB buffer. |
264 g1_write_barrier_pre(masm /* masm */, |
266 g1_write_barrier_pre(masm /* masm */, |
265 noreg /* obj */, |
267 noreg /* obj */, |
266 dst /* pre_val */, |
268 dst /* pre_val */, |
267 rthread /* thread */, |
269 rthread /* thread */, |
268 tmp1 /* tmp */, |
270 tmp1 /* tmp */, |
269 true /* tosca_live */, |
271 true /* tosca_live */, |
270 true /* expand_call */); |
272 true /* expand_call */); |
|
273 __ leave(); |
271 } |
274 } |
272 } |
275 } |
273 |
276 |
274 void G1BarrierSetAssembler::oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, |
277 void G1BarrierSetAssembler::oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, |
275 Address dst, Register val, Register tmp1, Register tmp2) { |
278 Address dst, Register val, Register tmp1, Register tmp2) { |