hotspot/src/share/vm/opto/machnode.hpp
changeset 22844 90f76a40ed8a
parent 19696 bd5a0131bde1
child 22847 603ad1f10e16
equal deleted inserted replaced
22843:b245fac3b6a4 22844:90f76a40ed8a
   153   // Methods to output the text version of the operand
   153   // Methods to output the text version of the operand
   154   virtual void int_format(PhaseRegAlloc *,const MachNode *node, outputStream *st) const = 0;
   154   virtual void int_format(PhaseRegAlloc *,const MachNode *node, outputStream *st) const = 0;
   155   virtual void ext_format(PhaseRegAlloc *,const MachNode *node,int idx, outputStream *st) const=0;
   155   virtual void ext_format(PhaseRegAlloc *,const MachNode *node,int idx, outputStream *st) const=0;
   156 
   156 
   157   virtual void dump_spec(outputStream *st) const; // Print per-operand info
   157   virtual void dump_spec(outputStream *st) const; // Print per-operand info
   158 #endif
   158 
       
   159   // Check whether o is a valid oper.
       
   160   static bool notAnOper(const MachOper *o) {
       
   161     if (o == NULL)                   return true;
       
   162     if (((intptr_t)o & 1) != 0)      return true;
       
   163     if (*(address*)o == badAddress)  return true;  // kill by Node::destruct
       
   164     return false;
       
   165   }
       
   166 #endif // !PRODUCT
   159 };
   167 };
   160 
   168 
   161 //------------------------------MachNode---------------------------------------
   169 //------------------------------MachNode---------------------------------------
   162 // Base type for all machine specific nodes.  All node classes generated by the
   170 // Base type for all machine specific nodes.  All node classes generated by the
   163 // ADLC inherit from this class.
   171 // ADLC inherit from this class.
   218   MachOper **_opnds;
   226   MachOper **_opnds;
   219   uint  num_opnds() const { return _num_opnds; }
   227   uint  num_opnds() const { return _num_opnds; }
   220 
   228 
   221   // Emit bytes into cbuf
   229   // Emit bytes into cbuf
   222   virtual void  emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const;
   230   virtual void  emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const;
       
   231   // Expand node after register allocation.
       
   232   // Node is replaced by several nodes in the postalloc expand phase.
       
   233   // Corresponding methods are generated for nodes if they specify
       
   234   // postalloc_expand. See block.cpp for more documentation.
       
   235   virtual bool requires_postalloc_expand() const { return false; }
       
   236   virtual void postalloc_expand(GrowableArray <Node *> *nodes, PhaseRegAlloc *ra_);
   223   // Size of instruction in bytes
   237   // Size of instruction in bytes
   224   virtual uint  size(PhaseRegAlloc *ra_) const;
   238   virtual uint  size(PhaseRegAlloc *ra_) const;
   225   // Helper function that computes size by emitting code
   239   // Helper function that computes size by emitting code
   226   virtual uint  emit_size(PhaseRegAlloc *ra_) const;
   240   virtual uint  emit_size(PhaseRegAlloc *ra_) const;
   227 
   241 
   353     init_class_id(Class_MachConstantBase);
   367     init_class_id(Class_MachConstantBase);
   354   }
   368   }
   355   virtual const class Type* bottom_type() const { return TypeRawPtr::NOTNULL; }
   369   virtual const class Type* bottom_type() const { return TypeRawPtr::NOTNULL; }
   356   virtual uint ideal_reg() const { return Op_RegP; }
   370   virtual uint ideal_reg() const { return Op_RegP; }
   357   virtual uint oper_input_base() const { return 1; }
   371   virtual uint oper_input_base() const { return 1; }
       
   372 
       
   373   virtual bool requires_postalloc_expand() const;
       
   374   virtual void postalloc_expand(GrowableArray <Node *> *nodes, PhaseRegAlloc *ra_);
   358 
   375 
   359   virtual void emit(CodeBuffer& cbuf, PhaseRegAlloc* ra_) const;
   376   virtual void emit(CodeBuffer& cbuf, PhaseRegAlloc* ra_) const;
   360   virtual uint size(PhaseRegAlloc* ra_) const;
   377   virtual uint size(PhaseRegAlloc* ra_) const;
   361   virtual bool pinned() const { return UseRDPCForConstantTableBase; }
   378   virtual bool pinned() const { return UseRDPCForConstantTableBase; }
   362 
   379