Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: runtime/vm/intermediate_language.h

Issue 23219002: Add double unary operation (negate). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ 5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_
6 #define VM_INTERMEDIATE_LANGUAGE_H_ 6 #define VM_INTERMEDIATE_LANGUAGE_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/ast.h" 9 #include "vm/ast.h"
10 #include "vm/growable_array.h" 10 #include "vm/growable_array.h"
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 M(LoadUntagged) \ 574 M(LoadUntagged) \
575 M(LoadClassId) \ 575 M(LoadClassId) \
576 M(InstantiateType) \ 576 M(InstantiateType) \
577 M(InstantiateTypeArguments) \ 577 M(InstantiateTypeArguments) \
578 M(ExtractConstructorTypeArguments) \ 578 M(ExtractConstructorTypeArguments) \
579 M(ExtractConstructorInstantiator) \ 579 M(ExtractConstructorInstantiator) \
580 M(AllocateContext) \ 580 M(AllocateContext) \
581 M(CloneContext) \ 581 M(CloneContext) \
582 M(BinarySmiOp) \ 582 M(BinarySmiOp) \
583 M(UnarySmiOp) \ 583 M(UnarySmiOp) \
584 M(UnaryDoubleOp) \
584 M(CheckStackOverflow) \ 585 M(CheckStackOverflow) \
585 M(SmiToDouble) \ 586 M(SmiToDouble) \
586 M(DoubleToInteger) \ 587 M(DoubleToInteger) \
587 M(DoubleToSmi) \ 588 M(DoubleToSmi) \
588 M(DoubleToDouble) \ 589 M(DoubleToDouble) \
589 M(CheckClass) \ 590 M(CheckClass) \
590 M(CheckSmi) \ 591 M(CheckSmi) \
591 M(Constant) \ 592 M(Constant) \
592 M(CheckEitherNonSmi) \ 593 M(CheckEitherNonSmi) \
593 M(BinaryDoubleOp) \ 594 M(BinaryDoubleOp) \
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 friend class Float32x4TwoArgShuffleInstr; 914 friend class Float32x4TwoArgShuffleInstr;
914 friend class Uint32x4BoolConstructorInstr; 915 friend class Uint32x4BoolConstructorInstr;
915 friend class Uint32x4GetFlagInstr; 916 friend class Uint32x4GetFlagInstr;
916 friend class Uint32x4SetFlagInstr; 917 friend class Uint32x4SetFlagInstr;
917 friend class Uint32x4SelectInstr; 918 friend class Uint32x4SelectInstr;
918 friend class Uint32x4ToFloat32x4Instr; 919 friend class Uint32x4ToFloat32x4Instr;
919 friend class BinaryUint32x4OpInstr; 920 friend class BinaryUint32x4OpInstr;
920 friend class BinaryMintOpInstr; 921 friend class BinaryMintOpInstr;
921 friend class BinarySmiOpInstr; 922 friend class BinarySmiOpInstr;
922 friend class UnarySmiOpInstr; 923 friend class UnarySmiOpInstr;
924 friend class UnaryDoubleOpInstr;
923 friend class ShiftMintOpInstr; 925 friend class ShiftMintOpInstr;
924 friend class UnaryMintOpInstr; 926 friend class UnaryMintOpInstr;
925 friend class MathUnaryInstr; 927 friend class MathUnaryInstr;
926 friend class MathMinMaxInstr; 928 friend class MathMinMaxInstr;
927 friend class CheckClassInstr; 929 friend class CheckClassInstr;
928 friend class GuardFieldInstr; 930 friend class GuardFieldInstr;
929 friend class CheckSmiInstr; 931 friend class CheckSmiInstr;
930 friend class CheckArrayBoundInstr; 932 friend class CheckArrayBoundInstr;
931 friend class CheckEitherNonSmiInstr; 933 friend class CheckEitherNonSmiInstr;
932 friend class LICM; 934 friend class LICM;
(...skipping 5113 matching lines...) Expand 10 before | Expand all | Expand 10 after
6046 6048
6047 virtual bool MayThrow() const { return false; } 6049 virtual bool MayThrow() const { return false; }
6048 6050
6049 private: 6051 private:
6050 const Token::Kind op_kind_; 6052 const Token::Kind op_kind_;
6051 6053
6052 DISALLOW_COPY_AND_ASSIGN(UnarySmiOpInstr); 6054 DISALLOW_COPY_AND_ASSIGN(UnarySmiOpInstr);
6053 }; 6055 };
6054 6056
6055 6057
6058 // Handles only NEGATE.
6059 class UnaryDoubleOpInstr : public TemplateDefinition<1> {
6060 public:
6061 UnaryDoubleOpInstr(Token::Kind op_kind,
6062 Value* value,
6063 intptr_t deopt_id)
6064 : op_kind_(op_kind) {
6065 ASSERT(op_kind == Token::kNEGATE);
6066 SetInputAt(0, value);
6067 // Overrided generated deopt_id.
regis 2013/08/14 22:07:47 Overridden
srdjan 2013/08/14 23:04:30 Done.
6068 deopt_id_ = deopt_id;
6069 }
6070
6071 Value* value() const { return inputs_[0]; }
6072 Token::Kind op_kind() const { return op_kind_; }
6073
6074 virtual void PrintOperandsTo(BufferFormatter* f) const;
6075
6076 DECLARE_INSTRUCTION(UnaryDoubleOp)
6077 virtual CompileType ComputeType() const;
6078
6079 virtual bool CanDeoptimize() const { return false; }
6080
6081 virtual intptr_t DeoptimizationTarget() const {
6082 // Direct access since this instruction cannot deoptimize, and the deopt-id
6083 // was inherited from another instruction that could deoptimize.
6084 return deopt_id_;
6085 }
6086
6087 virtual Representation representation() const {
6088 return kUnboxedDouble;
6089 }
6090
6091 virtual Representation RequiredInputRepresentation(intptr_t idx) const {
6092 ASSERT(idx == 0);
6093 return kUnboxedDouble;
6094 }
6095
6096 virtual bool AllowsCSE() const { return true; }
6097 virtual EffectSet Effects() const { return EffectSet::None(); }
6098 virtual EffectSet Dependencies() const { return EffectSet::None(); }
6099 virtual bool AttributesEqual(Instruction* other) const { return true; }
6100
6101 virtual bool MayThrow() const { return false; }
6102
6103 private:
6104 const Token::Kind op_kind_;
6105
6106 DISALLOW_COPY_AND_ASSIGN(UnaryDoubleOpInstr);
6107 };
6108
6109
6056 class CheckStackOverflowInstr : public TemplateInstruction<0> { 6110 class CheckStackOverflowInstr : public TemplateInstruction<0> {
6057 public: 6111 public:
6058 CheckStackOverflowInstr(intptr_t token_pos, intptr_t loop_depth) 6112 CheckStackOverflowInstr(intptr_t token_pos, intptr_t loop_depth)
6059 : token_pos_(token_pos), loop_depth_(loop_depth) {} 6113 : token_pos_(token_pos), loop_depth_(loop_depth) {}
6060 6114
6061 intptr_t token_pos() const { return token_pos_; } 6115 intptr_t token_pos() const { return token_pos_; }
6062 bool in_loop() const { return loop_depth_ > 0; } 6116 bool in_loop() const { return loop_depth_ > 0; }
6063 intptr_t loop_depth() const { return loop_depth_; } 6117 intptr_t loop_depth() const { return loop_depth_; }
6064 6118
6065 DECLARE_INSTRUCTION(CheckStackOverflow) 6119 DECLARE_INSTRUCTION(CheckStackOverflow)
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
6621 ForwardInstructionIterator* current_iterator_; 6675 ForwardInstructionIterator* current_iterator_;
6622 6676
6623 private: 6677 private:
6624 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); 6678 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor);
6625 }; 6679 };
6626 6680
6627 6681
6628 } // namespace dart 6682 } // namespace dart
6629 6683
6630 #endif // VM_INTERMEDIATE_LANGUAGE_H_ 6684 #endif // VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698