< prev index next >

src/hotspot/cpu/ppc/interp_masm_ppc.hpp

Print this page

 68   static const Address d_tmp;
 69 
 70   // dispatch routines
 71   void dispatch_next(TosState state, int step = 0, bool generate_poll = false);
 72   void dispatch_via (TosState state, address* table);
 73   void load_dispatch_table(Register dst, address* table);
 74   void dispatch_Lbyte_code(TosState state, Register bytecode, address* table, bool generate_poll = false);
 75 
 76   // Called by shared interpreter generator.
 77   void dispatch_prolog(TosState state, int step = 0);
 78   void dispatch_epilog(TosState state, int step = 0);
 79 
 80   // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls.
 81   void super_call_VM_leaf(Register thread_cache, address entry_point, Register arg_1);
 82   void super_call_VM(Register thread_cache, Register oop_result, Register last_java_sp,
 83                      address entry_point, Register arg_1, Register arg_2, bool check_exception = true);
 84 
 85   // Generate a subtype check: branch to ok_is_subtype if sub_klass is
 86   // a subtype of super_klass.  Blows registers tmp1, tmp2 and tmp3.
 87   void gen_subtype_check(Register sub_klass, Register super_klass,
 88                          Register tmp1, Register tmp2, Register tmp3, Label &ok_is_subtype);
 89 
 90   // Load object from cpool->resolved_references(index).
 91   void load_resolved_reference_at_index(Register result, Register index, Register tmp1, Register tmp2,
 92                                         Label *L_handle_null = nullptr);
 93 
 94   // load cpool->resolved_klass_at(index)
 95   void load_resolved_klass_at_offset(Register Rcpool, Register Roffset, Register Rklass);
 96 
 97   void load_receiver(Register Rparam_count, Register Rrecv_dst);
 98 
 99   // helpers for expression stack
100   void pop_i(     Register r = R17_tos);
101   void pop_ptr(   Register r = R17_tos);
102   void pop_l(     Register r = R17_tos);
103   void pop_f(FloatRegister f = F15_ftos);
104   void pop_d(FloatRegister f = F15_ftos );
105 
106   void push_i(     Register r = R17_tos);
107   void push_ptr(   Register r = R17_tos);
108   void push_l(     Register r = R17_tos);

238   void test_method_data_pointer(Label& zero_continue);
239   void verify_method_data_pointer();
240 
241   void set_mdp_data_at(int constant, Register value);
242 
243   void increment_mdp_data_at(int constant, Register counter_addr, Register Rbumped_count, bool decrement = false);
244 
245   void increment_mdp_data_at(Register counter_addr, Register Rbumped_count, bool decrement = false);
246   void increment_mdp_data_at(Register reg, int constant, Register scratch, Register Rbumped_count, bool decrement = false);
247 
248   void set_mdp_flag_at(int flag_constant, Register scratch);
249   void test_mdp_data_at(int offset, Register value, Label& not_equal_continue, Register test_out);
250 
251   void update_mdp_by_offset(int offset_of_disp, Register scratch);
252   void update_mdp_by_offset(Register reg, int offset_of_disp,
253                             Register scratch);
254   void update_mdp_by_constant(int constant);
255   void update_mdp_for_ret(TosState state, Register return_bci);
256 
257   void profile_taken_branch(Register scratch, Register bumped_count);
258   void profile_not_taken_branch(Register scratch1, Register scratch2);
259   void profile_call(Register scratch1, Register scratch2);
260   void profile_final_call(Register scratch1, Register scratch2);
261   void profile_virtual_call(Register Rreceiver, Register Rscratch1, Register Rscratch2);
262   void profile_typecheck(Register Rklass, Register Rscratch1, Register Rscratch2);
263   void profile_ret(TosState state, Register return_bci, Register scratch1, Register scratch2);
264   void profile_switch_default(Register scratch1, Register scratch2);
265   void profile_switch_case(Register index, Register scratch1,Register scratch2, Register scratch3);
266   void profile_null_seen(Register Rscratch1, Register Rscratch2);
267 






268   // Argument and return type profiling.
269   void profile_obj_type(Register obj, Register mdo_addr_base, RegisterOrConstant mdo_addr_offs, Register tmp, Register tmp2);
270   void profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual);
271   void profile_return_type(Register ret, Register tmp1, Register tmp2);
272   void profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4);
273 
274   // Debugging
275   void verify_oop(Register reg, TosState state = atos);    // only if +VerifyOops && state == atos
276   void verify_oop_or_return_address(Register reg, Register rtmp); // for astore
277 
278   typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
279 
280   // Support for jvmdi/jvmpi.
281   void notify_method_entry();
282   void notify_method_exit(bool is_native_method, TosState state,
283                           NotifyMethodExitMode mode, bool check_exceptions);







