< prev index next >

src/share/vm/gc_implementation/shenandoah/shenandoahBarrierSet.hpp

Print this page
rev 10525 : [backport] Replace ShBarrierSet* casts with accessor
rev 10533 : [backport] Replace risky SBS::need_update_refs_barrier with straightforward check
rev 10534 : [backport] Pre-filter oops before enqueing them in SBS slowpaths
rev 10551 : [backport] Remove safe_equals()
rev 10594 : [backport] Split write barrier paths for mutator and GC workers


  20  * questions.
  21  *
  22  */
  23 
  24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  26 
  27 #include "memory/barrierSet.hpp"
  28 
  29 class ShenandoahHeap;
  30 
  31 class ShenandoahBarrierSet: public BarrierSet {
  32 private:
  33 
  34   ShenandoahHeap* _heap;
  35 
  36 public:
  37 
  38   ShenandoahBarrierSet(ShenandoahHeap* heap);
  39 






  40   void print_on(outputStream* st) const;
  41 
  42   bool is_a(BarrierSet::Name bsn);
  43 
  44   bool has_read_prim_array_opt();
  45   bool has_read_prim_barrier();
  46   bool has_read_ref_array_opt();
  47   bool has_read_ref_barrier();
  48   bool has_read_region_opt();
  49   bool has_write_prim_array_opt();
  50   bool has_write_prim_barrier();
  51   bool has_write_ref_array_opt();
  52   bool has_write_ref_barrier();
  53   bool has_write_ref_pre_barrier();
  54   bool has_write_region_opt();
  55   bool is_aligned(HeapWord* hw);
  56   void read_prim_array(MemRegion mr);
  57   void read_prim_field(HeapWord* hw, size_t s);
  58   bool read_prim_needs_barrier(HeapWord* hw, size_t s);
  59   void read_ref_array(MemRegion mr);


  83   // type of the barrier set is known.  Note that it is non-virtual.
  84   template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal);
  85 
  86   // These are the more general virtual versions.
  87   void write_ref_field_pre_work(oop* field, oop new_val);
  88   void write_ref_field_pre_work(narrowOop* field, oop new_val);
  89   void write_ref_field_pre_work(void* field, oop new_val);
  90 
  91   void write_ref_field_work(void* v, oop o, bool release = false);
  92   void write_region_work(MemRegion mr);
  93 
  94   virtual oop read_barrier(oop src);
  95 
  96   static inline oop resolve_forwarded_not_null(oop p);
  97   static inline oop resolve_forwarded(oop p);
  98 
  99   virtual oop write_barrier(oop obj);
 100   static oopDesc* write_barrier_IRT(oopDesc* src);
 101   static oopDesc* write_barrier_JRT(oopDesc* src);
 102 


 103   bool obj_equals(oop obj1, oop obj2);
 104   bool obj_equals(narrowOop obj1, narrowOop obj2);
 105 
 106 #ifdef ASSERT
 107   virtual void verify_safe_oop(oop p);
 108   virtual void verify_safe_oop(narrowOop p);
 109 #endif
 110 
 111 private:
 112   bool need_update_refs_barrier();
 113 
 114   template <class T>
 115   void write_ref_array_loop(HeapWord* start, size_t count);
 116 
 117 #ifndef CC_INTERP
 118 public:
 119   virtual void interpreter_read_barrier(MacroAssembler* masm, Register dst);
 120   virtual void interpreter_read_barrier_not_null(MacroAssembler* masm, Register dst);
 121   void interpreter_write_barrier(MacroAssembler* masm, Register dst);
 122   void asm_acmp_barrier(MacroAssembler* masm, Register op1, Register op2);
 123 
 124 #endif
 125 };
 126 
 127 #endif //SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP


  20  * questions.
  21  *
  22  */
  23 
  24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  26 
  27 #include "memory/barrierSet.hpp"
  28 
  29 class ShenandoahHeap;
  30 
  31 class ShenandoahBarrierSet: public BarrierSet {
  32 private:
  33 
  34   ShenandoahHeap* _heap;
  35 
  36 public:
  37 
  38   ShenandoahBarrierSet(ShenandoahHeap* heap);
  39 
  40   inline static ShenandoahBarrierSet* barrier_set() {
  41     BarrierSet *bs = oopDesc::bs();
  42     assert(bs->kind() == BarrierSet::ShenandoahBarrierSet, "sanity");
  43     return (ShenandoahBarrierSet*)bs;
  44   }
  45 
  46   void print_on(outputStream* st) const;
  47 
  48   bool is_a(BarrierSet::Name bsn);
  49 
  50   bool has_read_prim_array_opt();
  51   bool has_read_prim_barrier();
  52   bool has_read_ref_array_opt();
  53   bool has_read_ref_barrier();
  54   bool has_read_region_opt();
  55   bool has_write_prim_array_opt();
  56   bool has_write_prim_barrier();
  57   bool has_write_ref_array_opt();
  58   bool has_write_ref_barrier();
  59   bool has_write_ref_pre_barrier();
  60   bool has_write_region_opt();
  61   bool is_aligned(HeapWord* hw);
  62   void read_prim_array(MemRegion mr);
  63   void read_prim_field(HeapWord* hw, size_t s);
  64   bool read_prim_needs_barrier(HeapWord* hw, size_t s);
  65   void read_ref_array(MemRegion mr);


  89   // type of the barrier set is known.  Note that it is non-virtual.
  90   template <class T> inline void inline_write_ref_field_pre(T* field, oop newVal);
  91 
  92   // These are the more general virtual versions.
  93   void write_ref_field_pre_work(oop* field, oop new_val);
  94   void write_ref_field_pre_work(narrowOop* field, oop new_val);
  95   void write_ref_field_pre_work(void* field, oop new_val);
  96 
  97   void write_ref_field_work(void* v, oop o, bool release = false);
  98   void write_region_work(MemRegion mr);
  99 
 100   virtual oop read_barrier(oop src);
 101 
 102   static inline oop resolve_forwarded_not_null(oop p);
 103   static inline oop resolve_forwarded(oop p);
 104 
 105   virtual oop write_barrier(oop obj);
 106   static oopDesc* write_barrier_IRT(oopDesc* src);
 107   static oopDesc* write_barrier_JRT(oopDesc* src);
 108 
 109   oop write_barrier_mutator(oop obj);
 110 
 111   bool obj_equals(oop obj1, oop obj2);
 112   bool obj_equals(narrowOop obj1, narrowOop obj2);
 113 
 114   void enqueue(oop obj);



 115 
 116 private:
 117   inline bool need_update_refs_barrier();
 118 
 119   template <class T>
 120   void write_ref_array_loop(HeapWord* start, size_t count);
 121 
 122 #ifndef CC_INTERP
 123 public:
 124   virtual void interpreter_read_barrier(MacroAssembler* masm, Register dst);
 125   virtual void interpreter_read_barrier_not_null(MacroAssembler* masm, Register dst);
 126   void interpreter_write_barrier(MacroAssembler* masm, Register dst);
 127   void asm_acmp_barrier(MacroAssembler* masm, Register op1, Register op2);
 128 
 129 #endif
 130 };
 131 
 132 #endif //SHARE_VM_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
< prev index next >