< prev index next >

src/hotspot/share/opto/matcher.hpp

Print this page

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


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

368 
369   // Alignment of stack in bytes, standard Intel word alignment is 4.
370   // Sparc probably wants at least double-word (8).
371   static uint stack_alignment_in_bytes();
372   // Alignment of stack, measured in stack slots.
373   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
374   static uint stack_alignment_in_slots() {
375     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
376   }
377 
378   // Convert a sig into a calling convention register layout
379   // and find interesting things about it.
380   static OptoReg::Name  find_receiver();
381   // Return address register.  On Intel it is a stack-slot.  On PowerPC
382   // it is the Link register.  On Sparc it is r31?
383   virtual OptoReg::Name return_addr() const;
384   RegMask              _return_addr_mask;
385   // Return value register.  On Intel it is EAX.
386   static OptoRegPair   return_value(uint ideal_reg);
387   static OptoRegPair c_return_value(uint ideal_reg);
388   RegMask                     _return_value_mask;
389   // Inline Cache Register
390   static OptoReg::Name  inline_cache_reg();
391   static int            inline_cache_reg_encode();
392 
393   // Register for DIVI projection of divmodI
394   static RegMask divI_proj_mask();
395   // Register for MODI projection of divmodI
396   static RegMask modI_proj_mask();
397 
398   // Register for DIVL projection of divmodL
399   static RegMask divL_proj_mask();
400   // Register for MODL projection of divmodL
401   static RegMask modL_proj_mask();
402 
403   // Use hardware DIV instruction when it is faster than
404   // a code which use multiply for division by constant.
405   static bool use_asm_for_ldiv_by_con( jlong divisor );
406 
407   static const RegMask method_handle_invoke_SP_save_mask();
408 

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

370 
371   // Alignment of stack in bytes, standard Intel word alignment is 4.
372   // Sparc probably wants at least double-word (8).
373   static uint stack_alignment_in_bytes();
374   // Alignment of stack, measured in stack slots.
375   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
376   static uint stack_alignment_in_slots() {
377     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
378   }
379 
380   // Convert a sig into a calling convention register layout
381   // and find interesting things about it.
382   static OptoReg::Name  find_receiver();
383   // Return address register.  On Intel it is a stack-slot.  On PowerPC
384   // it is the Link register.  On Sparc it is r31?
385   virtual OptoReg::Name return_addr() const;
386   RegMask              _return_addr_mask;
387   // Return value register.  On Intel it is EAX.
388   static OptoRegPair   return_value(uint ideal_reg);
389   static OptoRegPair c_return_value(uint ideal_reg);
390   RegMask*            _return_values_mask;
391   // Inline Cache Register
392   static OptoReg::Name  inline_cache_reg();
393   static int            inline_cache_reg_encode();
394 
395   // Register for DIVI projection of divmodI
396   static RegMask divI_proj_mask();
397   // Register for MODI projection of divmodI
398   static RegMask modI_proj_mask();
399 
400   // Register for DIVL projection of divmodL
401   static RegMask divL_proj_mask();
402   // Register for MODL projection of divmodL
403   static RegMask modL_proj_mask();
404 
405   // Use hardware DIV instruction when it is faster than
406   // a code which use multiply for division by constant.
407   static bool use_asm_for_ldiv_by_con( jlong divisor );
408 
409   static const RegMask method_handle_invoke_SP_save_mask();
410 
< prev index next >