src/cpu/x86/vm/interp_masm_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8004128_2 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/interp_masm_x86.cpp

Print this page




 117         addptr(mdp, to_add);
 118         off_to_args += to_add;
 119       }
 120 
 121       if (MethodData::profile_return()) {
 122         movptr(tmp, Address(mdp, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args));
 123         subl(tmp, TypeProfileArgsLimit*TypeStackSlotEntries::per_arg_count());
 124       }
 125 
 126       bind(done);
 127 
 128       if (MethodData::profile_return()) {
 129         // We're right after the type profile for the last
 130         // argument. tmp is the number of cells left in the
 131         // CallTypeData/VirtualCallTypeData to reach its end. Non null
 132         // if there's a return to profile.
 133         assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type");
 134         shll(tmp, exact_log2(DataLayout::cell_size));
 135         addptr(mdp, tmp);
 136       }
 137       movptr(Address(rbp, frame::interpreter_frame_mdx_offset * wordSize), mdp);
 138     } else {
 139       assert(MethodData::profile_return(), "either profile call args or call ret");
 140       update_mdp_by_constant(mdp, in_bytes(TypeEntriesAtCall::return_only_size()));
 141     }
 142 
 143     // mdp points right after the end of the
 144     // CallTypeData/VirtualCallTypeData, right after the cells for the
 145     // return value type if there's one
 146 
 147     bind(profile_continue);
 148   }
 149 }
 150 
 151 void InterpreterMacroAssembler::profile_return_type(Register mdp, Register ret, Register tmp) {
 152   assert_different_registers(mdp, ret, tmp, _bcp_register);
 153   if (ProfileInterpreter && MethodData::profile_return()) {
 154     Label profile_continue, done;
 155 
 156     test_method_data_pointer(mdp, profile_continue);
 157 




 117         addptr(mdp, to_add);
 118         off_to_args += to_add;
 119       }
 120 
 121       if (MethodData::profile_return()) {
 122         movptr(tmp, Address(mdp, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args));
 123         subl(tmp, TypeProfileArgsLimit*TypeStackSlotEntries::per_arg_count());
 124       }
 125 
 126       bind(done);
 127 
 128       if (MethodData::profile_return()) {
 129         // We're right after the type profile for the last
 130         // argument. tmp is the number of cells left in the
 131         // CallTypeData/VirtualCallTypeData to reach its end. Non null
 132         // if there's a return to profile.
 133         assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type");
 134         shll(tmp, exact_log2(DataLayout::cell_size));
 135         addptr(mdp, tmp);
 136       }
 137       movptr(Address(rbp, frame::interpreter_frame_mdp_offset * wordSize), mdp);
 138     } else {
 139       assert(MethodData::profile_return(), "either profile call args or call ret");
 140       update_mdp_by_constant(mdp, in_bytes(TypeEntriesAtCall::return_only_size()));
 141     }
 142 
 143     // mdp points right after the end of the
 144     // CallTypeData/VirtualCallTypeData, right after the cells for the
 145     // return value type if there's one
 146 
 147     bind(profile_continue);
 148   }
 149 }
 150 
 151 void InterpreterMacroAssembler::profile_return_type(Register mdp, Register ret, Register tmp) {
 152   assert_different_registers(mdp, ret, tmp, _bcp_register);
 153   if (ProfileInterpreter && MethodData::profile_return()) {
 154     Label profile_continue, done;
 155 
 156     test_method_data_pointer(mdp, profile_continue);
 157 


src/cpu/x86/vm/interp_masm_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File