102 return ::as_XMMRegister(reg(ra_, node, idx)); |
102 return ::as_XMMRegister(reg(ra_, node, idx)); |
103 } |
103 } |
104 #endif |
104 #endif |
105 |
105 |
106 virtual intptr_t constant() const; |
106 virtual intptr_t constant() const; |
107 virtual bool constant_is_oop() const; |
107 virtual relocInfo::relocType constant_reloc() const; |
108 virtual jdouble constantD() const; |
108 virtual jdouble constantD() const; |
109 virtual jfloat constantF() const; |
109 virtual jfloat constantF() const; |
110 virtual jlong constantL() const; |
110 virtual jlong constantL() const; |
111 virtual TypeOopPtr *oop() const; |
111 virtual TypeOopPtr *oop() const; |
112 virtual int ccode() const; |
112 virtual int ccode() const; |
116 virtual int index(PhaseRegAlloc *ra_, const Node *node, int idx) const; |
116 virtual int index(PhaseRegAlloc *ra_, const Node *node, int idx) const; |
117 virtual int scale() const; |
117 virtual int scale() const; |
118 // Parameters needed to support MEMORY_INTERFACE access to stackSlot |
118 // Parameters needed to support MEMORY_INTERFACE access to stackSlot |
119 virtual int disp (PhaseRegAlloc *ra_, const Node *node, int idx) const; |
119 virtual int disp (PhaseRegAlloc *ra_, const Node *node, int idx) const; |
120 // Check for PC-Relative displacement |
120 // Check for PC-Relative displacement |
121 virtual bool disp_is_oop() const; |
121 virtual relocInfo::relocType disp_reloc() const; |
122 virtual int constant_disp() const; // usu. 0, may return Type::OffsetBot |
122 virtual int constant_disp() const; // usu. 0, may return Type::OffsetBot |
123 virtual int base_position() const; // base edge position, or -1 |
123 virtual int base_position() const; // base edge position, or -1 |
124 virtual int index_position() const; // index edge position, or -1 |
124 virtual int index_position() const; // index edge position, or -1 |
125 |
125 |
126 // Access the TypeKlassPtr of operands with a base==RegI and disp==RegP |
126 // Access the TypeKlassPtr of operands with a base==RegI and disp==RegP |
245 // instructions and compute the same value. |
245 // instructions and compute the same value. |
246 virtual MachNode *Expand( State *, Node_List &proj_list, Node* mem ) { return this; } |
246 virtual MachNode *Expand( State *, Node_List &proj_list, Node* mem ) { return this; } |
247 |
247 |
248 // Bottom_type call; value comes from operand0 |
248 // Bottom_type call; value comes from operand0 |
249 virtual const class Type *bottom_type() const { return _opnds[0]->type(); } |
249 virtual const class Type *bottom_type() const { return _opnds[0]->type(); } |
250 virtual uint ideal_reg() const { const Type *t = _opnds[0]->type(); return t == TypeInt::CC ? Op_RegFlags : Matcher::base2reg[t->base()]; } |
250 virtual uint ideal_reg() const { const Type *t = _opnds[0]->type(); return t == TypeInt::CC ? Op_RegFlags : t->ideal_reg(); } |
251 |
251 |
252 // If this is a memory op, return the base pointer and fixed offset. |
252 // If this is a memory op, return the base pointer and fixed offset. |
253 // If there are no such, return NULL. If there are multiple addresses |
253 // If there are no such, return NULL. If there are multiple addresses |
254 // or the address is indeterminate (rare cases) then return (Node*)-1, |
254 // or the address is indeterminate (rare cases) then return (Node*)-1, |
255 // which serves as node bottom. |
255 // which serves as node bottom. |
496 void set_out_RegMask(const RegMask &out) { _out = &out; } |
496 void set_out_RegMask(const RegMask &out) { _out = &out; } |
497 void set_in_RegMask(const RegMask &in) { _in = ∈ } |
497 void set_in_RegMask(const RegMask &in) { _in = ∈ } |
498 virtual const RegMask &out_RegMask() const { return *_out; } |
498 virtual const RegMask &out_RegMask() const { return *_out; } |
499 virtual const RegMask &in_RegMask(uint) const { return *_in; } |
499 virtual const RegMask &in_RegMask(uint) const { return *_in; } |
500 virtual const class Type *bottom_type() const { return _type; } |
500 virtual const class Type *bottom_type() const { return _type; } |
501 virtual uint ideal_reg() const { return Matcher::base2reg[_type->base()]; } |
501 virtual uint ideal_reg() const { return _type->ideal_reg(); } |
502 virtual uint oper_input_base() const { return 1; } |
502 virtual uint oper_input_base() const { return 1; } |
503 uint implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bool do_size, outputStream* st ) const; |
503 uint implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bool do_size, outputStream* st ) const; |
504 |
504 |
505 virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const; |
505 virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const; |
506 virtual uint size(PhaseRegAlloc *ra_) const; |
506 virtual uint size(PhaseRegAlloc *ra_) const; |