hotspot/src/share/vm/opto/machnode.hpp
changeset 25930 eae8b7490d2c
parent 25637 369f62cdfaba
child 28648 102bdbb42723
equal deleted inserted replaced
25929:4fd732076fe1 25930:eae8b7490d2c
   150   // Hash and compare over operands are currently identical
   150   // Hash and compare over operands are currently identical
   151   virtual uint  hash() const;
   151   virtual uint  hash() const;
   152   virtual uint  cmp( const MachOper &oper ) const;
   152   virtual uint  cmp( const MachOper &oper ) const;
   153 
   153 
   154   // Virtual clone, since I do not know how big the MachOper is.
   154   // Virtual clone, since I do not know how big the MachOper is.
   155   virtual MachOper *clone(Compile* C) const = 0;
   155   virtual MachOper *clone() const = 0;
   156 
   156 
   157   // Return ideal Type from simple operands.  Fail for complex operands.
   157   // Return ideal Type from simple operands.  Fail for complex operands.
   158   virtual const Type *type() const;
   158   virtual const Type *type() const;
   159 
   159 
   160   // Set an integer offset if we have one, or error otherwise
   160   // Set an integer offset if we have one, or error otherwise
   200   virtual uint mach_constant_base_node_input() const { return (uint)-1; }
   200   virtual uint mach_constant_base_node_input() const { return (uint)-1; }
   201 
   201 
   202   // Copy inputs and operands to new node of instruction.
   202   // Copy inputs and operands to new node of instruction.
   203   // Called from cisc_version() and short_branch_version().
   203   // Called from cisc_version() and short_branch_version().
   204   // !!!! The method's body is defined in ad_<arch>.cpp file.
   204   // !!!! The method's body is defined in ad_<arch>.cpp file.
   205   void fill_new_machnode(MachNode *n, Compile* C) const;
   205   void fill_new_machnode(MachNode *n) const;
   206 
   206 
   207   // Return an equivalent instruction using memory for cisc_operand position
   207   // Return an equivalent instruction using memory for cisc_operand position
   208   virtual MachNode *cisc_version(int offset, Compile* C);
   208   virtual MachNode *cisc_version(int offset);
   209   // Modify this instruction's register mask to use stack version for cisc_operand
   209   // Modify this instruction's register mask to use stack version for cisc_operand
   210   virtual void use_cisc_RegMask();
   210   virtual void use_cisc_RegMask();
   211 
   211 
   212   // Support for short branches
   212   // Support for short branches
   213   bool may_be_short_branch() const { return (flags() & Flag_may_be_short_branch) != 0; }
   213   bool may_be_short_branch() const { return (flags() & Flag_may_be_short_branch) != 0; }
   315 
   315 
   316   // Call "get_base_and_disp" to decide which category of memory is used here.
   316   // Call "get_base_and_disp" to decide which category of memory is used here.
   317   virtual const class TypePtr *adr_type() const;
   317   virtual const class TypePtr *adr_type() const;
   318 
   318 
   319   // Apply peephole rule(s) to this instruction
   319   // Apply peephole rule(s) to this instruction
   320   virtual MachNode *peephole( Block *block, int block_index, PhaseRegAlloc *ra_, int &deleted, Compile* C );
   320   virtual MachNode *peephole(Block *block, int block_index, PhaseRegAlloc *ra_, int &deleted);
   321 
   321 
   322   // Top-level ideal Opcode matched
   322   // Top-level ideal Opcode matched
   323   virtual int ideal_Opcode()     const { return Op_Node; }
   323   virtual int ideal_Opcode()     const { return Op_Node; }
   324 
   324 
   325   // Adds the label for the case
   325   // Adds the label for the case
   625   }
   625   }
   626   virtual void label_set(Label* label, uint block_num) = 0;
   626   virtual void label_set(Label* label, uint block_num) = 0;
   627   virtual void save_label(Label** label, uint* block_num) = 0;
   627   virtual void save_label(Label** label, uint* block_num) = 0;
   628 
   628 
   629   // Support for short branches
   629   // Support for short branches
   630   virtual MachNode *short_branch_version(Compile* C) { return NULL; }
   630   virtual MachNode *short_branch_version() { return NULL; }
   631 
   631 
   632   virtual bool pinned() const { return true; };
   632   virtual bool pinned() const { return true; };
   633 };
   633 };
   634 
   634 
   635 //------------------------------MachNullChkNode--------------------------------
   635 //------------------------------MachNullChkNode--------------------------------
   983 
   983 
   984   labelOper(Label* label, uint block_num) : _label(label), _block_num(block_num) {}
   984   labelOper(Label* label, uint block_num) : _label(label), _block_num(block_num) {}
   985 
   985 
   986   labelOper(labelOper* l) : _label(l->_label) , _block_num(l->_block_num) {}
   986   labelOper(labelOper* l) : _label(l->_label) , _block_num(l->_block_num) {}
   987 
   987 
   988   virtual MachOper *clone(Compile* C) const;
   988   virtual MachOper *clone() const;
   989 
   989 
   990   virtual Label *label() const { assert(_label != NULL, "need Label"); return _label; }
   990   virtual Label *label() const { assert(_label != NULL, "need Label"); return _label; }
   991 
   991 
   992   virtual uint           opcode() const;
   992   virtual uint           opcode() const;
   993 
   993 
  1010 public:
  1010 public:
  1011   intptr_t _method;             // Address of method
  1011   intptr_t _method;             // Address of method
  1012   methodOper() :   _method(0) {}
  1012   methodOper() :   _method(0) {}
  1013   methodOper(intptr_t method) : _method(method)  {}
  1013   methodOper(intptr_t method) : _method(method)  {}
  1014 
  1014 
  1015   virtual MachOper *clone(Compile* C) const;
  1015   virtual MachOper *clone() const;
  1016 
  1016 
  1017   virtual intptr_t method() const { return _method; }
  1017   virtual intptr_t method() const { return _method; }
  1018 
  1018 
  1019   virtual uint           opcode() const;
  1019   virtual uint           opcode() const;
  1020 
  1020