< prev index next >

src/hotspot/cpu/sparc/sharedRuntime_sparc.cpp

Print this page

        

*** 1749,1760 **** nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, const methodHandle& method, int compile_id, BasicType* in_sig_bt, VMRegPair* in_regs, ! BasicType ret_type, ! address critical_entry) { if (method->is_method_handle_intrinsic()) { vmIntrinsics::ID iid = method->intrinsic_id(); intptr_t start = (intptr_t)__ pc(); int vep_offset = ((intptr_t)__ pc()) - start; gen_special_dispatch(masm, --- 1749,1759 ---- nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, const methodHandle& method, int compile_id, BasicType* in_sig_bt, VMRegPair* in_regs, ! BasicType ret_type) { if (method->is_method_handle_intrinsic()) { vmIntrinsics::ID iid = method->intrinsic_id(); intptr_t start = (intptr_t)__ pc(); int vep_offset = ((intptr_t)__ pc()) - start; gen_special_dispatch(masm,
*** 1773,1783 **** in_ByteSize(-1), in_ByteSize(-1), (OopMapSet*)NULL); } bool is_critical_native = true; ! address native_func = critical_entry; if (native_func == NULL) { native_func = method->native_function(); is_critical_native = false; } assert(native_func != NULL, "must have function"); --- 1772,1782 ---- in_ByteSize(-1), in_ByteSize(-1), (OopMapSet*)NULL); } bool is_critical_native = true; ! address native_func = method->critical_native_function(); if (native_func == NULL) { native_func = method->native_function(); is_critical_native = false; } assert(native_func != NULL, "must have function");
*** 1831,1855 **** } // Read the header and build a mask to get its hash field. Give up if the object is not unlocked. // We depend on hash_mask being at most 32 bits and avoid the use of // hash_mask_in_place because it could be larger than 32 bits in a 64-bit ! // vm: see markWord.hpp. __ ld_ptr(obj_reg, oopDesc::mark_offset_in_bytes(), header); ! __ sethi(markWord::hash_mask, mask); ! __ btst(markWord::unlocked_value, header); __ br(Assembler::zero, false, Assembler::pn, slowCase); if (UseBiasedLocking) { // Check if biased and fall through to runtime if so __ delayed()->nop(); ! __ btst(markWord::biased_lock_bit_in_place, header); __ br(Assembler::notZero, false, Assembler::pn, slowCase); } ! __ delayed()->or3(mask, markWord::hash_mask & 0x3ff, mask); // Check for a valid (non-zero) hash code and get its value. ! __ srlx(header, markWord::hash_shift, hash); __ andcc(hash, mask, hash); __ br(Assembler::equal, false, Assembler::pn, slowCase); __ delayed()->nop(); // leaf return. --- 1830,1854 ---- } // Read the header and build a mask to get its hash field. Give up if the object is not unlocked. // We depend on hash_mask being at most 32 bits and avoid the use of // hash_mask_in_place because it could be larger than 32 bits in a 64-bit ! // vm: see markOop.hpp. __ ld_ptr(obj_reg, oopDesc::mark_offset_in_bytes(), header); ! __ sethi(markOopDesc::hash_mask, mask); ! __ btst(markOopDesc::unlocked_value, header); __ br(Assembler::zero, false, Assembler::pn, slowCase); if (UseBiasedLocking) { // Check if biased and fall through to runtime if so __ delayed()->nop(); ! __ btst(markOopDesc::biased_lock_bit_in_place, header); __ br(Assembler::notZero, false, Assembler::pn, slowCase); } ! __ delayed()->or3(mask, markOopDesc::hash_mask & 0x3ff, mask); // Check for a valid (non-zero) hash code and get its value. ! __ srlx(header, markOopDesc::hash_shift, hash); __ andcc(hash, mask, hash); __ br(Assembler::equal, false, Assembler::pn, slowCase); __ delayed()->nop(); // leaf return.
< prev index next >