equal
deleted
inserted
replaced
27 #include "asm/macroAssembler.inline.hpp" |
27 #include "asm/macroAssembler.inline.hpp" |
28 #include "gc/shared/barrierSet.hpp" |
28 #include "gc/shared/barrierSet.hpp" |
29 #include "gc/shared/cardTable.hpp" |
29 #include "gc/shared/cardTable.hpp" |
30 #include "gc/shared/cardTableBarrierSet.hpp" |
30 #include "gc/shared/cardTableBarrierSet.hpp" |
31 #include "gc/shared/cardTableBarrierSetAssembler.hpp" |
31 #include "gc/shared/cardTableBarrierSetAssembler.hpp" |
32 #include "gc/shared/collectedHeap.hpp" |
|
33 #include "interpreter/interp_masm.hpp" |
32 #include "interpreter/interp_masm.hpp" |
34 |
33 |
35 #define __ masm-> |
34 #define __ masm-> |
36 |
35 |
37 #ifdef PRODUCT |
36 #ifdef PRODUCT |
42 |
41 |
43 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") |
42 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") |
44 |
43 |
45 void CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, |
44 void CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, |
46 Register addr, Register count, Register tmp) { |
45 Register addr, Register count, Register tmp) { |
47 CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(Universe::heap()->barrier_set()); |
46 CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(BarrierSet::barrier_set()); |
48 CardTable* ct = ctbs->card_table(); |
47 CardTable* ct = ctbs->card_table(); |
49 assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code"); |
48 assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code"); |
50 assert_different_registers(addr, count, tmp); |
49 assert_different_registers(addr, count, tmp); |
51 |
50 |
52 Label L_loop, L_done; |
51 Label L_loop, L_done; |
81 } |
80 } |
82 |
81 |
83 void CardTableBarrierSetAssembler::card_write_barrier_post(MacroAssembler* masm, Register store_addr, Register new_val, Register tmp) { |
82 void CardTableBarrierSetAssembler::card_write_barrier_post(MacroAssembler* masm, Register store_addr, Register new_val, Register tmp) { |
84 // If we're writing constant NULL, we can skip the write barrier. |
83 // If we're writing constant NULL, we can skip the write barrier. |
85 if (new_val == G0) return; |
84 if (new_val == G0) return; |
86 CardTableBarrierSet* bs = barrier_set_cast<CardTableBarrierSet>(Universe::heap()->barrier_set()); |
85 CardTableBarrierSet* bs = barrier_set_cast<CardTableBarrierSet>(BarrierSet::barrier_set()); |
87 card_table_write(masm, bs->card_table()->byte_map_base(), tmp, store_addr); |
86 card_table_write(masm, bs->card_table()->byte_map_base(), tmp, store_addr); |
88 } |
87 } |
89 |
88 |
90 void CardTableBarrierSetAssembler::oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, |
89 void CardTableBarrierSetAssembler::oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, |
91 Register val, Address dst, Register tmp) { |
90 Register val, Address dst, Register tmp) { |