174
175 public:
176 void if_cmp(Condition cc, bool ptr_compare);
177
178 // Load values from bytecode stream:
179
180 enum signedOrNot { Signed, Unsigned };
181 enum setCCOrNot { set_CC, dont_set_CC };
182
183 void get_2_byte_integer_at_bcp( int bcp_offset,
184 Register Rtmp,
185 Register Rdst,
186 signedOrNot is_signed,
187 setCCOrNot should_set_CC = dont_set_CC );
188
189 void get_4_byte_integer_at_bcp( int bcp_offset,
190 Register Rtmp,
191 Register Rdst,
192 setCCOrNot should_set_CC = dont_set_CC );
193
194 void get_cache_and_index_at_bcp(Register cache, Register tmp, int bcp_offset);
195 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset);
196
197
198 // common code
199
200 void field_offset_at(int n, Register tmp, Register dest, Register base);
201 int field_offset_at(Register object, address bcp, int offset);
202 void fast_iaaccess(int n, address bcp);
203 void fast_iagetfield(address bcp);
204 void fast_iaputfield(address bcp, bool do_store_check );
205
206 void index_check(Register array, Register index, int index_shift, Register tmp, Register res);
207 void index_check_without_pop(Register array, Register index, int index_shift, Register tmp, Register res);
208
209 void get_constant_pool(Register Rdst);
210 void get_constant_pool_cache(Register Rdst);
211 void get_cpool_and_tags(Register Rcpool, Register Rtags);
212 void is_a(Label& L);
213
214 // Load compiled (i2c) or interpreter entry and call from interpreted
215 void call_from_interpreter(Register target, Register scratch, Register Rret);
287 Register bumped_count, Register scratch2,
288 bool decrement = false);
289 void set_mdp_flag_at(int flag_constant, Register scratch);
290 void test_mdp_data_at(int offset, Register value, Label& not_equal_continue,
291 Register scratch);
292
293 void record_klass_in_profile(Register receiver, Register scratch, bool is_virtual_call);
294 void record_klass_in_profile_helper(Register receiver, Register scratch,
295 int start_row, Label& done, bool is_virtual_call);
296
297 void update_mdp_by_offset(int offset_of_disp, Register scratch);
298 void update_mdp_by_offset(Register reg, int offset_of_disp,
299 Register scratch);
300 void update_mdp_by_constant(int constant);
301 void update_mdp_for_ret(TosState state, Register return_bci);
302
303 void profile_taken_branch(Register scratch, Register bumped_count);
304 void profile_not_taken_branch(Register scratch);
305 void profile_call(Register scratch);
306 void profile_final_call(Register scratch);
307 void profile_virtual_call(Register receiver, Register scratch);
308 void profile_ret(TosState state, Register return_bci, Register scratch);
309 void profile_null_seen(Register scratch);
310 void profile_typecheck(Register klass, Register scratch);
311 void profile_typecheck_failed(Register scratch);
312 void profile_switch_default(Register scratch);
313 void profile_switch_case(Register index,
314 Register scratch1,
315 Register scratch2,
316 Register scratch3);
317
318 // Debugging
319 void interp_verify_oop(Register reg, TosState state, const char * file, int line); // only if +VerifyOops && state == atos
320 void verify_oop_or_return_address(Register reg, Register rtmp); // for astore
321 void verify_FPU(int stack_depth, TosState state = ftos); // only if +VerifyFPU && (state == ftos || state == dtos)
322
323 #endif /* CC_INTERP */
324 // support for JVMTI/Dtrace
325 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
326 void notify_method_entry();
327 void notify_method_exit(
|
174
175 public:
176 void if_cmp(Condition cc, bool ptr_compare);
177
178 // Load values from bytecode stream:
179
180 enum signedOrNot { Signed, Unsigned };
181 enum setCCOrNot { set_CC, dont_set_CC };
182
183 void get_2_byte_integer_at_bcp( int bcp_offset,
184 Register Rtmp,
185 Register Rdst,
186 signedOrNot is_signed,
187 setCCOrNot should_set_CC = dont_set_CC );
188
189 void get_4_byte_integer_at_bcp( int bcp_offset,
190 Register Rtmp,
191 Register Rdst,
192 setCCOrNot should_set_CC = dont_set_CC );
193
194 void get_cache_and_index_at_bcp(Register cache, Register tmp, int bcp_offset, bool giant_index = false);
195 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, bool giant_index = false);
196 void get_cache_index_at_bcp(Register cache, Register tmp, int bcp_offset, bool giant_index = false);
197
198
199 // common code
200
201 void field_offset_at(int n, Register tmp, Register dest, Register base);
202 int field_offset_at(Register object, address bcp, int offset);
203 void fast_iaaccess(int n, address bcp);
204 void fast_iagetfield(address bcp);
205 void fast_iaputfield(address bcp, bool do_store_check );
206
207 void index_check(Register array, Register index, int index_shift, Register tmp, Register res);
208 void index_check_without_pop(Register array, Register index, int index_shift, Register tmp, Register res);
209
210 void get_constant_pool(Register Rdst);
211 void get_constant_pool_cache(Register Rdst);
212 void get_cpool_and_tags(Register Rcpool, Register Rtags);
213 void is_a(Label& L);
214
215 // Load compiled (i2c) or interpreter entry and call from interpreted
216 void call_from_interpreter(Register target, Register scratch, Register Rret);
288 Register bumped_count, Register scratch2,
289 bool decrement = false);
290 void set_mdp_flag_at(int flag_constant, Register scratch);
291 void test_mdp_data_at(int offset, Register value, Label& not_equal_continue,
292 Register scratch);
293
294 void record_klass_in_profile(Register receiver, Register scratch, bool is_virtual_call);
295 void record_klass_in_profile_helper(Register receiver, Register scratch,
296 int start_row, Label& done, bool is_virtual_call);
297
298 void update_mdp_by_offset(int offset_of_disp, Register scratch);
299 void update_mdp_by_offset(Register reg, int offset_of_disp,
300 Register scratch);
301 void update_mdp_by_constant(int constant);
302 void update_mdp_for_ret(TosState state, Register return_bci);
303
304 void profile_taken_branch(Register scratch, Register bumped_count);
305 void profile_not_taken_branch(Register scratch);
306 void profile_call(Register scratch);
307 void profile_final_call(Register scratch);
308 void profile_virtual_call(Register receiver, Register scratch, bool receiver_can_be_null = false);
309 void profile_ret(TosState state, Register return_bci, Register scratch);
310 void profile_null_seen(Register scratch);
311 void profile_typecheck(Register klass, Register scratch);
312 void profile_typecheck_failed(Register scratch);
313 void profile_switch_default(Register scratch);
314 void profile_switch_case(Register index,
315 Register scratch1,
316 Register scratch2,
317 Register scratch3);
318
319 // Debugging
320 void interp_verify_oop(Register reg, TosState state, const char * file, int line); // only if +VerifyOops && state == atos
321 void verify_oop_or_return_address(Register reg, Register rtmp); // for astore
322 void verify_FPU(int stack_depth, TosState state = ftos); // only if +VerifyFPU && (state == ftos || state == dtos)
323
324 #endif /* CC_INTERP */
325 // support for JVMTI/Dtrace
326 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
327 void notify_method_entry();
328 void notify_method_exit(
|