equal
deleted
inserted
replaced
22 */ |
22 */ |
23 |
23 |
24 #include "precompiled.hpp" |
24 #include "precompiled.hpp" |
25 #include "c1/c1_IR.hpp" |
25 #include "c1/c1_IR.hpp" |
26 #include "gc/shared/satbMarkQueue.hpp" |
26 #include "gc/shared/satbMarkQueue.hpp" |
|
27 #include "gc/shenandoah/shenandoahBarrierSet.hpp" |
27 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp" |
28 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp" |
28 #include "gc/shenandoah/shenandoahConcurrentRoots.hpp" |
|
29 #include "gc/shenandoah/shenandoahHeap.hpp" |
29 #include "gc/shenandoah/shenandoahHeap.hpp" |
30 #include "gc/shenandoah/shenandoahHeapRegion.hpp" |
30 #include "gc/shenandoah/shenandoahHeapRegion.hpp" |
31 #include "gc/shenandoah/shenandoahRuntime.hpp" |
31 #include "gc/shenandoah/shenandoahRuntime.hpp" |
32 #include "gc/shenandoah/shenandoahThreadLocalData.hpp" |
32 #include "gc/shenandoah/shenandoahThreadLocalData.hpp" |
33 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp" |
33 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp" |
210 return; |
210 return; |
211 } |
211 } |
212 |
212 |
213 LIRGenerator* gen = access.gen(); |
213 LIRGenerator* gen = access.gen(); |
214 DecoratorSet decorators = access.decorators(); |
214 DecoratorSet decorators = access.decorators(); |
|
215 BasicType type = access.type(); |
215 |
216 |
216 // 2: load a reference from src location and apply LRB if ShenandoahLoadRefBarrier is set |
217 // 2: load a reference from src location and apply LRB if ShenandoahLoadRefBarrier is set |
217 if (ShenandoahLoadRefBarrier) { |
218 if (ShenandoahBarrierSet::need_load_reference_barrier(decorators, type)) { |
218 // Native barrier is for concurrent root processing |
219 if (ShenandoahBarrierSet::use_load_reference_barrier_native(decorators, type)) { |
219 bool in_native = (decorators & IN_NATIVE) != 0; |
|
220 if (in_native && ShenandoahConcurrentRoots::can_do_concurrent_roots()) { |
|
221 BarrierSetC1::load_at_resolved(access, result); |
220 BarrierSetC1::load_at_resolved(access, result); |
222 LIR_OprList* args = new LIR_OprList(); |
221 LIR_OprList* args = new LIR_OprList(); |
223 LIR_Opr addr = access.resolved_addr(); |
222 LIR_Opr addr = access.resolved_addr(); |
224 addr = ensure_in_register(gen, addr); |
223 addr = ensure_in_register(gen, addr); |
225 args->append(result); |
224 args->append(result); |