< prev index next >

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

Print this page
rev 57128 : 8235262: Move c2i_entry_barrier for x86_32 to shared

*** 393,448 **** __ bind(done); __ 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); } } --- 393,402 ----
< prev index next >