src/share/vm/opto/graphKit.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/graphKit.cpp	Tue Sep  1 11:01:56 2009
--- new/src/share/vm/opto/graphKit.cpp	Tue Sep  1 11:01:56 2009

*** 1448,1458 **** --- 1448,1458 ---- g1_write_barrier_post(store, obj, adr, adr_idx, val, bt, use_precise); break; case BarrierSet::CardTableModRef: case BarrierSet::CardTableExtension: ! write_barrier_post(store, obj, adr, adr_idx, val, use_precise); break; case BarrierSet::ModRef: break;
*** 3163,3172 **** --- 3163,3173 ---- // Insert a write-barrier store. This is to let generational GC work; we have // to flag all oop-stores before the next GC point. void GraphKit::write_barrier_post(Node* oop_store, Node* obj, Node* adr, + uint adr_idx, Node* val, bool use_precise) { // No store check needed if we're storing a NULL or an old object // (latter case is probably a string constant). The concurrent // mark sweep garbage collector, however, needs to have all nonNull
*** 3212,3222 **** --- 3213,3223 ---- BasicType bt = T_BYTE; if( !UseConcMarkSweepGC ) { __ store(__ ctrl(), card_adr, zero, bt, adr_type); } else { // Specialized path for CM store barrier ! __ storeCM(__ ctrl(), card_adr, zero, oop_store, adr_idx, bt, adr_type); } // Final sync IdealKit and GraphKit. sync_kit(ideal); }
*** 3312,3331 **** --- 3313,3333 ---- // Update the card table and add card address to the queue // void GraphKit::g1_mark_card(IdealKit& ideal, Node* card_adr, Node* oop_store, + uint oop_alias_idx, Node* index, Node* index_adr, Node* buffer, const TypeFunc* tf) { Node* zero = __ ConI(0); Node* no_base = __ top(); BasicType card_bt = T_BYTE; // Smash zero into card. MUST BE ORDERED WRT TO STORE ! __ storeCM(__ ctrl(), card_adr, zero, oop_store, oop_alias_idx, card_bt, Compile::AliasIdxRaw); // Now do the queue work __ if_then(index, BoolTest::ne, zero); { Node* next_index = __ SubI(index, __ ConI(sizeof(intptr_t)));
*** 3433,3449 **** --- 3435,3451 ---- // load the original value of the card Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); __ if_then(card_val, BoolTest::ne, zero); { ! g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); } __ end_if(); } __ end_if(); } __ end_if(); } else { // Object.clone() instrinsic uses this path. ! g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); } // Final sync IdealKit and GraphKit. sync_kit(ideal); }

src/share/vm/opto/graphKit.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File