247 virtual const Type *bottom_type() const { return TypeInt::INT; } |
247 virtual const Type *bottom_type() const { return TypeInt::INT; } |
248 virtual uint ideal_reg() const { return Op_RegI; } |
248 virtual uint ideal_reg() const { return Op_RegI; } |
249 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
249 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
250 }; |
250 }; |
251 |
251 |
|
252 //------------------------------MaxFNode--------------------------------------- |
|
253 // Maximum of 2 floats. |
|
254 class MaxFNode : public MaxNode { |
|
255 public: |
|
256 MaxFNode(Node *in1, Node *in2) : MaxNode(in1, in2) {} |
|
257 virtual int Opcode() const; |
|
258 virtual const Type *add_ring(const Type*, const Type*) const { return Type::FLOAT; } |
|
259 virtual const Type *add_id() const { return TypeF::NEG_INF; } |
|
260 virtual const Type *bottom_type() const { return Type::FLOAT; } |
|
261 virtual uint ideal_reg() const { return Op_RegF; } |
|
262 }; |
|
263 |
|
264 //------------------------------MinFNode--------------------------------------- |
|
265 // Minimum of 2 floats. |
|
266 class MinFNode : public MaxNode { |
|
267 public: |
|
268 MinFNode(Node *in1, Node *in2) : MaxNode(in1, in2) {} |
|
269 virtual int Opcode() const; |
|
270 virtual const Type *add_ring(const Type*, const Type*) const { return Type::FLOAT; } |
|
271 virtual const Type *add_id() const { return TypeF::POS_INF; } |
|
272 virtual const Type *bottom_type() const { return Type::FLOAT; } |
|
273 virtual uint ideal_reg() const { return Op_RegF; } |
|
274 }; |
|
275 |
|
276 //------------------------------MaxDNode--------------------------------------- |
|
277 // Maximum of 2 doubles. |
|
278 class MaxDNode : public MaxNode { |
|
279 public: |
|
280 MaxDNode(Node *in1, Node *in2) : MaxNode(in1, in2) {} |
|
281 virtual int Opcode() const; |
|
282 virtual const Type *add_ring(const Type*, const Type*) const { return Type::DOUBLE; } |
|
283 virtual const Type *add_id() const { return TypeD::NEG_INF; } |
|
284 virtual const Type *bottom_type() const { return Type::DOUBLE; } |
|
285 virtual uint ideal_reg() const { return Op_RegD; } |
|
286 }; |
|
287 |
|
288 //------------------------------MinDNode--------------------------------------- |
|
289 // Minimum of 2 doubles. |
|
290 class MinDNode : public MaxNode { |
|
291 public: |
|
292 MinDNode(Node *in1, Node *in2) : MaxNode(in1, in2) {} |
|
293 virtual int Opcode() const; |
|
294 virtual const Type *add_ring(const Type*, const Type*) const { return Type::DOUBLE; } |
|
295 virtual const Type *add_id() const { return TypeD::POS_INF; } |
|
296 virtual const Type *bottom_type() const { return Type::DOUBLE; } |
|
297 virtual uint ideal_reg() const { return Op_RegD; } |
|
298 }; |
|
299 |
252 #endif // SHARE_VM_OPTO_ADDNODE_HPP |
300 #endif // SHARE_VM_OPTO_ADDNODE_HPP |