479 virtual uint ideal_reg() const { return Op_RegP; } 480 virtual const Type *bottom_type() const { return TypeRawPtr::BOTTOM; } 481 }; 482 483 //------------------------------CastP2XNode------------------------------------- 484 // Used in both 32-bit and 64-bit land. 485 // Used for card-marks and unsafe pointer math. 486 class CastP2XNode : public Node { 487 public: 488 CastP2XNode( Node *ctrl, Node *n ) : Node(ctrl, n) {} 489 virtual int Opcode() const; 490 virtual const Type *Value( PhaseTransform *phase ) const; 491 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 492 virtual Node *Identity( PhaseTransform *phase ); 493 virtual uint ideal_reg() const { return Op_RegX; } 494 virtual const Type *bottom_type() const { return TypeX_X; } 495 // Return false to keep node from moving away from an associated card mark. 496 virtual bool depends_only_on_test() const { return false; } 497 }; 498 499 //------------------------------MemMoveNode------------------------------------ 500 // Memory to memory move. Inserted very late, after allocation. 501 class MemMoveNode : public Node { 502 public: 503 MemMoveNode( Node *dst, Node *src ) : Node(0,dst,src) {} 504 virtual int Opcode() const; 505 }; 506 507 //------------------------------ThreadLocalNode-------------------------------- 508 // Ideal Node which returns the base of ThreadLocalStorage. 509 class ThreadLocalNode : public Node { 510 public: 511 ThreadLocalNode( ) : Node((Node*)Compile::current()->root()) {} 512 virtual int Opcode() const; 513 virtual const Type *bottom_type() const { return TypeRawPtr::BOTTOM;} 514 virtual uint ideal_reg() const { return Op_RegP; } 515 }; 516 517 //------------------------------LoadReturnPCNode------------------------------- 518 class LoadReturnPCNode: public Node { 519 public: 520 LoadReturnPCNode(Node *c) : Node(c) { } 521 virtual int Opcode() const; 522 virtual uint ideal_reg() const { return Op_RegP; } 523 }; 524 525 526 //-----------------------------RoundFloatNode---------------------------------- | 479 virtual uint ideal_reg() const { return Op_RegP; } 480 virtual const Type *bottom_type() const { return TypeRawPtr::BOTTOM; } 481 }; 482 483 //------------------------------CastP2XNode------------------------------------- 484 // Used in both 32-bit and 64-bit land. 485 // Used for card-marks and unsafe pointer math. 486 class CastP2XNode : public Node { 487 public: 488 CastP2XNode( Node *ctrl, Node *n ) : Node(ctrl, n) {} 489 virtual int Opcode() const; 490 virtual const Type *Value( PhaseTransform *phase ) const; 491 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); 492 virtual Node *Identity( PhaseTransform *phase ); 493 virtual uint ideal_reg() const { return Op_RegX; } 494 virtual const Type *bottom_type() const { return TypeX_X; } 495 // Return false to keep node from moving away from an associated card mark. 496 virtual bool depends_only_on_test() const { return false; } 497 }; 498 499 //------------------------------ThreadLocalNode-------------------------------- 500 // Ideal Node which returns the base of ThreadLocalStorage. 501 class ThreadLocalNode : public Node { 502 public: 503 ThreadLocalNode( ) : Node((Node*)Compile::current()->root()) {} 504 virtual int Opcode() const; 505 virtual const Type *bottom_type() const { return TypeRawPtr::BOTTOM;} 506 virtual uint ideal_reg() const { return Op_RegP; } 507 }; 508 509 //------------------------------LoadReturnPCNode------------------------------- 510 class LoadReturnPCNode: public Node { 511 public: 512 LoadReturnPCNode(Node *c) : Node(c) { } 513 virtual int Opcode() const; 514 virtual uint ideal_reg() const { return Op_RegP; } 515 }; 516 517 518 //-----------------------------RoundFloatNode---------------------------------- |