Mercurial > hg > truffle
comparison src/cpu/x86/vm/c1_Runtime1_x86.cpp @ 13086:096c224171c4
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 20 Nov 2013 00:10:38 +0100 |
parents | cefad50507d8 69944b868a32 |
children | 02f27ecb4f3a |
comparison
equal
deleted
inserted
replaced
12782:92b7ec34ddfa | 13086:096c224171c4 |
---|---|
36 #include "runtime/sharedRuntime.hpp" | 36 #include "runtime/sharedRuntime.hpp" |
37 #include "runtime/signature.hpp" | 37 #include "runtime/signature.hpp" |
38 #include "runtime/vframeArray.hpp" | 38 #include "runtime/vframeArray.hpp" |
39 #include "utilities/macros.hpp" | 39 #include "utilities/macros.hpp" |
40 #include "vmreg_x86.inline.hpp" | 40 #include "vmreg_x86.inline.hpp" |
41 #if INCLUDE_ALL_GCS | |
42 #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" | |
43 #endif | |
41 | 44 |
42 | 45 |
43 // Implementation of StubAssembler | 46 // Implementation of StubAssembler |
44 | 47 |
45 int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, int args_size) { | 48 int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, int args_size) { |
1751 | 1754 |
1752 Address index(noreg, card_index, Address::times_1); | 1755 Address index(noreg, card_index, Address::times_1); |
1753 __ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index))); | 1756 __ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index))); |
1754 #endif | 1757 #endif |
1755 | 1758 |
1756 __ cmpb(Address(card_addr, 0), 0); | 1759 __ cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val()); |
1760 __ jcc(Assembler::equal, done); | |
1761 | |
1762 __ membar(Assembler::Membar_mask_bits(Assembler::StoreLoad)); | |
1763 __ cmpb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val()); | |
1757 __ jcc(Assembler::equal, done); | 1764 __ jcc(Assembler::equal, done); |
1758 | 1765 |
1759 // storing region crossing non-NULL, card is clean. | 1766 // storing region crossing non-NULL, card is clean. |
1760 // dirty card and log. | 1767 // dirty card and log. |
1761 | 1768 |
1762 __ movb(Address(card_addr, 0), 0); | 1769 __ movb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val()); |
1763 | 1770 |
1764 __ cmpl(queue_index, 0); | 1771 __ cmpl(queue_index, 0); |
1765 __ jcc(Assembler::equal, runtime); | 1772 __ jcc(Assembler::equal, runtime); |
1766 __ subl(queue_index, wordSize); | 1773 __ subl(queue_index, wordSize); |
1767 | 1774 |