1.1 --- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp Fri Oct 04 13:33:02 2013 +0200 1.2 +++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp Tue Oct 08 17:35:51 2013 +0200 1.3 @@ -38,6 +38,9 @@ 1.4 #include "runtime/vframeArray.hpp" 1.5 #include "utilities/macros.hpp" 1.6 #include "vmreg_x86.inline.hpp" 1.7 +#if INCLUDE_ALL_GCS 1.8 +#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" 1.9 +#endif 1.10 1.11 1.12 // Implementation of StubAssembler 1.13 @@ -1753,13 +1756,17 @@ 1.14 __ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index))); 1.15 #endif 1.16 1.17 - __ cmpb(Address(card_addr, 0), 0); 1.18 + __ cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val()); 1.19 + __ jcc(Assembler::equal, done); 1.20 + 1.21 + __ membar(Assembler::Membar_mask_bits(Assembler::StoreLoad)); 1.22 + __ cmpb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val()); 1.23 __ jcc(Assembler::equal, done); 1.24 1.25 // storing region crossing non-NULL, card is clean. 1.26 // dirty card and log. 1.27 1.28 - __ movb(Address(card_addr, 0), 0); 1.29 + __ movb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val()); 1.30 1.31 __ cmpl(queue_index, 0); 1.32 __ jcc(Assembler::equal, runtime);