| OLD | NEW |
| 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 V(_Float64x2, get:y, Float64x2GetY, 1942257886) \ | 132 V(_Float64x2, get:y, Float64x2GetY, 1942257886) \ |
| 133 V(_Float64x2, _negate, Float64x2Negate, 2133212774) \ | 133 V(_Float64x2, _negate, Float64x2Negate, 2133212774) \ |
| 134 V(_Float64x2, abs, Float64x2Abs, 1224776282) \ | 134 V(_Float64x2, abs, Float64x2Abs, 1224776282) \ |
| 135 V(_Float64x2, sqrt, Float64x2Sqrt, 1037569520) \ | 135 V(_Float64x2, sqrt, Float64x2Sqrt, 1037569520) \ |
| 136 V(_Float64x2, get:signMask, Float64x2GetSignMask, 252936800) \ | 136 V(_Float64x2, get:signMask, Float64x2GetSignMask, 252936800) \ |
| 137 V(_Float64x2, scale, Float64x2Scale, 1199438744) \ | 137 V(_Float64x2, scale, Float64x2Scale, 1199438744) \ |
| 138 V(_Float64x2, withX, Float64x2WithX, 1042725932) \ | 138 V(_Float64x2, withX, Float64x2WithX, 1042725932) \ |
| 139 V(_Float64x2, withY, Float64x2WithY, 1496958947) \ | 139 V(_Float64x2, withY, Float64x2WithY, 1496958947) \ |
| 140 V(_Float64x2, min, Float64x2Min, 485240583) \ | 140 V(_Float64x2, min, Float64x2Min, 485240583) \ |
| 141 V(_Float64x2, max, Float64x2Max, 2146148204) \ | 141 V(_Float64x2, max, Float64x2Max, 2146148204) \ |
| 142 V(Int32x4, Int32x4., Int32x4Constructor, 665986284) \ |
| 142 V(Int32x4, Int32x4.bool, Int32x4BoolConstructor, 87082660) \ | 143 V(Int32x4, Int32x4.bool, Int32x4BoolConstructor, 87082660) \ |
| 143 V(Int32x4, Int32x4.fromFloat32x4Bits, Int32x4FromFloat32x4Bits, \ | 144 V(Int32x4, Int32x4.fromFloat32x4Bits, Int32x4FromFloat32x4Bits, \ |
| 144 372517418) \ | 145 372517418) \ |
| 145 V(_Int32x4, get:flagX, Int32x4GetFlagX, 1077555238) \ | 146 V(_Int32x4, get:flagX, Int32x4GetFlagX, 1077555238) \ |
| 146 V(_Int32x4, get:flagY, Int32x4GetFlagY, 779160284) \ | 147 V(_Int32x4, get:flagY, Int32x4GetFlagY, 779160284) \ |
| 147 V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 181912283) \ | 148 V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 181912283) \ |
| 148 V(_Int32x4, get:flagW, Int32x4GetFlagW, 977675534) \ | 149 V(_Int32x4, get:flagW, Int32x4GetFlagW, 977675534) \ |
| 149 V(_Int32x4, get:signMask, Int32x4GetSignMask, 1929271914) \ | 150 V(_Int32x4, get:signMask, Int32x4GetSignMask, 1929271914) \ |
| 150 V(_Int32x4, shuffle, Int32x4Shuffle, 1870018702) \ | 151 V(_Int32x4, shuffle, Int32x4Shuffle, 1870018702) \ |
| 151 V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 967644870) \ | 152 V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 967644870) \ |
| (...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 M(Float32x4Splat) \ | 768 M(Float32x4Splat) \ |
| 768 M(Float32x4Comparison) \ | 769 M(Float32x4Comparison) \ |
| 769 M(Float32x4MinMax) \ | 770 M(Float32x4MinMax) \ |
| 770 M(Float32x4Scale) \ | 771 M(Float32x4Scale) \ |
| 771 M(Float32x4Sqrt) \ | 772 M(Float32x4Sqrt) \ |
| 772 M(Float32x4ZeroArg) \ | 773 M(Float32x4ZeroArg) \ |
| 773 M(Float32x4Clamp) \ | 774 M(Float32x4Clamp) \ |
| 774 M(Float32x4With) \ | 775 M(Float32x4With) \ |
| 775 M(Float32x4ToInt32x4) \ | 776 M(Float32x4ToInt32x4) \ |
| 776 M(MaterializeObject) \ | 777 M(MaterializeObject) \ |
| 778 M(Int32x4Constructor) \ |
| 777 M(Int32x4BoolConstructor) \ | 779 M(Int32x4BoolConstructor) \ |
| 778 M(Int32x4GetFlag) \ | 780 M(Int32x4GetFlag) \ |
| 779 M(Int32x4Select) \ | 781 M(Int32x4Select) \ |
| 780 M(Int32x4SetFlag) \ | 782 M(Int32x4SetFlag) \ |
| 781 M(Int32x4ToFloat32x4) \ | 783 M(Int32x4ToFloat32x4) \ |
| 782 M(BinaryInt32x4Op) \ | 784 M(BinaryInt32x4Op) \ |
| 783 M(TestSmi) \ | 785 M(TestSmi) \ |
| 784 M(TestCids) \ | 786 M(TestCids) \ |
| 785 M(BoxFloat64x2) \ | 787 M(BoxFloat64x2) \ |
| 786 M(UnboxFloat64x2) \ | 788 M(UnboxFloat64x2) \ |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1093 friend class Float32x4WithInstr; | 1095 friend class Float32x4WithInstr; |
| 1094 friend class Float32x4ToInt32x4Instr; | 1096 friend class Float32x4ToInt32x4Instr; |
| 1095 friend class Simd64x2ShuffleInstr; | 1097 friend class Simd64x2ShuffleInstr; |
| 1096 friend class Float64x2ZeroArgInstr; | 1098 friend class Float64x2ZeroArgInstr; |
| 1097 friend class Float64x2OneArgInstr; | 1099 friend class Float64x2OneArgInstr; |
| 1098 friend class Float32x4ToFloat64x2Instr; | 1100 friend class Float32x4ToFloat64x2Instr; |
| 1099 friend class Float64x2ToFloat32x4Instr; | 1101 friend class Float64x2ToFloat32x4Instr; |
| 1100 friend class Float64x2ZeroInstr; | 1102 friend class Float64x2ZeroInstr; |
| 1101 friend class Float64x2SplatInstr; | 1103 friend class Float64x2SplatInstr; |
| 1102 friend class Float64x2ConstructorInstr; | 1104 friend class Float64x2ConstructorInstr; |
| 1105 friend class Int32x4ConstructorInstr; |
| 1103 friend class Int32x4BoolConstructorInstr; | 1106 friend class Int32x4BoolConstructorInstr; |
| 1104 friend class Int32x4GetFlagInstr; | 1107 friend class Int32x4GetFlagInstr; |
| 1105 friend class Int32x4SetFlagInstr; | 1108 friend class Int32x4SetFlagInstr; |
| 1106 friend class Int32x4SelectInstr; | 1109 friend class Int32x4SelectInstr; |
| 1107 friend class Int32x4ToFloat32x4Instr; | 1110 friend class Int32x4ToFloat32x4Instr; |
| 1108 friend class BinaryInt32x4OpInstr; | 1111 friend class BinaryInt32x4OpInstr; |
| 1109 friend class BinaryFloat64x2OpInstr; | 1112 friend class BinaryFloat64x2OpInstr; |
| 1110 friend class BinaryMintOpInstr; | 1113 friend class BinaryMintOpInstr; |
| 1111 friend class BinarySmiOpInstr; | 1114 friend class BinarySmiOpInstr; |
| 1112 friend class UnarySmiOpInstr; | 1115 friend class UnarySmiOpInstr; |
| (...skipping 5269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6382 | 6385 |
| 6383 virtual bool MayThrow() const { return false; } | 6386 virtual bool MayThrow() const { return false; } |
| 6384 | 6387 |
| 6385 private: | 6388 private: |
| 6386 const MethodRecognizer::Kind op_kind_; | 6389 const MethodRecognizer::Kind op_kind_; |
| 6387 | 6390 |
| 6388 DISALLOW_COPY_AND_ASSIGN(Float64x2OneArgInstr); | 6391 DISALLOW_COPY_AND_ASSIGN(Float64x2OneArgInstr); |
| 6389 }; | 6392 }; |
| 6390 | 6393 |
| 6391 | 6394 |
| 6395 class Int32x4ConstructorInstr : public TemplateDefinition<4> { |
| 6396 public: |
| 6397 Int32x4ConstructorInstr(Value* value0, Value* value1, Value* value2, |
| 6398 Value* value3, intptr_t deopt_id) { |
| 6399 SetInputAt(0, value0); |
| 6400 SetInputAt(1, value1); |
| 6401 SetInputAt(2, value2); |
| 6402 SetInputAt(3, value3); |
| 6403 deopt_id_ = deopt_id; |
| 6404 } |
| 6405 |
| 6406 Value* value0() const { return inputs_[0]; } |
| 6407 Value* value1() const { return inputs_[1]; } |
| 6408 Value* value2() const { return inputs_[2]; } |
| 6409 Value* value3() const { return inputs_[3]; } |
| 6410 |
| 6411 virtual void PrintOperandsTo(BufferFormatter* f) const; |
| 6412 |
| 6413 virtual bool CanDeoptimize() const { return false; } |
| 6414 |
| 6415 virtual Representation representation() const { |
| 6416 return kUnboxedInt32x4; |
| 6417 } |
| 6418 |
| 6419 virtual Representation RequiredInputRepresentation(intptr_t idx) const { |
| 6420 ASSERT((idx >= 0) && (idx < 4)); |
| 6421 return kUnboxedUint32; |
| 6422 } |
| 6423 |
| 6424 virtual intptr_t DeoptimizationTarget() const { |
| 6425 // Direct access since this instruction cannot deoptimize, and the deopt-id |
| 6426 // was inherited from another instruction that could deoptimize. |
| 6427 return deopt_id_; |
| 6428 } |
| 6429 |
| 6430 DECLARE_INSTRUCTION(Int32x4Constructor) |
| 6431 virtual CompileType ComputeType() const; |
| 6432 |
| 6433 virtual bool AllowsCSE() const { return true; } |
| 6434 virtual EffectSet Effects() const { return EffectSet::None(); } |
| 6435 virtual EffectSet Dependencies() const { return EffectSet::None(); } |
| 6436 virtual bool AttributesEqual(Instruction* other) const { return true; } |
| 6437 |
| 6438 virtual bool MayThrow() const { return false; } |
| 6439 |
| 6440 private: |
| 6441 DISALLOW_COPY_AND_ASSIGN(Int32x4ConstructorInstr); |
| 6442 }; |
| 6443 |
| 6444 |
| 6392 class Int32x4BoolConstructorInstr : public TemplateDefinition<4> { | 6445 class Int32x4BoolConstructorInstr : public TemplateDefinition<4> { |
| 6393 public: | 6446 public: |
| 6394 Int32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2, | 6447 Int32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2, |
| 6395 Value* value3, intptr_t deopt_id) { | 6448 Value* value3, intptr_t deopt_id) { |
| 6396 SetInputAt(0, value0); | 6449 SetInputAt(0, value0); |
| 6397 SetInputAt(1, value1); | 6450 SetInputAt(1, value1); |
| 6398 SetInputAt(2, value2); | 6451 SetInputAt(2, value2); |
| 6399 SetInputAt(3, value3); | 6452 SetInputAt(3, value3); |
| 6400 deopt_id_ = deopt_id; | 6453 deopt_id_ = deopt_id; |
| 6401 } | 6454 } |
| 6402 | 6455 |
| 6403 Value* value0() const { return inputs_[0]; } | 6456 Value* value0() const { return inputs_[0]; } |
| 6404 Value* value1() const { return inputs_[1]; } | 6457 Value* value1() const { return inputs_[1]; } |
| 6405 Value* value2() const { return inputs_[2]; } | 6458 Value* value2() const { return inputs_[2]; } |
| 6406 Value* value3() const { return inputs_[3]; } | 6459 Value* value3() const { return inputs_[3]; } |
| 6407 | 6460 |
| 6408 virtual void PrintOperandsTo(BufferFormatter* f) const; | 6461 virtual void PrintOperandsTo(BufferFormatter* f) const; |
| 6409 | 6462 |
| 6410 virtual bool CanDeoptimize() const { return false; } | 6463 virtual bool CanDeoptimize() const { return false; } |
| 6411 | 6464 |
| 6412 virtual Representation representation() const { | 6465 virtual Representation representation() const { |
| 6413 return kUnboxedInt32x4; | 6466 return kUnboxedInt32x4; |
| 6414 } | 6467 } |
| 6415 | 6468 |
| 6416 virtual Representation RequiredInputRepresentation(intptr_t idx) const { | 6469 virtual Representation RequiredInputRepresentation(intptr_t idx) const { |
| 6417 ASSERT(idx >= 0 && idx < 4); | 6470 ASSERT((idx >= 0) && (idx < 4)); |
| 6418 return kTagged; | 6471 return kTagged; |
| 6419 } | 6472 } |
| 6420 | 6473 |
| 6421 virtual intptr_t DeoptimizationTarget() const { | 6474 virtual intptr_t DeoptimizationTarget() const { |
| 6422 // Direct access since this instruction cannot deoptimize, and the deopt-id | 6475 // Direct access since this instruction cannot deoptimize, and the deopt-id |
| 6423 // was inherited from another instruction that could deoptimize. | 6476 // was inherited from another instruction that could deoptimize. |
| 6424 return deopt_id_; | 6477 return deopt_id_; |
| 6425 } | 6478 } |
| 6426 | 6479 |
| 6427 DECLARE_INSTRUCTION(Int32x4BoolConstructor) | 6480 DECLARE_INSTRUCTION(Int32x4BoolConstructor) |
| (...skipping 1886 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8314 ForwardInstructionIterator* current_iterator_; | 8367 ForwardInstructionIterator* current_iterator_; |
| 8315 | 8368 |
| 8316 private: | 8369 private: |
| 8317 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); | 8370 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); |
| 8318 }; | 8371 }; |
| 8319 | 8372 |
| 8320 | 8373 |
| 8321 } // namespace dart | 8374 } // namespace dart |
| 8322 | 8375 |
| 8323 #endif // VM_INTERMEDIATE_LANGUAGE_H_ | 8376 #endif // VM_INTERMEDIATE_LANGUAGE_H_ |
| OLD | NEW |