460 virtual int Opcode() const; 461 const Type *bottom_type() const { return Type::DOUBLE; } 462 virtual uint ideal_reg() const { return Op_RegD; } 463 }; 464 465 466 //------------------------------SqrtDNode-------------------------------------- 467 // square root a double 468 class SqrtDNode : public Node { 469 public: 470 SqrtDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 471 init_flags(Flag_is_expensive); 472 C->add_expensive_node(this); 473 } 474 virtual int Opcode() const; 475 const Type *bottom_type() const { return Type::DOUBLE; } 476 virtual uint ideal_reg() const { return Op_RegD; } 477 virtual const Type *Value( PhaseTransform *phase ) const; 478 }; 479 480 //------------------------------LogDNode--------------------------------------- 481 // Log_e of a double 482 class LogDNode : public Node { 483 public: 484 LogDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 485 init_flags(Flag_is_expensive); 486 C->add_expensive_node(this); 487 } 488 virtual int Opcode() const; 489 const Type *bottom_type() const { return Type::DOUBLE; } 490 virtual uint ideal_reg() const { return Op_RegD; } 491 virtual const Type *Value( PhaseTransform *phase ) const; 492 }; 493 494 //------------------------------Log10DNode--------------------------------------- 495 // Log_10 of a double 496 class Log10DNode : public Node { 497 public: 498 Log10DNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 499 init_flags(Flag_is_expensive); 500 C->add_expensive_node(this); 501 } 502 virtual int Opcode() const; 503 const Type *bottom_type() const { return Type::DOUBLE; } 504 virtual uint ideal_reg() const { return Op_RegD; } 505 virtual const Type *Value( PhaseTransform *phase ) const; 506 }; 507 508 //------------------------------PowDNode--------------------------------------- 509 // Raise a double to a double power 510 class PowDNode : public Node { 511 public: 512 PowDNode(Compile* C, Node *c, Node *in1, Node *in2 ) : Node(c, in1, in2) { 513 init_flags(Flag_is_expensive); | 460 virtual int Opcode() const; 461 const Type *bottom_type() const { return Type::DOUBLE; } 462 virtual uint ideal_reg() const { return Op_RegD; } 463 }; 464 465 466 //------------------------------SqrtDNode-------------------------------------- 467 // square root a double 468 class SqrtDNode : public Node { 469 public: 470 SqrtDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 471 init_flags(Flag_is_expensive); 472 C->add_expensive_node(this); 473 } 474 virtual int Opcode() const; 475 const Type *bottom_type() const { return Type::DOUBLE; } 476 virtual uint ideal_reg() const { return Op_RegD; } 477 virtual const Type *Value( PhaseTransform *phase ) const; 478 }; 479 480 //------------------------------Log10DNode--------------------------------------- 481 // Log_10 of a double 482 class Log10DNode : public Node { 483 public: 484 Log10DNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 485 init_flags(Flag_is_expensive); 486 C->add_expensive_node(this); 487 } 488 virtual int Opcode() const; 489 const Type *bottom_type() const { return Type::DOUBLE; } 490 virtual uint ideal_reg() const { return Op_RegD; } 491 virtual const Type *Value( PhaseTransform *phase ) const; 492 }; 493 494 //------------------------------PowDNode--------------------------------------- 495 // Raise a double to a double power 496 class PowDNode : public Node { 497 public: 498 PowDNode(Compile* C, Node *c, Node *in1, Node *in2 ) : Node(c, in1, in2) { 499 init_flags(Flag_is_expensive); |