OpenJDK / jdk / jdk
changeset 57278:fb39a8d1d101
8235262: Move c2i_entry_barrier for x86_32 to shared
Reviewed-by: rkennke, eosterlund
author | zgu |
---|---|
date | Sun, 08 Dec 2019 10:05:57 -0500 |
parents | 31882abe1494 |
children | 046f9512418b |
files | src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp |
diffstat | 3 files changed, 27 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp Sat Dec 07 09:40:28 2019 +0800 +++ b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp Sun Dec 08 10:05:57 2019 -0500 @@ -374,22 +374,41 @@ __ cmpptr(rbx, 0); // rbx contains the incoming method for c2i adapters. __ jcc(Assembler::equal, bad_call); +#ifdef _LP64 + Register tmp1 = rscratch1; + Register tmp2 = rscratch2; +#else + Register tmp1 = rax; + Register tmp2 = rcx; + __ push(tmp1); + __ push(tmp2); +#endif // _LP64 + // Pointer chase to the method holder to find out if the method is concurrently unloading. Label method_live; - __ load_method_holder_cld(rscratch1, rbx); + __ load_method_holder_cld(tmp1, rbx); - // Is it a strong CLD? - __ movl(rscratch2, Address(rscratch1, ClassLoaderData::keep_alive_offset())); - __ cmpptr(rscratch2, 0); + // Is it a strong CLD? + __ cmpl(Address(tmp1, ClassLoaderData::keep_alive_offset()), 0); __ jcc(Assembler::greater, method_live); - // Is it a weak but alive CLD? - __ movptr(rscratch1, Address(rscratch1, ClassLoaderData::holder_offset())); - __ resolve_weak_handle(rscratch1, rscratch2); - __ cmpptr(rscratch1, 0); + // Is it a weak but alive CLD? + __ movptr(tmp1, Address(tmp1, ClassLoaderData::holder_offset())); + __ resolve_weak_handle(tmp1, tmp2); + __ cmpptr(tmp1, 0); __ jcc(Assembler::notEqual, method_live); +#ifndef _LP64 + __ pop(tmp2); + __ pop(tmp1); +#endif + __ bind(bad_call); __ jump(RuntimeAddress(SharedRuntime::get_handle_wrong_method_stub())); __ bind(method_live); + +#ifndef _LP64 + __ pop(tmp2); + __ pop(tmp1); +#endif }
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Sat Dec 07 09:40:28 2019 +0800 +++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Sun Dec 08 10:05:57 2019 -0500 @@ -395,52 +395,6 @@ __ block_comment("load_reference_barrier_native { "); } -#ifdef _LP64 -void ShenandoahBarrierSetAssembler::c2i_entry_barrier(MacroAssembler* masm) { - // Use default version - BarrierSetAssembler::c2i_entry_barrier(masm); -} -#else -void ShenandoahBarrierSetAssembler::c2i_entry_barrier(MacroAssembler* masm) { - BarrierSetNMethod* bs = BarrierSet::barrier_set()->barrier_set_nmethod(); - if (bs == NULL) { - return; - } - - Label bad_call; - __ cmpptr(rbx, 0); // rbx contains the incoming method for c2i adapters. - __ jcc(Assembler::equal, bad_call); - - Register tmp1 = rax; - Register tmp2 = rcx; - - __ push(tmp1); - __ push(tmp2); - - // Pointer chase to the method holder to find out if the method is concurrently unloading. - Label method_live; - __ load_method_holder_cld(tmp1, rbx); - - // Is it a strong CLD? - __ cmpl(Address(tmp1, ClassLoaderData::keep_alive_offset()), 0); - __ jcc(Assembler::greater, method_live); - - // Is it a weak but alive CLD? - __ movptr(tmp1, Address(tmp1, ClassLoaderData::holder_offset())); - __ resolve_weak_handle(tmp1, tmp2); - __ cmpptr(tmp1, 0); - __ jcc(Assembler::notEqual, method_live); - __ pop(tmp2); - __ pop(tmp1); - - __ bind(bad_call); - __ jump(RuntimeAddress(SharedRuntime::get_handle_wrong_method_stub())); - __ bind(method_live); - __ pop(tmp2); - __ pop(tmp1); -} -#endif - void ShenandoahBarrierSetAssembler::storeval_barrier(MacroAssembler* masm, Register dst, Register tmp) { if (ShenandoahStoreValEnqueueBarrier) { storeval_barrier_impl(masm, dst, tmp);
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp Sat Dec 07 09:40:28 2019 +0800 +++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.hpp Sun Dec 08 10:05:57 2019 -0500 @@ -86,8 +86,6 @@ Address dst, Register val, Register tmp1, Register tmp2); virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env, Register obj, Register tmp, Label& slowpath); - virtual void c2i_entry_barrier(MacroAssembler* masm); - virtual void barrier_stubs_init(); };