| 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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 V(_Double, truncateToDouble, DoubleTruncate, 1804056693) \ | 73 V(_Double, truncateToDouble, DoubleTruncate, 1804056693) \ |
| 74 V(_Double, roundToDouble, DoubleRound, 1804056693) \ | 74 V(_Double, roundToDouble, DoubleRound, 1804056693) \ |
| 75 V(_Double, floorToDouble, DoubleFloor, 1804056693) \ | 75 V(_Double, floorToDouble, DoubleFloor, 1804056693) \ |
| 76 V(_Double, ceilToDouble, DoubleCeil, 1804056693) \ | 76 V(_Double, ceilToDouble, DoubleCeil, 1804056693) \ |
| 77 V(_Double, pow, DoublePow, 102305574) \ | 77 V(_Double, pow, DoublePow, 102305574) \ |
| 78 V(_Double, _modulo, DoubleMod, 663439671) \ | 78 V(_Double, _modulo, DoubleMod, 663439671) \ |
| 79 V(::, sqrt, MathSqrt, 1662640002) \ | 79 V(::, sqrt, MathSqrt, 1662640002) \ |
| 80 V(Float32x4, Float32x4., Float32x4Constructor, 1492157358) \ | 80 V(Float32x4, Float32x4., Float32x4Constructor, 1492157358) \ |
| 81 V(Float32x4, Float32x4.zero, Float32x4Zero, 444339161) \ | 81 V(Float32x4, Float32x4.zero, Float32x4Zero, 444339161) \ |
| 82 V(Float32x4, Float32x4.splat, Float32x4Splat, 1843231403) \ | 82 V(Float32x4, Float32x4.splat, Float32x4Splat, 1843231403) \ |
| 83 V(_Float32x4, get:xxxx, Float32x4ShuffleXXXX, 42621627) \ | 83 V(_Float32x4, _shuffle, Float32x4Shuffle, 1618450134) \ |
| 84 V(_Float32x4, get:yyyy, Float32x4ShuffleYYYY, 42621627) \ | |
| 85 V(_Float32x4, get:zzzz, Float32x4ShuffleZZZZ, 42621627) \ | |
| 86 V(_Float32x4, get:wwww, Float32x4ShuffleWWWW, 42621627) \ | |
| 87 V(_Float32x4, get:x, Float32x4ShuffleX, 211144022) \ | 84 V(_Float32x4, get:x, Float32x4ShuffleX, 211144022) \ |
| 88 V(_Float32x4, get:y, Float32x4ShuffleY, 211144022) \ | 85 V(_Float32x4, get:y, Float32x4ShuffleY, 211144022) \ |
| 89 V(_Float32x4, get:z, Float32x4ShuffleZ, 211144022) \ | 86 V(_Float32x4, get:z, Float32x4ShuffleZ, 211144022) \ |
| 90 V(_Float32x4, get:w, Float32x4ShuffleW, 211144022) \ | 87 V(_Float32x4, get:w, Float32x4ShuffleW, 211144022) \ |
| 91 V(_Float32x4, _cmpequal, Float32x4Equal, 2103153736) \ | 88 V(_Float32x4, _cmpequal, Float32x4Equal, 2103153736) \ |
| 92 V(_Float32x4, _cmpgt, Float32x4GreaterThan, 2103153736) \ | 89 V(_Float32x4, _cmpgt, Float32x4GreaterThan, 2103153736) \ |
| 93 V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 2103153736) \ | 90 V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 2103153736) \ |
| 94 V(_Float32x4, _cmplt, Float32x4LessThan, 2103153736) \ | 91 V(_Float32x4, _cmplt, Float32x4LessThan, 2103153736) \ |
| 95 V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 2103153736) \ | 92 V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 2103153736) \ |
| 96 V(_Float32x4, _cmpnequal, Float32x4NotEqual, 2103153736) \ | 93 V(_Float32x4, _cmpnequal, Float32x4NotEqual, 2103153736) \ |
| (...skipping 4644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4741 private: | 4738 private: |
| 4742 const Token::Kind op_kind_; | 4739 const Token::Kind op_kind_; |
| 4743 | 4740 |
| 4744 DISALLOW_COPY_AND_ASSIGN(BinaryFloat32x4OpInstr); | 4741 DISALLOW_COPY_AND_ASSIGN(BinaryFloat32x4OpInstr); |
| 4745 }; | 4742 }; |
| 4746 | 4743 |
| 4747 | 4744 |
| 4748 class Float32x4ShuffleInstr : public TemplateDefinition<1> { | 4745 class Float32x4ShuffleInstr : public TemplateDefinition<1> { |
| 4749 public: | 4746 public: |
| 4750 Float32x4ShuffleInstr(MethodRecognizer::Kind op_kind, Value* value, | 4747 Float32x4ShuffleInstr(MethodRecognizer::Kind op_kind, Value* value, |
| 4748 intptr_t mask, |
| 4751 intptr_t deopt_id) | 4749 intptr_t deopt_id) |
| 4752 : op_kind_(op_kind) { | 4750 : op_kind_(op_kind), mask_(mask) { |
| 4753 SetInputAt(0, value); | 4751 SetInputAt(0, value); |
| 4754 deopt_id_ = deopt_id; | 4752 deopt_id_ = deopt_id; |
| 4755 } | 4753 } |
| 4756 | 4754 |
| 4757 Value* value() const { return inputs_[0]; } | 4755 Value* value() const { return inputs_[0]; } |
| 4758 | 4756 |
| 4759 MethodRecognizer::Kind op_kind() const { return op_kind_; } | 4757 MethodRecognizer::Kind op_kind() const { return op_kind_; } |
| 4760 | 4758 |
| 4759 intptr_t mask() const { return mask_; } |
| 4760 |
| 4761 virtual void PrintOperandsTo(BufferFormatter* f) const; | 4761 virtual void PrintOperandsTo(BufferFormatter* f) const; |
| 4762 | 4762 |
| 4763 virtual bool CanDeoptimize() const { return false; } | 4763 virtual bool CanDeoptimize() const { return false; } |
| 4764 | 4764 |
| 4765 virtual Representation representation() const { | 4765 virtual Representation representation() const { |
| 4766 if ((op_kind_ == MethodRecognizer::kFloat32x4ShuffleX) || | 4766 if ((op_kind_ == MethodRecognizer::kFloat32x4ShuffleX) || |
| 4767 (op_kind_ == MethodRecognizer::kFloat32x4ShuffleY) || | 4767 (op_kind_ == MethodRecognizer::kFloat32x4ShuffleY) || |
| 4768 (op_kind_ == MethodRecognizer::kFloat32x4ShuffleZ) || | 4768 (op_kind_ == MethodRecognizer::kFloat32x4ShuffleZ) || |
| 4769 (op_kind_ == MethodRecognizer::kFloat32x4ShuffleW)) { | 4769 (op_kind_ == MethodRecognizer::kFloat32x4ShuffleW)) { |
| 4770 return kUnboxedDouble; | 4770 return kUnboxedDouble; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4783 return deopt_id_; | 4783 return deopt_id_; |
| 4784 } | 4784 } |
| 4785 | 4785 |
| 4786 DECLARE_INSTRUCTION(Float32x4Shuffle) | 4786 DECLARE_INSTRUCTION(Float32x4Shuffle) |
| 4787 virtual CompileType ComputeType() const; | 4787 virtual CompileType ComputeType() const; |
| 4788 | 4788 |
| 4789 virtual bool AllowsCSE() const { return true; } | 4789 virtual bool AllowsCSE() const { return true; } |
| 4790 virtual EffectSet Effects() const { return EffectSet::None(); } | 4790 virtual EffectSet Effects() const { return EffectSet::None(); } |
| 4791 virtual EffectSet Dependencies() const { return EffectSet::None(); } | 4791 virtual EffectSet Dependencies() const { return EffectSet::None(); } |
| 4792 virtual bool AttributesEqual(Instruction* other) const { | 4792 virtual bool AttributesEqual(Instruction* other) const { |
| 4793 return op_kind() == other->AsFloat32x4Shuffle()->op_kind(); | 4793 return op_kind() == other->AsFloat32x4Shuffle()->op_kind() && |
| 4794 mask() == other->AsFloat32x4Shuffle()->mask(); |
| 4794 } | 4795 } |
| 4795 | 4796 |
| 4796 virtual bool MayThrow() const { return false; } | 4797 virtual bool MayThrow() const { return false; } |
| 4797 | 4798 |
| 4798 private: | 4799 private: |
| 4799 const MethodRecognizer::Kind op_kind_; | 4800 const MethodRecognizer::Kind op_kind_; |
| 4801 const intptr_t mask_; |
| 4800 | 4802 |
| 4801 DISALLOW_COPY_AND_ASSIGN(Float32x4ShuffleInstr); | 4803 DISALLOW_COPY_AND_ASSIGN(Float32x4ShuffleInstr); |
| 4802 }; | 4804 }; |
| 4803 | 4805 |
| 4804 | 4806 |
| 4805 class Float32x4ConstructorInstr : public TemplateDefinition<4> { | 4807 class Float32x4ConstructorInstr : public TemplateDefinition<4> { |
| 4806 public: | 4808 public: |
| 4807 Float32x4ConstructorInstr(Value* value0, Value* value1, Value* value2, | 4809 Float32x4ConstructorInstr(Value* value0, Value* value1, Value* value2, |
| 4808 Value* value3, intptr_t deopt_id) { | 4810 Value* value3, intptr_t deopt_id) { |
| 4809 SetInputAt(0, value0); | 4811 SetInputAt(0, value0); |
| (...skipping 1681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6491 ForwardInstructionIterator* current_iterator_; | 6493 ForwardInstructionIterator* current_iterator_; |
| 6492 | 6494 |
| 6493 private: | 6495 private: |
| 6494 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); | 6496 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); |
| 6495 }; | 6497 }; |
| 6496 | 6498 |
| 6497 | 6499 |
| 6498 } // namespace dart | 6500 } // namespace dart |
| 6499 | 6501 |
| 6500 #endif // VM_INTERMEDIATE_LANGUAGE_H_ | 6502 #endif // VM_INTERMEDIATE_LANGUAGE_H_ |
| OLD | NEW |