comparison src/cpu/x86/vm/interp_masm_x86_64.hpp @ 9760:c76b43ed5089

Added infrastructure for recording invoked methods in the profiling information.
author Christian Haeubl <haeubl@ssw.jku.at>
date Fri, 17 May 2013 15:38:22 +0200
parents cd3d6a6b95d9
children 836a62f43af9
comparison
equal deleted inserted replaced
9759:580faa2ee288 9760:c76b43ed5089
30 #include "interpreter/invocationCounter.hpp" 30 #include "interpreter/invocationCounter.hpp"
31 #include "runtime/frame.hpp" 31 #include "runtime/frame.hpp"
32 32
33 // This file specializes the assember with interpreter-specific macros 33 // This file specializes the assember with interpreter-specific macros
34 34
35 typedef ByteSize (*OffsetFunction)(uint);
35 36
36 class InterpreterMacroAssembler: public MacroAssembler { 37 class InterpreterMacroAssembler: public MacroAssembler {
37 #ifndef CC_INTERP 38 #ifndef CC_INTERP
38 protected: 39 protected:
39 // Interpreter specific version of call_VM_base 40 // Interpreter specific version of call_VM_base
211 Label& not_equal_continue); 212 Label& not_equal_continue);
212 213
213 void record_klass_in_profile(Register receiver, Register mdp, 214 void record_klass_in_profile(Register receiver, Register mdp,
214 Register reg2, bool is_virtual_call); 215 Register reg2, bool is_virtual_call);
215 void record_klass_in_profile_helper(Register receiver, Register mdp, 216 void record_klass_in_profile_helper(Register receiver, Register mdp,
216 Register reg2, int start_row, 217 Register reg2, Label& done, bool is_virtual_call);
217 Label& done, bool is_virtual_call); 218 void record_item_in_profile_helper(Register item, Register mdp,
219 Register reg2, int start_row, Label& done, int total_rows,
220 OffsetFunction item_offset_fn, OffsetFunction item_count_offset_fn,
221 int non_profiled_offset);
218 222
219 void update_mdp_by_offset(Register mdp_in, int offset_of_offset); 223 void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
220 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp); 224 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
221 void update_mdp_by_constant(Register mdp_in, int constant); 225 void update_mdp_by_constant(Register mdp_in, int constant);
222 void update_mdp_for_ret(Register return_bci); 226 void update_mdp_for_ret(Register return_bci);
226 void profile_call(Register mdp); 230 void profile_call(Register mdp);
227 void profile_final_call(Register mdp); 231 void profile_final_call(Register mdp);
228 void profile_virtual_call(Register receiver, Register mdp, 232 void profile_virtual_call(Register receiver, Register mdp,
229 Register scratch2, 233 Register scratch2,
230 bool receiver_can_be_null = false); 234 bool receiver_can_be_null = false);
235 void profile_called_method(Register method, Register mdp, Register reg2);
231 void profile_ret(Register return_bci, Register mdp); 236 void profile_ret(Register return_bci, Register mdp);
232 void profile_null_seen(Register mdp); 237 void profile_null_seen(Register mdp);
233 void profile_typecheck(Register mdp, Register klass, Register scratch); 238 void profile_typecheck(Register mdp, Register klass, Register scratch);
234 void profile_typecheck_failed(Register mdp); 239 void profile_typecheck_failed(Register mdp);
235 void profile_switch_default(Register mdp); 240 void profile_switch_default(Register mdp);