1764 bind(profile_continue); |
1765 bind(profile_continue); |
1765 } |
1766 } |
1766 } |
1767 } |
1767 |
1768 |
1768 void InterpreterMacroAssembler::profile_parameters_type(Register mdp, Register tmp1, Register tmp2) { |
1769 void InterpreterMacroAssembler::profile_parameters_type(Register mdp, Register tmp1, Register tmp2) { |
|
1770 assert_different_registers(rscratch1, rscratch2, mdp, tmp1, tmp2); |
1769 if (ProfileInterpreter && MethodData::profile_parameters()) { |
1771 if (ProfileInterpreter && MethodData::profile_parameters()) { |
1770 Label profile_continue, done; |
1772 Label profile_continue, done; |
1771 |
1773 |
1772 test_method_data_pointer(mdp, profile_continue); |
1774 test_method_data_pointer(mdp, profile_continue); |
1773 |
1775 |
1774 // Load the offset of the area within the MDO used for |
1776 // Load the offset of the area within the MDO used for |
1775 // parameters. If it's negative we're not profiling any parameters |
1777 // parameters. If it's negative we're not profiling any parameters |
1776 ldr(tmp1, Address(mdp, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset()))); |
1778 ldrw(tmp1, Address(mdp, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset()))); |
1777 tbnz(tmp1, 63, profile_continue); // i.e. sign bit set |
1779 tbnz(tmp1, 31, profile_continue); // i.e. sign bit set |
1778 |
1780 |
1779 // Compute a pointer to the area for parameters from the offset |
1781 // Compute a pointer to the area for parameters from the offset |
1780 // and move the pointer to the slot for the last |
1782 // and move the pointer to the slot for the last |
1781 // parameters. Collect profiling from last parameter down. |
1783 // parameters. Collect profiling from last parameter down. |
1782 // mdo start + parameters offset + array length - 1 |
1784 // mdo start + parameters offset + array length - 1 |