< prev index next >

src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp

Print this page
rev 58062 : 8239081: Shenandoah: Consolidate C1 LRB and native barriers

*** 857,868 **** __ jcc(Assembler::zero, *stub->continuation()); __ bind(slow_path); ce->store_parameter(res, 0); ce->store_parameter(addr, 1); __ call(RuntimeAddress(bs->load_reference_barrier_rt_code_blob()->code_begin())); ! __ jmp(*stub->continuation()); } #undef __ --- 857,871 ---- __ jcc(Assembler::zero, *stub->continuation()); __ bind(slow_path); ce->store_parameter(res, 0); ce->store_parameter(addr, 1); + if (stub->is_native()) { + __ call(RuntimeAddress(bs->load_reference_barrier_native_rt_code_blob()->code_begin())); + } else { __ call(RuntimeAddress(bs->load_reference_barrier_rt_code_blob()->code_begin())); ! } __ jmp(*stub->continuation()); } #undef __
*** 922,949 **** __ pop(rax); __ epilogue(); } ! void ShenandoahBarrierSetAssembler::generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm) { __ prologue("shenandoah_load_reference_barrier", false); // arg0 : object to be resolved __ save_live_registers_no_oop_map(true); #ifdef _LP64 __ load_parameter(0, c_rarg0); __ load_parameter(1, c_rarg1); ! if (UseCompressedOops) { __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_narrow), c_rarg0, c_rarg1); } else { __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), c_rarg0, c_rarg1); } #else __ load_parameter(0, rax); __ load_parameter(1, rbx); __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), rax, rbx); #endif __ restore_live_registers_except_rax(true); __ epilogue(); --- 925,958 ---- __ pop(rax); __ epilogue(); } ! void ShenandoahBarrierSetAssembler::generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm, bool is_native) { __ prologue("shenandoah_load_reference_barrier", false); // arg0 : object to be resolved __ save_live_registers_no_oop_map(true); #ifdef _LP64 __ load_parameter(0, c_rarg0); __ load_parameter(1, c_rarg1); ! if (is_native) { ! __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_native), c_rarg0, c_rarg1); ! } else if (UseCompressedOops) { __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_narrow), c_rarg0, c_rarg1); } else { __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), c_rarg0, c_rarg1); } #else __ load_parameter(0, rax); __ load_parameter(1, rbx); + if (is_native) { + __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_native), rax, rbx); + } else { __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), rax, rbx); + } #endif __ restore_live_registers_except_rax(true); __ epilogue();
< prev index next >