< prev index next >

src/hotspot/share/gc/z/zBarrierSet.inline.hpp

Print this page




  45   }
  46 }
  47 
  48 template <DecoratorSet decorators, typename BarrierSetT>
  49 inline oop* ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::field_addr(oop base, ptrdiff_t offset) {
  50   assert(base != NULL, "Invalid base");
  51   return reinterpret_cast<oop*>(reinterpret_cast<intptr_t>((void*)base) + offset);
  52 }
  53 
  54 template <DecoratorSet decorators, typename BarrierSetT>
  55 template <typename T>
  56 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::load_barrier_on_oop_field_preloaded(T* addr, oop o) {
  57   verify_decorators_absent<ON_UNKNOWN_OOP_REF>();
  58 
  59   if (HasDecorator<decorators, AS_NO_KEEPALIVE>::value) {
  60     if (HasDecorator<decorators, ON_STRONG_OOP_REF>::value) {
  61       return ZBarrier::weak_load_barrier_on_oop_field_preloaded(addr, o);
  62     } else if (HasDecorator<decorators, ON_WEAK_OOP_REF>::value) {
  63       return ZBarrier::weak_load_barrier_on_weak_oop_field_preloaded(addr, o);
  64     } else {

  65       return ZBarrier::weak_load_barrier_on_phantom_oop_field_preloaded(addr, o);
  66     }
  67   } else {
  68     if (HasDecorator<decorators, ON_STRONG_OOP_REF>::value) {
  69       return ZBarrier::load_barrier_on_oop_field_preloaded(addr, o);
  70     } else if (HasDecorator<decorators, ON_WEAK_OOP_REF>::value) {
  71       return ZBarrier::load_barrier_on_weak_oop_field_preloaded(addr, o);
  72     } else {

  73       return ZBarrier::load_barrier_on_phantom_oop_field_preloaded(addr, o);
  74     }
  75   }
  76 }
  77 
  78 template <DecoratorSet decorators, typename BarrierSetT>
  79 template <typename T>
  80 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::load_barrier_on_unknown_oop_field_preloaded(oop base, ptrdiff_t offset, T* addr, oop o) {
  81   verify_decorators_present<ON_UNKNOWN_OOP_REF>();
  82 
  83   const DecoratorSet decorators_known_strength =
  84     AccessBarrierSupport::resolve_possibly_unknown_oop_ref_strength<decorators>(base, offset);
  85 
  86   if (HasDecorator<decorators, AS_NO_KEEPALIVE>::value) {
  87     if (decorators_known_strength & ON_STRONG_OOP_REF) {
  88       return ZBarrier::weak_load_barrier_on_oop_field_preloaded(addr, o);
  89     } else if (decorators_known_strength & ON_WEAK_OOP_REF) {
  90       return ZBarrier::weak_load_barrier_on_weak_oop_field_preloaded(addr, o);
  91     } else {

  92       return ZBarrier::weak_load_barrier_on_phantom_oop_field_preloaded(addr, o);
  93     }
  94   } else {
  95     if (decorators_known_strength & ON_STRONG_OOP_REF) {
  96       return ZBarrier::load_barrier_on_oop_field_preloaded(addr, o);
  97     } else if (decorators_known_strength & ON_WEAK_OOP_REF) {
  98       return ZBarrier::load_barrier_on_weak_oop_field_preloaded(addr, o);
  99     } else {

 100       return ZBarrier::load_barrier_on_phantom_oop_field_preloaded(addr, o);
 101     }
 102   }
 103 }
 104 
 105 //
 106 // In heap
 107 //
 108 template <DecoratorSet decorators, typename BarrierSetT>
 109 template <typename T>
 110 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_load_in_heap(T* addr) {
 111   verify_decorators_absent<ON_UNKNOWN_OOP_REF>();
 112 
 113   const oop o = Raw::oop_load_in_heap(addr);
 114   return load_barrier_on_oop_field_preloaded(addr, o);
 115 }
 116 
 117 template <DecoratorSet decorators, typename BarrierSetT>
 118 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_load_in_heap_at(oop base, ptrdiff_t offset) {
 119   oop* const addr = field_addr(base, offset);




  45   }
  46 }
  47 
  48 template <DecoratorSet decorators, typename BarrierSetT>
  49 inline oop* ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::field_addr(oop base, ptrdiff_t offset) {
  50   assert(base != NULL, "Invalid base");
  51   return reinterpret_cast<oop*>(reinterpret_cast<intptr_t>((void*)base) + offset);
  52 }
  53 
  54 template <DecoratorSet decorators, typename BarrierSetT>
  55 template <typename T>
  56 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::load_barrier_on_oop_field_preloaded(T* addr, oop o) {
  57   verify_decorators_absent<ON_UNKNOWN_OOP_REF>();
  58 
  59   if (HasDecorator<decorators, AS_NO_KEEPALIVE>::value) {
  60     if (HasDecorator<decorators, ON_STRONG_OOP_REF>::value) {
  61       return ZBarrier::weak_load_barrier_on_oop_field_preloaded(addr, o);
  62     } else if (HasDecorator<decorators, ON_WEAK_OOP_REF>::value) {
  63       return ZBarrier::weak_load_barrier_on_weak_oop_field_preloaded(addr, o);
  64     } else {
  65       assert((HasDecorator<decorators, ON_PHANTOM_OOP_REF>::value), "Must be");
  66       return ZBarrier::weak_load_barrier_on_phantom_oop_field_preloaded(addr, o);
  67     }
  68   } else {
  69     if (HasDecorator<decorators, ON_STRONG_OOP_REF>::value) {
  70       return ZBarrier::load_barrier_on_oop_field_preloaded(addr, o);
  71     } else if (HasDecorator<decorators, ON_WEAK_OOP_REF>::value) {
  72       return ZBarrier::load_barrier_on_weak_oop_field_preloaded(addr, o);
  73     } else {
  74       assert((HasDecorator<decorators, ON_PHANTOM_OOP_REF>::value), "Must be");
  75       return ZBarrier::load_barrier_on_phantom_oop_field_preloaded(addr, o);
  76     }
  77   }
  78 }
  79 
  80 template <DecoratorSet decorators, typename BarrierSetT>
  81 template <typename T>
  82 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::load_barrier_on_unknown_oop_field_preloaded(oop base, ptrdiff_t offset, T* addr, oop o) {
  83   verify_decorators_present<ON_UNKNOWN_OOP_REF>();
  84 
  85   const DecoratorSet decorators_known_strength =
  86     AccessBarrierSupport::resolve_possibly_unknown_oop_ref_strength<decorators>(base, offset);
  87 
  88   if (HasDecorator<decorators, AS_NO_KEEPALIVE>::value) {
  89     if (decorators_known_strength & ON_STRONG_OOP_REF) {
  90       return ZBarrier::weak_load_barrier_on_oop_field_preloaded(addr, o);
  91     } else if (decorators_known_strength & ON_WEAK_OOP_REF) {
  92       return ZBarrier::weak_load_barrier_on_weak_oop_field_preloaded(addr, o);
  93     } else {
  94       assert(decorators_known_strength & ON_PHANTOM_OOP_REF, "Must be");
  95       return ZBarrier::weak_load_barrier_on_phantom_oop_field_preloaded(addr, o);
  96     }
  97   } else {
  98     if (decorators_known_strength & ON_STRONG_OOP_REF) {
  99       return ZBarrier::load_barrier_on_oop_field_preloaded(addr, o);
 100     } else if (decorators_known_strength & ON_WEAK_OOP_REF) {
 101       return ZBarrier::load_barrier_on_weak_oop_field_preloaded(addr, o);
 102     } else {
 103       assert(decorators_known_strength & ON_PHANTOM_OOP_REF, "Must be");
 104       return ZBarrier::load_barrier_on_phantom_oop_field_preloaded(addr, o);
 105     }
 106   }
 107 }
 108 
 109 //
 110 // In heap
 111 //
 112 template <DecoratorSet decorators, typename BarrierSetT>
 113 template <typename T>
 114 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_load_in_heap(T* addr) {
 115   verify_decorators_absent<ON_UNKNOWN_OOP_REF>();
 116 
 117   const oop o = Raw::oop_load_in_heap(addr);
 118   return load_barrier_on_oop_field_preloaded(addr, o);
 119 }
 120 
 121 template <DecoratorSet decorators, typename BarrierSetT>
 122 inline oop ZBarrierSet::AccessBarrier<decorators, BarrierSetT>::oop_load_in_heap_at(oop base, ptrdiff_t offset) {
 123   oop* const addr = field_addr(base, offset);


< prev index next >