src/hotspot/share/gc/shared/cardTableBarrierSet.cpp
changeset 50180 ffa644980dff
parent 49972 37b2446d7f86
child 54006 a421bdf22394
equal deleted inserted replaced
50179:d9bc8557ae16 50180:ffa644980dff
    35 #include "utilities/align.hpp"
    35 #include "utilities/align.hpp"
    36 #include "utilities/macros.hpp"
    36 #include "utilities/macros.hpp"
    37 #ifdef COMPILER1
    37 #ifdef COMPILER1
    38 #include "gc/shared/c1/cardTableBarrierSetC1.hpp"
    38 #include "gc/shared/c1/cardTableBarrierSetC1.hpp"
    39 #endif
    39 #endif
       
    40 #ifdef COMPILER2
       
    41 #include "gc/shared/c2/cardTableBarrierSetC2.hpp"
       
    42 #endif
    40 
    43 
    41 class CardTableBarrierSetC1;
    44 class CardTableBarrierSetC1;
       
    45 class CardTableBarrierSetC2;
    42 
    46 
    43 // This kind of "BarrierSet" allows a "CollectedHeap" to detect and
    47 // This kind of "BarrierSet" allows a "CollectedHeap" to detect and
    44 // enumerate ref fields that have been modified (since the last
    48 // enumerate ref fields that have been modified (since the last
    45 // enumeration.)
    49 // enumeration.)
    46 
    50 
    47 CardTableBarrierSet::CardTableBarrierSet(BarrierSetAssembler* barrier_set_assembler,
    51 CardTableBarrierSet::CardTableBarrierSet(BarrierSetAssembler* barrier_set_assembler,
    48                                          BarrierSetC1* barrier_set_c1,
    52                                          BarrierSetC1* barrier_set_c1,
       
    53                                          BarrierSetC2* barrier_set_c2,
    49                                          CardTable* card_table,
    54                                          CardTable* card_table,
    50                                          const BarrierSet::FakeRtti& fake_rtti) :
    55                                          const BarrierSet::FakeRtti& fake_rtti) :
    51   ModRefBarrierSet(barrier_set_assembler,
    56   ModRefBarrierSet(barrier_set_assembler,
    52                    barrier_set_c1,
    57                    barrier_set_c1,
       
    58                    barrier_set_c2,
    53                    fake_rtti.add_tag(BarrierSet::CardTableBarrierSet)),
    59                    fake_rtti.add_tag(BarrierSet::CardTableBarrierSet)),
    54   _defer_initial_card_mark(false),
    60   _defer_initial_card_mark(false),
    55   _card_table(card_table)
    61   _card_table(card_table)
    56 {}
    62 {}
    57 
    63 
    58 CardTableBarrierSet::CardTableBarrierSet(CardTable* card_table) :
    64 CardTableBarrierSet::CardTableBarrierSet(CardTable* card_table) :
    59   ModRefBarrierSet(make_barrier_set_assembler<CardTableBarrierSetAssembler>(),
    65   ModRefBarrierSet(make_barrier_set_assembler<CardTableBarrierSetAssembler>(),
    60                    make_barrier_set_c1<CardTableBarrierSetC1>(),
    66                    make_barrier_set_c1<CardTableBarrierSetC1>(),
       
    67                    make_barrier_set_c2<CardTableBarrierSetC2>(),
    61                    BarrierSet::FakeRtti(BarrierSet::CardTableBarrierSet)),
    68                    BarrierSet::FakeRtti(BarrierSet::CardTableBarrierSet)),
    62   _defer_initial_card_mark(false),
    69   _defer_initial_card_mark(false),
    63   _card_table(card_table)
    70   _card_table(card_table)
    64 {}
    71 {}
    65 
    72 
   153 
   160 
   154 void CardTableBarrierSet::initialize_deferred_card_mark_barriers() {
   161 void CardTableBarrierSet::initialize_deferred_card_mark_barriers() {
   155   // Used for ReduceInitialCardMarks (when COMPILER2 or JVMCI is used);
   162   // Used for ReduceInitialCardMarks (when COMPILER2 or JVMCI is used);
   156   // otherwise remains unused.
   163   // otherwise remains unused.
   157 #if COMPILER2_OR_JVMCI
   164 #if COMPILER2_OR_JVMCI
   158   _defer_initial_card_mark = is_server_compilation_mode_vm() && ReduceInitialCardMarks && can_elide_tlab_store_barriers()
   165   _defer_initial_card_mark = is_server_compilation_mode_vm() && ReduceInitialCardMarks
   159                              && (DeferInitialCardMark || card_mark_must_follow_store());
   166                              && (DeferInitialCardMark || card_mark_must_follow_store());
   160 #else
   167 #else
   161   assert(_defer_initial_card_mark == false, "Who would set it?");
   168   assert(_defer_initial_card_mark == false, "Who would set it?");
   162 #endif
   169 #endif
   163 }
   170 }