< prev index next >

src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp

Print this page

        

*** 1634,1644 **** tbnz(obj, exact_log2(TypeEntries::type_unknown), next); // already unknown. Nothing to do anymore. ldr(rscratch1, mdo_addr); cbz(rscratch1, none); ! cmp(rscratch1, TypeEntries::null_seen); br(Assembler::EQ, none); // There is a chance that the checks above (re-reading profiling // data from memory) fail if another thread has just set the // profiling to this obj's klass ldr(rscratch1, mdo_addr); --- 1634,1644 ---- tbnz(obj, exact_log2(TypeEntries::type_unknown), next); // already unknown. Nothing to do anymore. ldr(rscratch1, mdo_addr); cbz(rscratch1, none); ! cmp(rscratch1, (u1)TypeEntries::null_seen); br(Assembler::EQ, none); // There is a chance that the checks above (re-reading profiling // data from memory) fail if another thread has just set the // profiling to this obj's klass ldr(rscratch1, mdo_addr);
*** 1668,1678 **** test_method_data_pointer(mdp, profile_continue); int off_to_start = is_virtual ? in_bytes(VirtualCallData::virtual_call_data_size()) : in_bytes(CounterData::counter_data_size()); ldrb(rscratch1, Address(mdp, in_bytes(DataLayout::tag_offset()) - off_to_start)); ! cmp(rscratch1, is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag); br(Assembler::NE, profile_continue); if (MethodData::profile_arguments()) { Label done; int off_to_args = in_bytes(TypeEntriesAtCall::args_data_offset()); --- 1668,1678 ---- test_method_data_pointer(mdp, profile_continue); int off_to_start = is_virtual ? in_bytes(VirtualCallData::virtual_call_data_size()) : in_bytes(CounterData::counter_data_size()); ldrb(rscratch1, Address(mdp, in_bytes(DataLayout::tag_offset()) - off_to_start)); ! cmp(rscratch1, u1(is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag)); br(Assembler::NE, profile_continue); if (MethodData::profile_arguments()) { Label done; int off_to_args = in_bytes(TypeEntriesAtCall::args_data_offset());
*** 1680,1690 **** for (int i = 0; i < TypeProfileArgsLimit; i++) { if (i > 0 || MethodData::profile_return()) { // If return value type is profiled we may have no argument to profile ldr(tmp, Address(mdp, in_bytes(TypeEntriesAtCall::cell_count_offset()))); sub(tmp, tmp, i*TypeStackSlotEntries::per_arg_count()); ! cmp(tmp, TypeStackSlotEntries::per_arg_count()); add(rscratch1, mdp, off_to_args); br(Assembler::LT, done); } ldr(tmp, Address(callee, Method::const_offset())); load_unsigned_short(tmp, Address(tmp, ConstMethod::size_of_parameters_offset())); --- 1680,1690 ---- for (int i = 0; i < TypeProfileArgsLimit; i++) { if (i > 0 || MethodData::profile_return()) { // If return value type is profiled we may have no argument to profile ldr(tmp, Address(mdp, in_bytes(TypeEntriesAtCall::cell_count_offset()))); sub(tmp, tmp, i*TypeStackSlotEntries::per_arg_count()); ! cmp(tmp, (u1)TypeStackSlotEntries::per_arg_count()); add(rscratch1, mdp, off_to_args); br(Assembler::LT, done); } ldr(tmp, Address(callee, Method::const_offset())); load_unsigned_short(tmp, Address(tmp, ConstMethod::size_of_parameters_offset()));
*** 1750,1766 **** // begining of the ProfileData we intend to update to check its // type because we're right after it and we don't known its // length Label do_profile; ldrb(rscratch1, Address(rbcp, 0)); ! cmp(rscratch1, Bytecodes::_invokedynamic); br(Assembler::EQ, do_profile); ! cmp(rscratch1, Bytecodes::_invokehandle); br(Assembler::EQ, do_profile); get_method(tmp); ldrh(rscratch1, Address(tmp, Method::intrinsic_id_offset_in_bytes())); ! cmp(rscratch1, vmIntrinsics::_compiledLambdaForm); br(Assembler::NE, profile_continue); bind(do_profile); } --- 1750,1766 ---- // begining of the ProfileData we intend to update to check its // type because we're right after it and we don't known its // length Label do_profile; ldrb(rscratch1, Address(rbcp, 0)); ! cmp(rscratch1, (u1)Bytecodes::_invokedynamic); br(Assembler::EQ, do_profile); ! cmp(rscratch1, (u1)Bytecodes::_invokehandle); br(Assembler::EQ, do_profile); get_method(tmp); ldrh(rscratch1, Address(tmp, Method::intrinsic_id_offset_in_bytes())); ! subs(zr, rscratch1, vmIntrinsics::_compiledLambdaForm); br(Assembler::NE, profile_continue); bind(do_profile); }
< prev index next >