src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp
changeset 54266 7816d989bf21
parent 54110 f4f0dce5d0bb
child 58273 08a5148e7c4e
equal deleted inserted replaced
54265:1b0163c877c0 54266:7816d989bf21
    70     __ pop(saved_regs, sp);
    70     __ pop(saved_regs, sp);
    71   }
    71   }
    72 }
    72 }
    73 
    73 
    74 void G1BarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators,
    74 void G1BarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators,
    75                                                              Register start, Register end, Register scratch, RegSet saved_regs) {
    75                                                              Register start, Register count, Register scratch, RegSet saved_regs) {
    76   __ push(saved_regs, sp);
    76   __ push(saved_regs, sp);
    77   // must compute element count unless barrier set interface is changed (other platforms supply count)
    77   assert_different_registers(start, count, scratch);
    78   assert_different_registers(start, end, scratch);
    78   assert_different_registers(c_rarg0, count);
    79   __ lea(scratch, Address(end, BytesPerHeapOop));
       
    80   __ sub(scratch, scratch, start);               // subtract start to get #bytes
       
    81   __ lsr(scratch, scratch, LogBytesPerHeapOop);  // convert to element count
       
    82   __ mov(c_rarg0, start);
    79   __ mov(c_rarg0, start);
    83   __ mov(c_rarg1, scratch);
    80   __ mov(c_rarg1, count);
    84   __ call_VM_leaf(CAST_FROM_FN_PTR(address, G1BarrierSetRuntime::write_ref_array_post_entry), 2);
    81   __ call_VM_leaf(CAST_FROM_FN_PTR(address, G1BarrierSetRuntime::write_ref_array_post_entry), 2);
    85   __ pop(saved_regs, sp);
    82   __ pop(saved_regs, sp);
    86 }
    83 }
    87 
    84 
    88 void G1BarrierSetAssembler::g1_write_barrier_pre(MacroAssembler* masm,
    85 void G1BarrierSetAssembler::g1_write_barrier_pre(MacroAssembler* masm,