< prev index next >

src/cpu/x86/vm/macroAssembler_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 8804 : Further JPRT improvements

@@ -4221,17 +4221,21 @@
   // Do not use ExternalAddress to load 'byte_map_base', since 'byte_map_base' is NOT
   // a valid address and therefore is not properly handled by the relocation code.
   movptr(cardtable, (intptr_t)ct->byte_map_base);
   addptr(card_addr, cardtable);
 
+  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 a region crossing, non-NULL oop, card is clean.
   // dirty card and log.
 
   movb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
< prev index next >