< prev index next >

src/hotspot/share/opto/matcher.hpp

Print this page

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


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

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

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

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