< prev index next >

src/hotspot/share/opto/matcher.hpp

Print this page

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


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

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

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

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