284 };
285 
286 #endif // CPU_PPC_INTERP_MASM_PPC_HPP

 68   static const Address d_tmp;
 69 
 70   // dispatch routines
 71   void dispatch_next(TosState state, int step = 0, bool generate_poll = false);
 72   void dispatch_via (TosState state, address* table);
 73   void load_dispatch_table(Register dst, address* table);
 74   void dispatch_Lbyte_code(TosState state, Register bytecode, address* table, bool generate_poll = false);
 75 
 76   // Called by shared interpreter generator.
 77   void dispatch_prolog(TosState state, int step = 0);
 78   void dispatch_epilog(TosState state, int step = 0);
 79 
 80   // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls.
 81   void super_call_VM_leaf(Register thread_cache, address entry_point, Register arg_1);
 82   void super_call_VM(Register thread_cache, Register oop_result, Register last_java_sp,
 83                      address entry_point, Register arg_1, Register arg_2, bool check_exception = true);
 84 
 85   // Generate a subtype check: branch to ok_is_subtype if sub_klass is
 86   // a subtype of super_klass.  Blows registers tmp1, tmp2 and tmp3.
 87   void gen_subtype_check(Register sub_klass, Register super_klass,
 88                          Register tmp1, Register tmp2, Register tmp3, Label &ok_is_subtype, bool profile = true);
 89 
 90   // Load object from cpool->resolved_references(index).
 91   void load_resolved_reference_at_index(Register result, Register index, Register tmp1, Register tmp2,
 92                                         Label *L_handle_null = nullptr);
 93 
 94   // load cpool->resolved_klass_at(index)
 95   void load_resolved_klass_at_offset(Register Rcpool, Register Roffset, Register Rklass);
 96 
 97   void load_receiver(Register Rparam_count, Register Rrecv_dst);
 98 
 99   // helpers for expression stack
100   void pop_i(     Register r = R17_tos);
101   void pop_ptr(   Register r = R17_tos);
102   void pop_l(     Register r = R17_tos);
103   void pop_f(FloatRegister f = F15_ftos);
104   void pop_d(FloatRegister f = F15_ftos );
105 
106   void push_i(     Register r = R17_tos);
107   void push_ptr(   Register r = R17_tos);
108   void push_l(     Register r = R17_tos);

238   void test_method_data_pointer(Label& zero_continue);
239   void verify_method_data_pointer();
240 
241   void set_mdp_data_at(int constant, Register value);
242 
243   void increment_mdp_data_at(int constant, Register counter_addr, Register Rbumped_count, bool decrement = false);
244 
245   void increment_mdp_data_at(Register counter_addr, Register Rbumped_count, bool decrement = false);
246   void increment_mdp_data_at(Register reg, int constant, Register scratch, Register Rbumped_count, bool decrement = false);
247 
248   void set_mdp_flag_at(int flag_constant, Register scratch);
249   void test_mdp_data_at(int offset, Register value, Label& not_equal_continue, Register test_out);
250 
251   void update_mdp_by_offset(int offset_of_disp, Register scratch);
252   void update_mdp_by_offset(Register reg, int offset_of_disp,
253                             Register scratch);
254   void update_mdp_by_constant(int constant);
255   void update_mdp_for_ret(TosState state, Register return_bci);
256 
257   void profile_taken_branch(Register scratch, Register bumped_count);
258   void profile_not_taken_branch(Register scratch1, Register scratch2, bool acmp = false);
259   void profile_call(Register scratch1, Register scratch2);
260   void profile_final_call(Register scratch1, Register scratch2);
261   void profile_virtual_call(Register Rreceiver, Register Rscratch1, Register Rscratch2);
262   void profile_typecheck(Register Rklass, Register Rscratch1, Register Rscratch2);
263   void profile_ret(TosState state, Register return_bci, Register scratch1, Register scratch2);
264   void profile_switch_default(Register scratch1, Register scratch2);
265   void profile_switch_case(Register index, Register scratch1,Register scratch2, Register scratch3);
266   void profile_null_seen(Register Rscratch1, Register Rscratch2);
267 
268   template <class ArrayData> void profile_array_type(Register array, Register tmp1, Register tmp2);
269 
270   void profile_multiple_element_types(Register element, Register tmp1, Register tmp2, Register tmp3);
271   void profile_element_type(Register element, Register tmp1, Register tmp2);
272   void profile_acmp(Register left, Register right, Register tmp1, Register tmp2);
273 
274   // Argument and return type profiling.
275   void profile_obj_type(Register obj, Register mdo_addr_base, RegisterOrConstant mdo_addr_offs, Register tmp, Register tmp2);
276   void profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual);
277   void profile_return_type(Register ret, Register tmp1, Register tmp2);
278   void profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4);
279 
280   // Debugging
281   void verify_oop(Register reg, TosState state = atos);    // only if +VerifyOops && state == atos
282   void verify_oop_or_return_address(Register reg, Register rtmp); // for astore
283 
284   typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
285 
286   // Support for jvmdi/jvmpi.
287   void notify_method_entry();
288   void notify_method_exit(bool is_native_method, TosState state,
289                           NotifyMethodExitMode mode, bool check_exceptions);
290 
291   // Allocate instance in "obj" and read in the content of the inline field
292   // NOTES:
293   //   - input holder object via "obj", which must be r0,
294   //     will return new instance via the same reg
295   void read_flat_field(Register entry, Register obj);
296   void write_flat_field(Register entry, Register tmp1, Register tmp2, Register obj, Register field_offset, Register value);
297 };
298 
299 #endif // CPU_PPC_INTERP_MASM_PPC_HPP
< prev index next >