49 return new ZBarrierSetNMethod();
50 }
51
52 ZBarrierSet::ZBarrierSet() :
53 BarrierSet(make_barrier_set_assembler<ZBarrierSetAssembler>(),
54 make_barrier_set_c1<ZBarrierSetC1>(),
55 make_barrier_set_c2<ZBarrierSetC2>(),
56 make_barrier_set_nmethod(),
57 BarrierSet::FakeRtti(BarrierSet::ZBarrierSet)) {}
58
59 ZBarrierSetAssembler* ZBarrierSet::assembler() {
60 BarrierSetAssembler* const bsa = BarrierSet::barrier_set()->barrier_set_assembler();
61 return reinterpret_cast<ZBarrierSetAssembler*>(bsa);
62 }
63
64 bool ZBarrierSet::barrier_needed(DecoratorSet decorators, BasicType type) {
65 assert((decorators & AS_RAW) == 0, "Unexpected decorator");
66 assert((decorators & AS_NO_KEEPALIVE) == 0, "Unexpected decorator");
67 //assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Unexpected decorator");
68
69 if (type == T_OBJECT || type == T_ARRAY) {
70 assert((decorators & (IN_HEAP | IN_NATIVE)) != 0, "Where is reference?");
71 // Barrier needed even when IN_NATIVE, to allow concurrent scanning.
72 return true;
73 }
74
75 // Barrier not needed
76 return false;
77 }
78
79 void ZBarrierSet::on_thread_create(Thread* thread) {
80 // Create thread local data
81 ZThreadLocalData::create(thread);
82 }
83
84 void ZBarrierSet::on_thread_destroy(Thread* thread) {
85 // Destroy thread local data
86 ZThreadLocalData::destroy(thread);
87 }
88
|
49 return new ZBarrierSetNMethod();
50 }
51
52 ZBarrierSet::ZBarrierSet() :
53 BarrierSet(make_barrier_set_assembler<ZBarrierSetAssembler>(),
54 make_barrier_set_c1<ZBarrierSetC1>(),
55 make_barrier_set_c2<ZBarrierSetC2>(),
56 make_barrier_set_nmethod(),
57 BarrierSet::FakeRtti(BarrierSet::ZBarrierSet)) {}
58
59 ZBarrierSetAssembler* ZBarrierSet::assembler() {
60 BarrierSetAssembler* const bsa = BarrierSet::barrier_set()->barrier_set_assembler();
61 return reinterpret_cast<ZBarrierSetAssembler*>(bsa);
62 }
63
64 bool ZBarrierSet::barrier_needed(DecoratorSet decorators, BasicType type) {
65 assert((decorators & AS_RAW) == 0, "Unexpected decorator");
66 assert((decorators & AS_NO_KEEPALIVE) == 0, "Unexpected decorator");
67 //assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Unexpected decorator");
68
69 assert(type != T_VALUETYPE, "Not supported yet");
70 if (type == T_OBJECT || type == T_ARRAY) {
71 assert((decorators & (IN_HEAP | IN_NATIVE)) != 0, "Where is reference?");
72 // Barrier needed even when IN_NATIVE, to allow concurrent scanning.
73 return true;
74 }
75
76 // Barrier not needed
77 return false;
78 }
79
80 void ZBarrierSet::on_thread_create(Thread* thread) {
81 // Create thread local data
82 ZThreadLocalData::create(thread);
83 }
84
85 void ZBarrierSet::on_thread_destroy(Thread* thread) {
86 // Destroy thread local data
87 ZThreadLocalData::destroy(thread);
88 }
89
|