Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/interp_masm_x86_64.hpp @ 12962:5ccbab1c69f3
8026251: New type profiling points: parameters to methods
Summary: x86 interpreter and c1 type profiling for parameters on method entries
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Tue, 22 Oct 2013 09:51:47 +0200 |
parents | ce0cc25bc5e2 |
children | 096c224171c4 d3f14809b051 |
comparison
equal
deleted
inserted
replaced
12961:4748b3308cda | 12962:5ccbab1c69f3 |
---|---|
20 * or visit www.oracle.com if you need additional information or have any | 20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. | 21 * questions. |
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 #ifndef CPU_X86_VM_INTERP_MASM_X86_64_HPP | |
26 #define CPU_X86_VM_INTERP_MASM_X86_64_HPP | |
27 | |
28 #include "asm/macroAssembler.hpp" | |
29 #include "asm/macroAssembler.inline.hpp" | |
30 #include "interpreter/invocationCounter.hpp" | |
31 #include "runtime/frame.hpp" | |
32 | |
33 // This file specializes the assember with interpreter-specific macros | |
34 | |
35 | |
36 class InterpreterMacroAssembler: public MacroAssembler { | |
37 #ifndef CC_INTERP | 25 #ifndef CC_INTERP |
38 protected: | 26 protected: |
39 // Interpreter specific version of call_VM_base | 27 // Interpreter specific version of call_VM_base |
40 virtual void call_VM_leaf_base(address entry_point, | 28 virtual void call_VM_leaf_base(address entry_point, |
41 int number_of_arguments); | 29 int number_of_arguments); |
53 // base routine for all dispatches | 41 // base routine for all dispatches |
54 void dispatch_base(TosState state, address* table, bool verifyoop = true); | 42 void dispatch_base(TosState state, address* table, bool verifyoop = true); |
55 #endif // CC_INTERP | 43 #endif // CC_INTERP |
56 | 44 |
57 public: | 45 public: |
58 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code) {} | 46 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), _locals_register(r14), _bcp_register(r13) {} |
59 | 47 |
60 void load_earlyret_value(TosState state); | 48 void load_earlyret_value(TosState state); |
61 | 49 |
62 #ifdef CC_INTERP | 50 #ifdef CC_INTERP |
63 void save_bcp() { /* not needed in c++ interpreter and harmless */ } | 51 void save_bcp() { /* not needed in c++ interpreter and harmless */ } |
222 void update_mdp_by_constant(Register mdp_in, int constant); | 210 void update_mdp_by_constant(Register mdp_in, int constant); |
223 void update_mdp_for_ret(Register return_bci); | 211 void update_mdp_for_ret(Register return_bci); |
224 | 212 |
225 void profile_taken_branch(Register mdp, Register bumped_count); | 213 void profile_taken_branch(Register mdp, Register bumped_count); |
226 void profile_not_taken_branch(Register mdp); | 214 void profile_not_taken_branch(Register mdp); |
227 void profile_obj_type(Register obj, const Address& mdo_addr); | |
228 void profile_arguments_type(Register mdp, Register callee, Register tmp, bool is_virtual); | |
229 void profile_return_type(Register mdp, Register ret, Register tmp); | |
230 void profile_call(Register mdp); | 215 void profile_call(Register mdp); |
231 void profile_final_call(Register mdp); | 216 void profile_final_call(Register mdp); |
232 void profile_virtual_call(Register receiver, Register mdp, | 217 void profile_virtual_call(Register receiver, Register mdp, |
233 Register scratch2, | 218 Register scratch2, |
234 bool receiver_can_be_null = false); | 219 bool receiver_can_be_null = false); |
251 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode; | 236 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode; |
252 | 237 |
253 // support for jvmti/dtrace | 238 // support for jvmti/dtrace |
254 void notify_method_entry(); | 239 void notify_method_entry(); |
255 void notify_method_exit(TosState state, NotifyMethodExitMode mode); | 240 void notify_method_exit(TosState state, NotifyMethodExitMode mode); |
256 }; | |
257 | |
258 #endif // CPU_X86_VM_INTERP_MASM_X86_64_HPP |