59 #ifdef CC_INTERP
60 void save_bcp() { /* not needed in c++ interpreter and harmless */ }
61 void restore_bcp() { /* not needed in c++ interpreter and harmless */ }
62
63 // Helpers for runtime call arguments/results
64 void get_method(Register reg);
65
66 #else
67
68 void save_bcp() { movptr(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), rsi); }
69 void restore_bcp() { movptr(rsi, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); }
70 void restore_locals() { movptr(rdi, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); }
71
72 // Helpers for runtime call arguments/results
73 void get_method(Register reg) { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); }
74 void get_constant_pool(Register reg) { get_method(reg); movptr(reg, Address(reg, methodOopDesc::constants_offset())); }
75 void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); }
76 void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes()));
77 }
78 void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
79 void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset);
80 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset);
81
82 // Expression stack
83 void f2ieee(); // truncate ftos to 32bits
84 void d2ieee(); // truncate dtos to 64bits
85
86 void pop_ptr(Register r = rax);
87 void pop_ptr(Register r, Register tag);
88 void pop_i(Register r = rax);
89 void pop_l(Register lo = rax, Register hi = rdx);
90 void pop_f();
91 void pop_d();
92 void pop_ftos_to_rsp();
93 void pop_dtos_to_rsp();
94
95 void push_ptr(Register r = rax);
96 void push_ptr(Register r, Register tag);
97 void push_i(Register r = rax);
98 void push_l(Register lo = rax, Register hi = rdx);
99 void push_d(Register r = rax);
100 void push_f();
209 void set_mdp_flag_at(Register mdp_in, int flag_constant);
210 void test_mdp_data_at(Register mdp_in, int offset, Register value,
211 Register test_value_out,
212 Label& not_equal_continue);
213
214 void record_klass_in_profile(Register receiver, Register mdp,
215 Register reg2);
216 void record_klass_in_profile_helper(Register receiver, Register mdp,
217 Register reg2,
218 int start_row, Label& done);
219
220 void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
221 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
222 void update_mdp_by_constant(Register mdp_in, int constant);
223 void update_mdp_for_ret(Register return_bci);
224
225 void profile_taken_branch(Register mdp, Register bumped_count);
226 void profile_not_taken_branch(Register mdp);
227 void profile_call(Register mdp);
228 void profile_final_call(Register mdp);
229 void profile_virtual_call(Register receiver, Register mdp, Register scratch2);
230 void profile_ret(Register return_bci, Register mdp);
231 void profile_null_seen(Register mdp);
232 void profile_typecheck(Register mdp, Register klass, Register scratch);
233 void profile_typecheck_failed(Register mdp);
234 void profile_switch_default(Register mdp);
235 void profile_switch_case(Register index_in_scratch, Register mdp, Register scratch2);
236
237 #endif /* !CC_INTERP */
238
239 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
240
241 // support for jvmti
242 void notify_method_entry();
243 void notify_method_exit(TosState state, NotifyMethodExitMode mode);
244
245 };
|
59 #ifdef CC_INTERP
60 void save_bcp() { /* not needed in c++ interpreter and harmless */ }
61 void restore_bcp() { /* not needed in c++ interpreter and harmless */ }
62
63 // Helpers for runtime call arguments/results
64 void get_method(Register reg);
65
66 #else
67
68 void save_bcp() { movptr(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), rsi); }
69 void restore_bcp() { movptr(rsi, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); }
70 void restore_locals() { movptr(rdi, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); }
71
72 // Helpers for runtime call arguments/results
73 void get_method(Register reg) { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); }
74 void get_constant_pool(Register reg) { get_method(reg); movptr(reg, Address(reg, methodOopDesc::constants_offset())); }
75 void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); }
76 void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes()));
77 }
78 void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
79 void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset, bool giant_index = false);
80 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, bool giant_index = false);
81 void get_cache_index_at_bcp(Register index, int bcp_offset, bool giant_index = false);
82
83 // Expression stack
84 void f2ieee(); // truncate ftos to 32bits
85 void d2ieee(); // truncate dtos to 64bits
86
87 void pop_ptr(Register r = rax);
88 void pop_ptr(Register r, Register tag);
89 void pop_i(Register r = rax);
90 void pop_l(Register lo = rax, Register hi = rdx);
91 void pop_f();
92 void pop_d();
93 void pop_ftos_to_rsp();
94 void pop_dtos_to_rsp();
95
96 void push_ptr(Register r = rax);
97 void push_ptr(Register r, Register tag);
98 void push_i(Register r = rax);
99 void push_l(Register lo = rax, Register hi = rdx);
100 void push_d(Register r = rax);
101 void push_f();
210 void set_mdp_flag_at(Register mdp_in, int flag_constant);
211 void test_mdp_data_at(Register mdp_in, int offset, Register value,
212 Register test_value_out,
213 Label& not_equal_continue);
214
215 void record_klass_in_profile(Register receiver, Register mdp,
216 Register reg2);
217 void record_klass_in_profile_helper(Register receiver, Register mdp,
218 Register reg2,
219 int start_row, Label& done);
220
221 void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
222 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
223 void update_mdp_by_constant(Register mdp_in, int constant);
224 void update_mdp_for_ret(Register return_bci);
225
226 void profile_taken_branch(Register mdp, Register bumped_count);
227 void profile_not_taken_branch(Register mdp);
228 void profile_call(Register mdp);
229 void profile_final_call(Register mdp);
230 void profile_virtual_call(Register receiver, Register mdp, Register scratch2,
231 bool receiver_can_be_null = false);
232 void profile_ret(Register return_bci, Register mdp);
233 void profile_null_seen(Register mdp);
234 void profile_typecheck(Register mdp, Register klass, Register scratch);
235 void profile_typecheck_failed(Register mdp);
236 void profile_switch_default(Register mdp);
237 void profile_switch_case(Register index_in_scratch, Register mdp, Register scratch2);
238
239 #endif /* !CC_INTERP */
240
241 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
242
243 // support for jvmti
244 void notify_method_entry();
245 void notify_method_exit(TosState state, NotifyMethodExitMode mode);
246
247 };
|