263 };
264
265
266 //------------------------------EncodeP--------------------------------
267 // Encodes an oop pointers into its compressed form
268 // Takes an extra argument which is the real heap base as a long which
269 // may be useful for code generation in the backend.
270 class EncodePNode : public TypeNode {
271 public:
272 EncodePNode(Node* value, const Type* type):
273 TypeNode(type, 2) {
274 init_class_id(Class_EncodeP);
275 init_req(0, NULL);
276 init_req(1, value);
277 }
278 virtual int Opcode() const;
279 virtual Node *Identity( PhaseTransform *phase );
280 virtual const Type *Value( PhaseTransform *phase ) const;
281 virtual uint ideal_reg() const { return Op_RegN; }
282
283 static Node* encode(PhaseTransform* phase, Node* value);
284 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp );
285 };
286
287 //------------------------------DecodeN--------------------------------
288 // Converts a narrow oop into a real oop ptr.
289 // Takes an extra argument which is the real heap base as a long which
290 // may be useful for code generation in the backend.
291 class DecodeNNode : public TypeNode {
292 public:
293 DecodeNNode(Node* value, const Type* type):
294 TypeNode(type, 2) {
295 init_class_id(Class_DecodeN);
296 init_req(0, NULL);
297 init_req(1, value);
298 }
299 virtual int Opcode() const;
300 virtual Node *Identity( PhaseTransform *phase );
301 virtual const Type *Value( PhaseTransform *phase ) const;
302 virtual uint ideal_reg() const { return Op_RegP; }
303
304 static Node* decode(PhaseTransform* phase, Node* value);
305 };
306
307 //------------------------------Conv2BNode-------------------------------------
308 // Convert int/pointer to a Boolean. Map zero to zero, all else to 1.
309 class Conv2BNode : public Node {
310 public:
311 Conv2BNode( Node *i ) : Node(0,i) {}
312 virtual int Opcode() const;
313 virtual const Type *bottom_type() const { return TypeInt::BOOL; }
314 virtual Node *Identity( PhaseTransform *phase );
315 virtual const Type *Value( PhaseTransform *phase ) const;
316 virtual uint ideal_reg() const { return Op_RegI; }
317 };
318
319 // The conversions operations are all Alpha sorted. Please keep it that way!
320 //------------------------------ConvD2FNode------------------------------------
321 // Convert double to float
322 class ConvD2FNode : public Node {
323 public:
324 ConvD2FNode( Node *in1 ) : Node(0,in1) {}
|
263 };
264
265
266 //------------------------------EncodeP--------------------------------
267 // Encodes an oop pointers into its compressed form
268 // Takes an extra argument which is the real heap base as a long which
269 // may be useful for code generation in the backend.
270 class EncodePNode : public TypeNode {
271 public:
272 EncodePNode(Node* value, const Type* type):
273 TypeNode(type, 2) {
274 init_class_id(Class_EncodeP);
275 init_req(0, NULL);
276 init_req(1, value);
277 }
278 virtual int Opcode() const;
279 virtual Node *Identity( PhaseTransform *phase );
280 virtual const Type *Value( PhaseTransform *phase ) const;
281 virtual uint ideal_reg() const { return Op_RegN; }
282
283 virtual Node *Ideal_DU_postCCP( PhaseCCP *ccp );
284 };
285
286 //------------------------------DecodeN--------------------------------
287 // Converts a narrow oop into a real oop ptr.
288 // Takes an extra argument which is the real heap base as a long which
289 // may be useful for code generation in the backend.
290 class DecodeNNode : public TypeNode {
291 public:
292 DecodeNNode(Node* value, const Type* type):
293 TypeNode(type, 2) {
294 init_class_id(Class_DecodeN);
295 init_req(0, NULL);
296 init_req(1, value);
297 }
298 virtual int Opcode() const;
299 virtual Node *Identity( PhaseTransform *phase );
300 virtual const Type *Value( PhaseTransform *phase ) const;
301 virtual uint ideal_reg() const { return Op_RegP; }
302 };
303
304 //------------------------------Conv2BNode-------------------------------------
305 // Convert int/pointer to a Boolean. Map zero to zero, all else to 1.
306 class Conv2BNode : public Node {
307 public:
308 Conv2BNode( Node *i ) : Node(0,i) {}
309 virtual int Opcode() const;
310 virtual const Type *bottom_type() const { return TypeInt::BOOL; }
311 virtual Node *Identity( PhaseTransform *phase );
312 virtual const Type *Value( PhaseTransform *phase ) const;
313 virtual uint ideal_reg() const { return Op_RegI; }
314 };
315
316 // The conversions operations are all Alpha sorted. Please keep it that way!
317 //------------------------------ConvD2FNode------------------------------------
318 // Convert double to float
319 class ConvD2FNode : public Node {
320 public:
321 ConvD2FNode( Node *in1 ) : Node(0,in1) {}
|