8233500: Shenandoah: Shenandoah load barrier should save registers before calling keep alive barrier on x86

Reviewed-by: rkennke
This commit is contained in:
Zhengyu Gu 2019-11-26 14:33:56 -05:00
parent 2a36577e68
commit 598ec40995

View File

@ -511,6 +511,7 @@ void ShenandoahBarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet d
// 3: apply keep-alive barrier if needed // 3: apply keep-alive barrier if needed
if (ShenandoahBarrierSet::need_keep_alive_barrier(decorators, type)) { if (ShenandoahBarrierSet::need_keep_alive_barrier(decorators, type)) {
__ push_IU_state();
const Register thread = NOT_LP64(tmp_thread) LP64_ONLY(r15_thread); const Register thread = NOT_LP64(tmp_thread) LP64_ONLY(r15_thread);
assert_different_registers(dst, tmp1, tmp_thread); assert_different_registers(dst, tmp1, tmp_thread);
NOT_LP64(__ get_thread(thread)); NOT_LP64(__ get_thread(thread));
@ -523,6 +524,7 @@ void ShenandoahBarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet d
tmp1 /* tmp */, tmp1 /* tmp */,
true /* tosca_live */, true /* tosca_live */,
true /* expand_call */); true /* expand_call */);
__ pop_IU_state();
} }
} }