< prev index next >

src/hotspot/share/gc/z/zBarrierSet.cpp

Print this page
rev 50745 : imported patch remove_in_concurrent_root


  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 }
< prev index next >