31 #include "gc/z/zThreadLocalData.hpp"
32 #include "runtime/thread.hpp"
33
34 ZBarrierSet::ZBarrierSet() :
35 BarrierSet(make_barrier_set_assembler<ZBarrierSetAssembler>(),
36 make_barrier_set_c1<ZBarrierSetC1>(),
37 make_barrier_set_c2<ZBarrierSetC2>(),
38 BarrierSet::FakeRtti(BarrierSet::ZBarrierSet)) {}
39
40 ZBarrierSetAssembler* ZBarrierSet::assembler() {
41 BarrierSetAssembler* const bsa = BarrierSet::barrier_set()->barrier_set_assembler();
42 return reinterpret_cast<ZBarrierSetAssembler*>(bsa);
43 }
44
45 bool ZBarrierSet::barrier_needed(DecoratorSet decorators, BasicType type) {
46 assert((decorators & AS_RAW) == 0, "Unexpected decorator");
47 assert((decorators & AS_NO_KEEPALIVE) == 0, "Unexpected decorator");
48 //assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Unexpected decorator");
49
50 if (type == T_OBJECT || type == T_ARRAY) {
51 if (((decorators & IN_HEAP) != 0) ||
52 ((decorators & IN_CONCURRENT_ROOT) != 0) ||
53 ((decorators & ON_PHANTOM_OOP_REF) != 0)) {
54 // Barrier needed
55 return true;
56 }
57 }
58
59 // Barrier not neeed
60 return false;
61 }
62
63 void ZBarrierSet::on_thread_create(Thread* thread) {
64 // Create thread local data
65 ZThreadLocalData::create(thread);
66 }
67
68 void ZBarrierSet::on_thread_destroy(Thread* thread) {
69 // Destroy thread local data
70 ZThreadLocalData::destroy(thread);
71 }
72
73 void ZBarrierSet::on_thread_attach(JavaThread* thread) {
74 // Set thread local address bad mask
75 ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask);
76 }
|
31 #include "gc/z/zThreadLocalData.hpp"
32 #include "runtime/thread.hpp"
33
34 ZBarrierSet::ZBarrierSet() :
35 BarrierSet(make_barrier_set_assembler<ZBarrierSetAssembler>(),
36 make_barrier_set_c1<ZBarrierSetC1>(),
37 make_barrier_set_c2<ZBarrierSetC2>(),
38 BarrierSet::FakeRtti(BarrierSet::ZBarrierSet)) {}
39
40 ZBarrierSetAssembler* ZBarrierSet::assembler() {
41 BarrierSetAssembler* const bsa = BarrierSet::barrier_set()->barrier_set_assembler();
42 return reinterpret_cast<ZBarrierSetAssembler*>(bsa);
43 }
44
45 bool ZBarrierSet::barrier_needed(DecoratorSet decorators, BasicType type) {
46 assert((decorators & AS_RAW) == 0, "Unexpected decorator");
47 assert((decorators & AS_NO_KEEPALIVE) == 0, "Unexpected decorator");
48 //assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Unexpected decorator");
49
50 if (type == T_OBJECT || type == T_ARRAY) {
51 assert((decorators & (IN_HEAP | IN_NATIVE)) != 0, "Where is reference?");
52 // Barrier needed even when IN_NATIVE, to allow concurrent scanning.
53 return true;
54 }
55
56 // Barrier not neeed
57 return false;
58 }
59
60 void ZBarrierSet::on_thread_create(Thread* thread) {
61 // Create thread local data
62 ZThreadLocalData::create(thread);
63 }
64
65 void ZBarrierSet::on_thread_destroy(Thread* thread) {
66 // Destroy thread local data
67 ZThreadLocalData::destroy(thread);
68 }
69
70 void ZBarrierSet::on_thread_attach(JavaThread* thread) {
71 // Set thread local address bad mask
72 ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask);
73 }
|