comparison src/cpu/x86/vm/interp_masm_x86_32.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 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_32_HPP
26 #define CPU_X86_VM_INTERP_MASM_X86_32_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( 28 virtual void call_VM_leaf_base(
41 address entry_point, 29 address entry_point,
57 // base routine for all dispatches 45 // base routine for all dispatches
58 void dispatch_base(TosState state, address* table, bool verifyoop = true); 46 void dispatch_base(TosState state, address* table, bool verifyoop = true);
59 #endif /* CC_INTERP */ 47 #endif /* CC_INTERP */
60 48
61 public: 49 public:
62 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code) {} 50 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), _locals_register(rdi), _bcp_register(rsi) {}
63 51
64 void load_earlyret_value(TosState state); 52 void load_earlyret_value(TosState state);
65 53
66 // Interpreter-specific registers 54 // Interpreter-specific registers
67 #ifdef CC_INTERP 55 #ifdef CC_INTERP
213 void update_mdp_by_constant(Register mdp_in, int constant); 201 void update_mdp_by_constant(Register mdp_in, int constant);
214 void update_mdp_for_ret(Register return_bci); 202 void update_mdp_for_ret(Register return_bci);
215 203
216 void profile_taken_branch(Register mdp, Register bumped_count); 204 void profile_taken_branch(Register mdp, Register bumped_count);
217 void profile_not_taken_branch(Register mdp); 205 void profile_not_taken_branch(Register mdp);
218 void profile_obj_type(Register obj, const Address& mdo_addr);
219 void profile_arguments_type(Register mdp, Register callee, Register tmp, bool is_virtual);
220 void profile_return_type(Register mdp, Register ret, Register tmp);
221 void profile_call(Register mdp); 206 void profile_call(Register mdp);
222 void profile_final_call(Register mdp); 207 void profile_final_call(Register mdp);
223 void profile_virtual_call(Register receiver, Register mdp, Register scratch2, 208 void profile_virtual_call(Register receiver, Register mdp, Register scratch2,
224 bool receiver_can_be_null = false); 209 bool receiver_can_be_null = false);
225 void profile_ret(Register return_bci, Register mdp); 210 void profile_ret(Register return_bci, Register mdp);
234 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode; 219 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
235 220
236 // support for jvmti 221 // support for jvmti
237 void notify_method_entry(); 222 void notify_method_entry();
238 void notify_method_exit(TosState state, NotifyMethodExitMode mode); 223 void notify_method_exit(TosState state, NotifyMethodExitMode mode);
239
240 };
241
242 #endif // CPU_X86_VM_INTERP_MASM_X86_32_HPP