< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp

Print this page
*** 1,7 ***
--- 1,8 ---
  /*
   * Copyright (c) 2013, 2021, Red Hat, Inc. All rights reserved.
+  * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

*** 25,30 ***
  #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  #define SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  
  #include "gc/shared/barrierSet.hpp"
  #include "gc/shared/bufferNode.hpp"
  #include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp"
  
  class ShenandoahHeap;
  class ShenandoahBarrierSetAssembler;
  
  class ShenandoahBarrierSet: public BarrierSet {
  private:
    ShenandoahHeap* const _heap;
    BufferNode::Allocator _satb_mark_queue_buffer_allocator;
    ShenandoahSATBMarkQueueSet _satb_mark_queue_set;
  
  public:
!   ShenandoahBarrierSet(ShenandoahHeap* heap);
  
    static ShenandoahBarrierSetAssembler* assembler();
  
    inline static ShenandoahBarrierSet* barrier_set() {
      return barrier_set_cast<ShenandoahBarrierSet>(BarrierSet::barrier_set());
    }
  
    static ShenandoahSATBMarkQueueSet& satb_mark_queue_set() {
      return barrier_set()->_satb_mark_queue_set;
    }
  
    static bool need_load_reference_barrier(DecoratorSet decorators, BasicType type);
--- 26,36 ---
  #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  #define SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_HPP
  
  #include "gc/shared/barrierSet.hpp"
  #include "gc/shared/bufferNode.hpp"
+ #include "gc/shenandoah/shenandoahCardTable.hpp"
  #include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp"
  
  class ShenandoahHeap;
  class ShenandoahBarrierSetAssembler;
  
  class ShenandoahBarrierSet: public BarrierSet {
  private:
    ShenandoahHeap* const _heap;
+   ShenandoahCardTable* _card_table;
    BufferNode::Allocator _satb_mark_queue_buffer_allocator;
    ShenandoahSATBMarkQueueSet _satb_mark_queue_set;
  
  public:
!   ShenandoahBarrierSet(ShenandoahHeap* heap, MemRegion heap_region);
  
    static ShenandoahBarrierSetAssembler* assembler();
  
    inline static ShenandoahBarrierSet* barrier_set() {
      return barrier_set_cast<ShenandoahBarrierSet>(BarrierSet::barrier_set());
    }
  
+   inline ShenandoahCardTable* card_table() {
+     return _card_table;
+   }
+ 
    static ShenandoahSATBMarkQueueSet& satb_mark_queue_set() {
      return barrier_set()->_satb_mark_queue_set;
    }
  
    static bool need_load_reference_barrier(DecoratorSet decorators, BasicType type);

*** 110,13 ***
    inline oop oop_cmpxchg(DecoratorSet decorators, T* addr, oop compare_value, oop new_value);
  
    template <typename T>
    inline oop oop_xchg(DecoratorSet decorators, T* addr, oop new_value);
  
  private:
    template <class T>
!   inline void arraycopy_marking(T* src, T* dst, size_t count);
    template <class T>
    inline void arraycopy_evacuation(T* src, size_t count);
    template <class T>
    inline void arraycopy_update(T* src, size_t count);
  
--- 117,18 ---
    inline oop oop_cmpxchg(DecoratorSet decorators, T* addr, oop compare_value, oop new_value);
  
    template <typename T>
    inline oop oop_xchg(DecoratorSet decorators, T* addr, oop new_value);
  
+   template <DecoratorSet decorators, typename T>
+   void write_ref_field_post(T* field);
+ 
+   void write_ref_array(HeapWord* start, size_t count);
+ 
  private:
    template <class T>
!   inline void arraycopy_marking(T* src, T* dst, size_t count, bool is_old_marking);
    template <class T>
    inline void arraycopy_evacuation(T* src, size_t count);
    template <class T>
    inline void arraycopy_update(T* src, size_t count);
  
< prev index next >