< prev index next >

src/cpu/x86/vm/c1_Runtime1_x86.cpp

Print this page
rev 8802 : G1 performance improvements: card batching, joining, sorting, prefetching and write barrier fence elision and simplification based on a global syncrhonization using handshakes piggybacking on thread-local safepoints.
rev 8803 : Implementation improvements to pass JPRT

@@ -1772,16 +1772,21 @@
         __ movptr(cardtable, (intptr_t)ct->byte_map_base);
         __ addptr(card_addr, cardtable);
 
         NOT_LP64(__ get_thread(thread);)
 
+        if (G1ElideMembar) {
+          __ cmpb(Address(card_addr, 0), (int)CardTableModRefBS::clean_card_val());
+          __ jcc(Assembler::notEqual, done);
+        } else {
         __ cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val());
         __ jcc(Assembler::equal, done);
 
         __ membar(Assembler::Membar_mask_bits(Assembler::StoreLoad));
         __ cmpb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
         __ jcc(Assembler::equal, done);
+        }
 
         // storing region crossing non-NULL, card is clean.
         // dirty card and log.
 
         __ movb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
< prev index next >