< prev index next >

src/hotspot/share/opto/matcher.hpp

Print this page

253   // Push a projection node onto the projection list
254   void push_projection(Node* node) {
255     _projection_list.push(node);
256   }
257 
258   Node* pop_projection() {
259     return _projection_list.pop();
260   }
261 
262   // Number of nodes in the projection list
263   uint number_of_projections() const {
264     return _projection_list.size();
265   }
266 
267   // Select instructions for entire method
268   void match();
269 
270   // Helper for match
271   OptoReg::Name warp_incoming_stk_arg( VMReg reg );
272 


273   // Transform, then walk.  Does implicit DCE while walking.
274   // Name changed from "transform" to avoid it being virtual.
275   Node *xform( Node *old_space_node, int Nodes );
276 
277   // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
278   MachNode *match_tree( const Node *n );
279   MachNode *match_sfpt( SafePointNode *sfpt );
280   // Helper for match_sfpt
281   OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
282 
283   // Initialize first stack mask and related masks.
284   void init_first_stack_mask();
285 
286   // If we should save-on-entry this register
287   bool is_save_on_entry( int reg );
288 
289   // Fixup the save-on-entry registers
290   void Fixup_Save_On_Entry( );
291 
292   // --- Frame handling ---

390 
391   // Alignment of stack in bytes, standard Intel word alignment is 4.
392   // Sparc probably wants at least double-word (8).
393   static uint stack_alignment_in_bytes();
394   // Alignment of stack, measured in stack slots.
395   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
396   static uint stack_alignment_in_slots() {
397     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
398   }
399 
400   // Convert a sig into a calling convention register layout
401   // and find interesting things about it.
402   static OptoReg::Name  find_receiver();
403   // Return address register.  On Intel it is a stack-slot.  On PowerPC
404   // it is the Link register.  On Sparc it is r31?
405   virtual OptoReg::Name return_addr() const;
406   RegMask              _return_addr_mask;
407   // Return value register.  On Intel it is EAX.
408   static OptoRegPair   return_value(uint ideal_reg);
409   static OptoRegPair c_return_value(uint ideal_reg);
410   RegMask                     _return_value_mask;
411   // Inline Cache Register
412   static OptoReg::Name  inline_cache_reg();
413   static int            inline_cache_reg_encode();
414 
415   // Register for DIVI projection of divmodI
416   static RegMask divI_proj_mask();
417   // Register for MODI projection of divmodI
418   static RegMask modI_proj_mask();
419 
420   // Register for DIVL projection of divmodL
421   static RegMask divL_proj_mask();
422   // Register for MODL projection of divmodL
423   static RegMask modL_proj_mask();
424 
425   // Use hardware DIV instruction when it is faster than
426   // a code which use multiply for division by constant.
427   static bool use_asm_for_ldiv_by_con( jlong divisor );
428 
429   static const RegMask method_handle_invoke_SP_save_mask();
430 

253   // Push a projection node onto the projection list
254   void push_projection(Node* node) {
255     _projection_list.push(node);
256   }
257 
258   Node* pop_projection() {
259     return _projection_list.pop();
260   }
261 
262   // Number of nodes in the projection list
263   uint number_of_projections() const {
264     return _projection_list.size();
265   }
266 
267   // Select instructions for entire method
268   void match();
269 
270   // Helper for match
271   OptoReg::Name warp_incoming_stk_arg( VMReg reg );
272 
273   RegMask* return_values_mask(const TypeFunc* tf);
274 
275   // Transform, then walk.  Does implicit DCE while walking.
276   // Name changed from "transform" to avoid it being virtual.
277   Node *xform( Node *old_space_node, int Nodes );
278 
279   // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
280   MachNode *match_tree( const Node *n );
281   MachNode *match_sfpt( SafePointNode *sfpt );
282   // Helper for match_sfpt
283   OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
284 
285   // Initialize first stack mask and related masks.
286   void init_first_stack_mask();
287 
288   // If we should save-on-entry this register
289   bool is_save_on_entry( int reg );
290 
291   // Fixup the save-on-entry registers
292   void Fixup_Save_On_Entry( );
293 
294   // --- Frame handling ---

392 
393   // Alignment of stack in bytes, standard Intel word alignment is 4.
394   // Sparc probably wants at least double-word (8).
395   static uint stack_alignment_in_bytes();
396   // Alignment of stack, measured in stack slots.
397   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
398   static uint stack_alignment_in_slots() {
399     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
400   }
401 
402   // Convert a sig into a calling convention register layout
403   // and find interesting things about it.
404   static OptoReg::Name  find_receiver();
405   // Return address register.  On Intel it is a stack-slot.  On PowerPC
406   // it is the Link register.  On Sparc it is r31?
407   virtual OptoReg::Name return_addr() const;
408   RegMask              _return_addr_mask;
409   // Return value register.  On Intel it is EAX.
410   static OptoRegPair   return_value(uint ideal_reg);
411   static OptoRegPair c_return_value(uint ideal_reg);
412   RegMask*            _return_values_mask;
413   // Inline Cache Register
414   static OptoReg::Name  inline_cache_reg();
415   static int            inline_cache_reg_encode();
416 
417   // Register for DIVI projection of divmodI
418   static RegMask divI_proj_mask();
419   // Register for MODI projection of divmodI
420   static RegMask modI_proj_mask();
421 
422   // Register for DIVL projection of divmodL
423   static RegMask divL_proj_mask();
424   // Register for MODL projection of divmodL
425   static RegMask modL_proj_mask();
426 
427   // Use hardware DIV instruction when it is faster than
428   // a code which use multiply for division by constant.
429   static bool use_asm_for_ldiv_by_con( jlong divisor );
430 
431   static const RegMask method_handle_invoke_SP_save_mask();
432 
< prev index next >