< prev index next >

src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp

Print this page




 441 
 442   __ ld(tmp2, satb_q_buf_byte_offset, R16_thread);
 443   __ ld(pre_val, -8, R1_SP); // Load from stack.
 444   __ addi(tmp, tmp, -oopSize);
 445 
 446   __ std(tmp, satb_q_index_byte_offset, R16_thread);
 447   __ stdx(pre_val, tmp2, tmp); // [_buf + index] := <address_of_card>
 448 
 449   __ bind(marking_not_active);
 450   // Restore temp registers and return-from-leaf.
 451   __ ld(tmp2, -24, R1_SP);
 452   __ ld(tmp, -16, R1_SP);
 453   __ blr();
 454 
 455   __ bind(refill);
 456   const int nbytes_save = (MacroAssembler::num_volatile_regs + stack_slots) * BytesPerWord;
 457   __ save_volatile_gprs(R1_SP, -nbytes_save); // except R0
 458   __ mflr(R0);
 459   __ std(R0, _abi(lr), R1_SP);
 460   __ push_frame_reg_args(nbytes_save, R0); // dummy frame for C call
 461   __ call_VM_leaf(CAST_FROM_FN_PTR(address, SATBMarkQueueSet::handle_zero_index_for_thread), R16_thread);
 462   __ pop_frame();
 463   __ ld(R0, _abi(lr), R1_SP);
 464   __ mtlr(R0);
 465   __ restore_volatile_gprs(R1_SP, -nbytes_save); // except R0
 466   __ b(restart);
 467 }
 468 
 469 void G1BarrierSetAssembler::generate_c1_post_barrier_runtime_stub(StubAssembler* sasm) {
 470   G1BarrierSet* bs = barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set());
 471 
 472   __ set_info("g1_post_barrier_slow_id", false);
 473 
 474   // Using stack slots: spill addr, spill tmp2
 475   const int stack_slots = 2;
 476   Register tmp = R0;
 477   Register addr = R14;
 478   Register tmp2 = R15;
 479   jbyte* byte_map_base = bs->card_table()->byte_map_base();
 480 
 481   Label restart, refill, ret;




 441 
 442   __ ld(tmp2, satb_q_buf_byte_offset, R16_thread);
 443   __ ld(pre_val, -8, R1_SP); // Load from stack.
 444   __ addi(tmp, tmp, -oopSize);
 445 
 446   __ std(tmp, satb_q_index_byte_offset, R16_thread);
 447   __ stdx(pre_val, tmp2, tmp); // [_buf + index] := <address_of_card>
 448 
 449   __ bind(marking_not_active);
 450   // Restore temp registers and return-from-leaf.
 451   __ ld(tmp2, -24, R1_SP);
 452   __ ld(tmp, -16, R1_SP);
 453   __ blr();
 454 
 455   __ bind(refill);
 456   const int nbytes_save = (MacroAssembler::num_volatile_regs + stack_slots) * BytesPerWord;
 457   __ save_volatile_gprs(R1_SP, -nbytes_save); // except R0
 458   __ mflr(R0);
 459   __ std(R0, _abi(lr), R1_SP);
 460   __ push_frame_reg_args(nbytes_save, R0); // dummy frame for C call
 461   __ call_VM_leaf(CAST_FROM_FN_PTR(address, G1SATBMarkQueueSet::handle_zero_index_for_thread), R16_thread);
 462   __ pop_frame();
 463   __ ld(R0, _abi(lr), R1_SP);
 464   __ mtlr(R0);
 465   __ restore_volatile_gprs(R1_SP, -nbytes_save); // except R0
 466   __ b(restart);
 467 }
 468 
 469 void G1BarrierSetAssembler::generate_c1_post_barrier_runtime_stub(StubAssembler* sasm) {
 470   G1BarrierSet* bs = barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set());
 471 
 472   __ set_info("g1_post_barrier_slow_id", false);
 473 
 474   // Using stack slots: spill addr, spill tmp2
 475   const int stack_slots = 2;
 476   Register tmp = R0;
 477   Register addr = R14;
 478   Register tmp2 = R15;
 479   jbyte* byte_map_base = bs->card_table()->byte_map_base();
 480 
 481   Label restart, refill, ret;


< prev index next >