3630 pre_val = O0; |
3630 pre_val = O0; |
3631 } |
3631 } |
3632 |
3632 |
3633 int satb_q_index_byte_offset = |
3633 int satb_q_index_byte_offset = |
3634 in_bytes(JavaThread::satb_mark_queue_offset() + |
3634 in_bytes(JavaThread::satb_mark_queue_offset() + |
3635 PtrQueue::byte_offset_of_index()); |
3635 SATBMarkQueue::byte_offset_of_index()); |
3636 |
3636 |
3637 int satb_q_buf_byte_offset = |
3637 int satb_q_buf_byte_offset = |
3638 in_bytes(JavaThread::satb_mark_queue_offset() + |
3638 in_bytes(JavaThread::satb_mark_queue_offset() + |
3639 PtrQueue::byte_offset_of_buf()); |
3639 SATBMarkQueue::byte_offset_of_buf()); |
3640 |
3640 |
3641 assert(in_bytes(PtrQueue::byte_width_of_index()) == sizeof(intptr_t) && |
3641 assert(in_bytes(SATBMarkQueue::byte_width_of_index()) == sizeof(intptr_t) && |
3642 in_bytes(PtrQueue::byte_width_of_buf()) == sizeof(intptr_t), |
3642 in_bytes(SATBMarkQueue::byte_width_of_buf()) == sizeof(intptr_t), |
3643 "check sizes in assembly below"); |
3643 "check sizes in assembly below"); |
3644 |
3644 |
3645 __ bind(restart); |
3645 __ bind(restart); |
3646 |
3646 |
3647 // Load the index into the SATB buffer. PtrQueue::_index is a size_t |
3647 // Load the index into the SATB buffer. SATBMarkQueue::_index is a size_t |
3648 // so ld_ptr is appropriate. |
3648 // so ld_ptr is appropriate. |
3649 __ ld_ptr(G2_thread, satb_q_index_byte_offset, L0); |
3649 __ ld_ptr(G2_thread, satb_q_index_byte_offset, L0); |
3650 |
3650 |
3651 // index == 0? |
3651 // index == 0? |
3652 __ cmp_and_brx_short(L0, G0, Assembler::equal, Assembler::pn, refill); |
3652 __ cmp_and_brx_short(L0, G0, Assembler::equal, Assembler::pn, refill); |
3734 assert(offset == 0 || index == noreg, "choose one"); |
3734 assert(offset == 0 || index == noreg, "choose one"); |
3735 assert(pre_val == noreg, "check this code"); |
3735 assert(pre_val == noreg, "check this code"); |
3736 } |
3736 } |
3737 |
3737 |
3738 // Is marking active? |
3738 // Is marking active? |
3739 if (in_bytes(PtrQueue::byte_width_of_active()) == 4) { |
3739 if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) { |
3740 ld(G2, |
3740 ld(G2, |
3741 in_bytes(JavaThread::satb_mark_queue_offset() + |
3741 in_bytes(JavaThread::satb_mark_queue_offset() + |
3742 PtrQueue::byte_offset_of_active()), |
3742 SATBMarkQueue::byte_offset_of_active()), |
3743 tmp); |
3743 tmp); |
3744 } else { |
3744 } else { |
3745 guarantee(in_bytes(PtrQueue::byte_width_of_active()) == 1, |
3745 guarantee(in_bytes(SATBMarkQueue::byte_width_of_active()) == 1, |
3746 "Assumption"); |
3746 "Assumption"); |
3747 ldsb(G2, |
3747 ldsb(G2, |
3748 in_bytes(JavaThread::satb_mark_queue_offset() + |
3748 in_bytes(JavaThread::satb_mark_queue_offset() + |
3749 PtrQueue::byte_offset_of_active()), |
3749 SATBMarkQueue::byte_offset_of_active()), |
3750 tmp); |
3750 tmp); |
3751 } |
3751 } |
3752 |
3752 |
3753 // Is marking active? |
3753 // Is marking active? |
3754 cmp_and_br_short(tmp, G0, Assembler::equal, Assembler::pt, filtered); |
3754 cmp_and_br_short(tmp, G0, Assembler::equal, Assembler::pt, filtered); |
3845 // First, dirty it. |
3845 // First, dirty it. |
3846 __ stb(G0, O3, G0); // [cardPtr] := 0 (i.e., dirty). |
3846 __ stb(G0, O3, G0); // [cardPtr] := 0 (i.e., dirty). |
3847 |
3847 |
3848 int dirty_card_q_index_byte_offset = |
3848 int dirty_card_q_index_byte_offset = |
3849 in_bytes(JavaThread::dirty_card_queue_offset() + |
3849 in_bytes(JavaThread::dirty_card_queue_offset() + |
3850 PtrQueue::byte_offset_of_index()); |
3850 DirtyCardQueue::byte_offset_of_index()); |
3851 int dirty_card_q_buf_byte_offset = |
3851 int dirty_card_q_buf_byte_offset = |
3852 in_bytes(JavaThread::dirty_card_queue_offset() + |
3852 in_bytes(JavaThread::dirty_card_queue_offset() + |
3853 PtrQueue::byte_offset_of_buf()); |
3853 DirtyCardQueue::byte_offset_of_buf()); |
3854 __ bind(restart); |
3854 __ bind(restart); |
3855 |
3855 |
3856 // Load the index into the update buffer. PtrQueue::_index is |
3856 // Load the index into the update buffer. DirtyCardQueue::_index is |
3857 // a size_t so ld_ptr is appropriate here. |
3857 // a size_t so ld_ptr is appropriate here. |
3858 __ ld_ptr(G2_thread, dirty_card_q_index_byte_offset, L0); |
3858 __ ld_ptr(G2_thread, dirty_card_q_index_byte_offset, L0); |
3859 |
3859 |
3860 // index == 0? |
3860 // index == 0? |
3861 __ cmp_and_brx_short(L0, G0, Assembler::equal, Assembler::pn, refill); |
3861 __ cmp_and_brx_short(L0, G0, Assembler::equal, Assembler::pn, refill); |