< prev index next >

src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp

Print this page

        

*** 27,36 **** --- 27,38 ---- #include "asm/macroAssembler.inline.hpp" #include "code/debugInfoRec.hpp" #include "code/icBuffer.hpp" #include "code/nativeInst.hpp" #include "code/vtableStubs.hpp" + #include "gc/shared/barrierSet.hpp" + #include "gc/shared/barrierSetAssembler.hpp" #include "gc/shared/gcLocker.hpp" #include "interpreter/interpreter.hpp" #include "logging/log.hpp" #include "memory/resourceArea.hpp" #include "oops/compiledICHolder.hpp"
*** 973,982 **** --- 975,987 ---- __ jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub())); } address c2i_entry = __ pc(); + BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); + bs->c2i_entry_barrier(masm); + gen_c2i_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs, skip_fixup); __ flush(); return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); }
*** 1884,1893 **** --- 1889,1901 ---- // Generate a new frame for the wrapper. __ enter(); // -2 because return address is already present and so is saved rbp __ subptr(rsp, stack_size - 2*wordSize); + BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); + bs->nmethod_entry_barrier(masm); + // Frame is now completed as far as size and linkage. int frame_complete = ((intptr_t)__ pc()) - start; if (UseRTMLocking) { // Abort RTM transaction before calling JNI
*** 1919,1934 **** // We use rdi as a thread pointer because it is callee save and // if we load it once it is usable thru the entire wrapper const Register thread = rdi; ! // We use rsi as the oop handle for the receiver/klass ! // It is callee save so it survives the call to native ! const Register oop_handle_reg = rsi; ! __ get_thread(thread); if (is_critical_native && !Universe::heap()->supports_object_pinning()) { check_needs_gc_for_critical_native(masm, thread, stack_slots, total_c_args, total_in_args, oop_handle_offset, oop_maps, in_regs, in_sig_bt); } --- 1927,1942 ---- // We use rdi as a thread pointer because it is callee save and // if we load it once it is usable thru the entire wrapper const Register thread = rdi; ! // We use rsi as the oop handle for the receiver/klass ! // It is callee save so it survives the call to native ! const Register oop_handle_reg = rsi; ! __ get_thread(thread); if (is_critical_native && !Universe::heap()->supports_object_pinning()) { check_needs_gc_for_critical_native(masm, thread, stack_slots, total_c_args, total_in_args, oop_handle_offset, oop_maps, in_regs, in_sig_bt); }
< prev index next >