< prev index next >

src/share/vm/opto/matcher.hpp

Print this page




 282 
 283   // Register number of the stack slot corresponding to the highest incoming
 284   // argument on the stack.  Per the Big Picture in the AD file, it is:
 285   //   _old_SP + out_preserve_stack_slots + incoming argument size.
 286   OptoReg::Name _in_arg_limit;
 287 
 288   // Register number of the stack slot corresponding to the new SP.
 289   // Per the Big Picture in the AD file, it is:
 290   //   _in_arg_limit + pad0
 291   OptoReg::Name _new_SP;
 292 
 293   // Register number of the stack slot corresponding to the highest outgoing
 294   // argument on the stack.  Per the Big Picture in the AD file, it is:
 295   //   _new_SP + max outgoing arguments of all calls
 296   OptoReg::Name _out_arg_limit;
 297 
 298   OptoRegPair *_parm_regs;        // Array of machine registers per argument
 299   RegMask *_calling_convention_mask; // Array of RegMasks per argument
 300 
 301   // Does matcher have a match rule for this ideal node?
 302   static const bool has_match_rule(int opcode);
 303   static const bool _hasMatchRule[_last_opcode];
 304 
 305   // Does matcher have a match rule for this ideal node and is the
 306   // predicate (if there is one) true?
 307   // NOTE: If this function is used more commonly in the future, ADLC
 308   // should generate this one.
 309   static const bool match_rule_supported(int opcode);
 310 
 311   // identify extra cases that we might want to provide match rules for
 312   // e.g. Op_ vector nodes and other intrinsics while guarding with vlen
 313   static const bool match_rule_supported_vector(int opcode, int vlen);
 314 
 315   // Some microarchitectures have mask registers used on vectors
 316   static const bool has_predicated_vectors(void);
 317 
 318   // Some uarchs have different sized float register resources
 319   static const int float_pressure(int default_pressure_threshold);
 320 
 321   // Used to determine if we have fast l2f conversion
 322   // USII has it, USIII doesn't


 360   // Sparc probably wants at least double-word (8).
 361   static uint stack_alignment_in_bytes();
 362   // Alignment of stack, measured in stack slots.
 363   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
 364   static uint stack_alignment_in_slots() {
 365     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
 366   }
 367 
 368   // Array mapping arguments to registers.  Argument 0 is usually the 'this'
 369   // pointer.  Registers can include stack-slots and regular registers.
 370   static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
 371 
 372   // Convert a sig into a calling convention register layout
 373   // and find interesting things about it.
 374   static OptoReg::Name  find_receiver( bool is_outgoing );
 375   // Return address register.  On Intel it is a stack-slot.  On PowerPC
 376   // it is the Link register.  On Sparc it is r31?
 377   virtual OptoReg::Name return_addr() const;
 378   RegMask              _return_addr_mask;
 379   // Return value register.  On Intel it is EAX.  On Sparc i0/o0.
 380   static OptoRegPair   return_value(int ideal_reg, bool is_outgoing);
 381   static OptoRegPair c_return_value(int ideal_reg, bool is_outgoing);
 382   RegMask                     _return_value_mask;
 383   // Inline Cache Register
 384   static OptoReg::Name  inline_cache_reg();
 385   static int            inline_cache_reg_encode();
 386 
 387   // Register for DIVI projection of divmodI
 388   static RegMask divI_proj_mask();
 389   // Register for MODI projection of divmodI
 390   static RegMask modI_proj_mask();
 391 
 392   // Register for DIVL projection of divmodL
 393   static RegMask divL_proj_mask();
 394   // Register for MODL projection of divmodL
 395   static RegMask modL_proj_mask();
 396 
 397   // Use hardware DIV instruction when it is faster than
 398   // a code which use multiply for division by constant.
 399   static bool use_asm_for_ldiv_by_con( jlong divisor );
 400 
 401   static const RegMask method_handle_invoke_SP_save_mask();




 282 
 283   // Register number of the stack slot corresponding to the highest incoming
 284   // argument on the stack.  Per the Big Picture in the AD file, it is:
 285   //   _old_SP + out_preserve_stack_slots + incoming argument size.
 286   OptoReg::Name _in_arg_limit;
 287 
 288   // Register number of the stack slot corresponding to the new SP.
 289   // Per the Big Picture in the AD file, it is:
 290   //   _in_arg_limit + pad0
 291   OptoReg::Name _new_SP;
 292 
 293   // Register number of the stack slot corresponding to the highest outgoing
 294   // argument on the stack.  Per the Big Picture in the AD file, it is:
 295   //   _new_SP + max outgoing arguments of all calls
 296   OptoReg::Name _out_arg_limit;
 297 
 298   OptoRegPair *_parm_regs;        // Array of machine registers per argument
 299   RegMask *_calling_convention_mask; // Array of RegMasks per argument
 300 
 301   // Does matcher have a match rule for this ideal node?
 302   static const bool has_match_rule(uint opcode);
 303   static const bool _hasMatchRule[_last_opcode];
 304 
 305   // Does matcher have a match rule for this ideal node and is the
 306   // predicate (if there is one) true?
 307   // NOTE: If this function is used more commonly in the future, ADLC
 308   // should generate this one.
 309   static const bool match_rule_supported(int opcode);
 310 
 311   // identify extra cases that we might want to provide match rules for
 312   // e.g. Op_ vector nodes and other intrinsics while guarding with vlen
 313   static const bool match_rule_supported_vector(int opcode, int vlen);
 314 
 315   // Some microarchitectures have mask registers used on vectors
 316   static const bool has_predicated_vectors(void);
 317 
 318   // Some uarchs have different sized float register resources
 319   static const int float_pressure(int default_pressure_threshold);
 320 
 321   // Used to determine if we have fast l2f conversion
 322   // USII has it, USIII doesn't


 360   // Sparc probably wants at least double-word (8).
 361   static uint stack_alignment_in_bytes();
 362   // Alignment of stack, measured in stack slots.
 363   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
 364   static uint stack_alignment_in_slots() {
 365     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
 366   }
 367 
 368   // Array mapping arguments to registers.  Argument 0 is usually the 'this'
 369   // pointer.  Registers can include stack-slots and regular registers.
 370   static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
 371 
 372   // Convert a sig into a calling convention register layout
 373   // and find interesting things about it.
 374   static OptoReg::Name  find_receiver( bool is_outgoing );
 375   // Return address register.  On Intel it is a stack-slot.  On PowerPC
 376   // it is the Link register.  On Sparc it is r31?
 377   virtual OptoReg::Name return_addr() const;
 378   RegMask              _return_addr_mask;
 379   // Return value register.  On Intel it is EAX.  On Sparc i0/o0.
 380   static OptoRegPair   return_value(uint ideal_reg, bool is_outgoing);
 381   static OptoRegPair c_return_value(uint ideal_reg, bool is_outgoing);
 382   RegMask                     _return_value_mask;
 383   // Inline Cache Register
 384   static OptoReg::Name  inline_cache_reg();
 385   static int            inline_cache_reg_encode();
 386 
 387   // Register for DIVI projection of divmodI
 388   static RegMask divI_proj_mask();
 389   // Register for MODI projection of divmodI
 390   static RegMask modI_proj_mask();
 391 
 392   // Register for DIVL projection of divmodL
 393   static RegMask divL_proj_mask();
 394   // Register for MODL projection of divmodL
 395   static RegMask modL_proj_mask();
 396 
 397   // Use hardware DIV instruction when it is faster than
 398   // a code which use multiply for division by constant.
 399   static bool use_asm_for_ldiv_by_con( jlong divisor );
 400 
 401   static const RegMask method_handle_invoke_SP_save_mask();


< prev index next >