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 } |