< 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,12 +857,15 @@
__ 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,28 +925,34 @@
__ pop(rax);
__ epilogue();
}
-void ShenandoahBarrierSetAssembler::generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm) {
+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 (UseCompressedOops) {
+ 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 >