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