603 __ str(rscratch2, Address(tmp, 0));
604 __ b(done);
605
606 __ bind(runtime);
607 __ push_call_clobbered_registers();
608 __ load_parameter(0, pre_val);
609 __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::write_ref_field_pre_entry), pre_val, thread);
610 __ pop_call_clobbered_registers();
611 __ bind(done);
612
613 __ epilogue();
614 }
615
616 void ShenandoahBarrierSetAssembler::generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm) {
617 __ prologue("shenandoah_load_reference_barrier", false);
618 // arg0 : object to be resolved
619
620 __ push_call_clobbered_registers();
621 __ load_parameter(0, r0);
622 __ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier));
623 __ blrt(lr, 1, 0, MacroAssembler::ret_type_integral);
624 __ mov(rscratch1, r0);
625 __ pop_call_clobbered_registers();
626 __ mov(r0, rscratch1);
627
628 __ epilogue();
629 }
630
631 #undef __
632
633 #endif // COMPILER1
634
635 address ShenandoahBarrierSetAssembler::shenandoah_lrb() {
636 assert(_shenandoah_lrb != NULL, "need load reference barrier stub");
637 return _shenandoah_lrb;
638 }
639
640 #define __ cgen->assembler()->
641
642 // Shenandoah load reference barrier.
643 //
|
603 __ str(rscratch2, Address(tmp, 0));
604 __ b(done);
605
606 __ bind(runtime);
607 __ push_call_clobbered_registers();
608 __ load_parameter(0, pre_val);
609 __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::write_ref_field_pre_entry), pre_val, thread);
610 __ pop_call_clobbered_registers();
611 __ bind(done);
612
613 __ epilogue();
614 }
615
616 void ShenandoahBarrierSetAssembler::generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm) {
617 __ prologue("shenandoah_load_reference_barrier", false);
618 // arg0 : object to be resolved
619
620 __ push_call_clobbered_registers();
621 __ load_parameter(0, r0);
622 __ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier));
623 __ blr(lr);
624 __ mov(rscratch1, r0);
625 __ pop_call_clobbered_registers();
626 __ mov(r0, rscratch1);
627
628 __ epilogue();
629 }
630
631 #undef __
632
633 #endif // COMPILER1
634
635 address ShenandoahBarrierSetAssembler::shenandoah_lrb() {
636 assert(_shenandoah_lrb != NULL, "need load reference barrier stub");
637 return _shenandoah_lrb;
638 }
639
640 #define __ cgen->assembler()->
641
642 // Shenandoah load reference barrier.
643 //
|