200 class UMulHiLNode : public Node {
201 public:
202 UMulHiLNode( Node *in1, Node *in2 ) : Node(nullptr,in1,in2) {}
203 virtual int Opcode() const;
204 virtual const Type* Value(PhaseGVN* phase) const;
205 const Type *bottom_type() const { return TypeLong::LONG; }
206 virtual uint ideal_reg() const { return Op_RegL; }
207 friend const Type* MulHiValue(const Type *t1, const Type *t2, const Type *bot);
208 };
209
210 //------------------------------MulHiLoLNode-----------------------------------
211 // Lower and upper 64-bit results of a signed 64x64->128 multiply.
212 class MulHiLoLNode : public BinaryMultiNode {
213 protected:
214 MulHiLoLNode(Node* ctrl, Node* in1, Node* in2) : BinaryMultiNode(ctrl, in1, in2) {}
215
216 public:
217 virtual int Opcode() const;
218 virtual const Type* bottom_type() const { return TypeTuple::LONG_PAIR; }
219
220 virtual Node* match(const ProjNode* proj, const Matcher* m);
221
222 static MulHiLoLNode* make(Node* mul_hi);
223 };
224
225 //------------------------------UMulHiLoLNode----------------------------------
226 // Lower and upper 64-bit results of an unsigned 64x64->128 multiply.
227 class UMulHiLoLNode : public MulHiLoLNode {
228 public:
229 UMulHiLoLNode(Node* ctrl, Node* in1, Node* in2) : MulHiLoLNode(ctrl, in1, in2) {}
230 virtual int Opcode() const;
231
232 static UMulHiLoLNode* make(Node* umul_hi);
233 };
234
235 //------------------------------AndINode---------------------------------------
236 // Logically AND 2 integers. Included with the MUL nodes because it inherits
237 // all the behavior of multiplication on a ring.
238 class AndINode : public MulINode {
239 public:
240 AndINode( Node *in1, Node *in2 ) : MulINode(in1,in2) {}
|
200 class UMulHiLNode : public Node {
201 public:
202 UMulHiLNode( Node *in1, Node *in2 ) : Node(nullptr,in1,in2) {}
203 virtual int Opcode() const;
204 virtual const Type* Value(PhaseGVN* phase) const;
205 const Type *bottom_type() const { return TypeLong::LONG; }
206 virtual uint ideal_reg() const { return Op_RegL; }
207 friend const Type* MulHiValue(const Type *t1, const Type *t2, const Type *bot);
208 };
209
210 //------------------------------MulHiLoLNode-----------------------------------
211 // Lower and upper 64-bit results of a signed 64x64->128 multiply.
212 class MulHiLoLNode : public BinaryMultiNode {
213 protected:
214 MulHiLoLNode(Node* ctrl, Node* in1, Node* in2) : BinaryMultiNode(ctrl, in1, in2) {}
215
216 public:
217 virtual int Opcode() const;
218 virtual const Type* bottom_type() const { return TypeTuple::LONG_PAIR; }
219
220 virtual Node* match(const ProjNode* proj, const Matcher* m, const RegMask* mask);
221
222 static MulHiLoLNode* make(Node* mul_hi);
223 };
224
225 //------------------------------UMulHiLoLNode----------------------------------
226 // Lower and upper 64-bit results of an unsigned 64x64->128 multiply.
227 class UMulHiLoLNode : public MulHiLoLNode {
228 public:
229 UMulHiLoLNode(Node* ctrl, Node* in1, Node* in2) : MulHiLoLNode(ctrl, in1, in2) {}
230 virtual int Opcode() const;
231
232 static UMulHiLoLNode* make(Node* umul_hi);
233 };
234
235 //------------------------------AndINode---------------------------------------
236 // Logically AND 2 integers. Included with the MUL nodes because it inherits
237 // all the behavior of multiplication on a ring.
238 class AndINode : public MulINode {
239 public:
240 AndINode( Node *in1, Node *in2 ) : MulINode(in1,in2) {}
|