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