31 #include "interpreter/invocationCounter.hpp" |
31 #include "interpreter/invocationCounter.hpp" |
32 #include "runtime/frame.hpp" |
32 #include "runtime/frame.hpp" |
33 |
33 |
34 // This file specializes the assember with interpreter-specific macros |
34 // This file specializes the assember with interpreter-specific macros |
35 |
35 |
|
36 typedef ByteSize (*OffsetFunction)(uint); |
36 |
37 |
37 class InterpreterMacroAssembler: public MacroAssembler { |
38 class InterpreterMacroAssembler: public MacroAssembler { |
38 protected: |
39 protected: |
39 |
40 |
40 protected: |
41 protected: |
232 void record_klass_in_profile(Register receiver, Register mdp, |
233 void record_klass_in_profile(Register receiver, Register mdp, |
233 Register reg2, bool is_virtual_call); |
234 Register reg2, bool is_virtual_call); |
234 void record_klass_in_profile_helper(Register receiver, Register mdp, |
235 void record_klass_in_profile_helper(Register receiver, Register mdp, |
235 Register reg2, int start_row, |
236 Register reg2, int start_row, |
236 Label& done, bool is_virtual_call); |
237 Label& done, bool is_virtual_call); |
|
238 void record_item_in_profile_helper(Register item, Register mdp, |
|
239 Register reg2, int start_row, Label& done, int total_rows, |
|
240 OffsetFunction item_offset_fn, OffsetFunction item_count_offset_fn, |
|
241 int non_profiled_offset); |
237 |
242 |
238 void update_mdp_by_offset(Register mdp_in, int offset_of_offset); |
243 void update_mdp_by_offset(Register mdp_in, int offset_of_offset); |
239 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp); |
244 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp); |
240 void update_mdp_by_constant(Register mdp_in, int constant); |
245 void update_mdp_by_constant(Register mdp_in, int constant); |
241 void update_mdp_for_ret(Register return_bci); |
246 void update_mdp_for_ret(Register return_bci); |
245 void profile_call(Register mdp); |
250 void profile_call(Register mdp); |
246 void profile_final_call(Register mdp); |
251 void profile_final_call(Register mdp); |
247 void profile_virtual_call(Register receiver, Register mdp, |
252 void profile_virtual_call(Register receiver, Register mdp, |
248 Register scratch2, |
253 Register scratch2, |
249 bool receiver_can_be_null = false); |
254 bool receiver_can_be_null = false); |
|
255 void profile_called_method(Register method, Register mdp, Register reg2) NOT_JVMCI_RETURN; |
250 void profile_ret(Register return_bci, Register mdp); |
256 void profile_ret(Register return_bci, Register mdp); |
251 void profile_null_seen(Register mdp); |
257 void profile_null_seen(Register mdp); |
252 void profile_typecheck(Register mdp, Register klass, Register scratch); |
258 void profile_typecheck(Register mdp, Register klass, Register scratch); |
253 void profile_typecheck_failed(Register mdp); |
259 void profile_typecheck_failed(Register mdp); |
254 void profile_switch_default(Register mdp); |
260 void profile_switch_default(Register mdp); |