< 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,56 +393,10 @@
__ 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);
}
}
< prev index next >