hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp
changeset 34148 6efbc7ffd767
parent 33628 09241459a8b8
child 34211 d25c2fc1e248
equal deleted inserted replaced
34147:8726d73d17fb 34148:6efbc7ffd767
  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);