Skip to content

Instantly share code, notes, and snippets.

@rkennke
Created November 4, 2020 14:13
Show Gist options
  • Select an option

  • Save rkennke/d057f906814a4e022b2bf69ffe996712 to your computer and use it in GitHub Desktop.

Select an option

Save rkennke/d057f906814a4e022b2bf69ffe996712 to your computer and use it in GitHub Desktop.
diff --git a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp
index f19a93ea487..fb1b9ccbf20 100644
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp
@@ -348,27 +348,33 @@ void ShenandoahBarrierSetAssembler::load_reference_barrier(MacroAssembler* masm,
}
save_xmm_registers(masm);
+ address calladdr = NULL;
switch (kind) {
case ShenandoahBarrierSet::AccessKind::NORMAL:
if (UseCompressedOops) {
- __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_narrow), arg0, arg1);
+ calladdr = CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_narrow);
} else {
- __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), arg0, arg1);
+ calladdr = CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier);
}
break;
case ShenandoahBarrierSet::AccessKind::WEAK:
if (UseCompressedOops) {
- __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_weak_narrow), arg0, arg1);
+ calladdr = CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_weak_narrow);
} else {
- __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_weak), arg0, arg1);
+ calladdr = CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_weak);
}
break;
case ShenandoahBarrierSet::AccessKind::NATIVE:
- __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_weak), arg0, arg1);
+ calladdr = CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_weak);
break;
default:
ShouldNotReachHere();
}
+ if (kind == ShenandoahBarrierSet::AccessKind::WEAK) {
+ __ super_call_VM_leaf(calladdr, arg0, arg1);
+ } else {
+ __ call_VM_leaf(calladdr, arg0, arg1);
+ }
restore_xmm_registers(masm);
#ifdef _LP64
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment