--- a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Fri Oct 04 13:33:02 2013 +0200
+++ b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Tue Oct 08 17:35:51 2013 +0200
@@ -38,6 +38,9 @@
#include "runtime/vframeArray.hpp"
#include "utilities/macros.hpp"
#include "vmreg_x86.inline.hpp"
+#if INCLUDE_ALL_GCS
+#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
+#endif
// Implementation of StubAssembler
@@ -1753,13 +1756,17 @@
__ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index)));
#endif
- __ cmpb(Address(card_addr, 0), 0);
+ __ 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), 0);
+ __ movb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
__ cmpl(queue_index, 0);
__ jcc(Assembler::equal, runtime);