OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ | 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ |
6 #define V8_HYDROGEN_INSTRUCTIONS_H_ | 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ |
7 | 7 |
8 #include "v8.h" | 8 #include "v8.h" |
9 | 9 |
10 #include "allocation.h" | 10 #include "allocation.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 | 44 |
45 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \ | 45 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \ |
46 V(AbnormalExit) \ | 46 V(AbnormalExit) \ |
47 V(AccessArgumentsAt) \ | 47 V(AccessArgumentsAt) \ |
48 V(Add) \ | 48 V(Add) \ |
49 V(Allocate) \ | 49 V(Allocate) \ |
50 V(ApplyArguments) \ | 50 V(ApplyArguments) \ |
51 V(ArgumentsElements) \ | 51 V(ArgumentsElements) \ |
52 V(ArgumentsLength) \ | 52 V(ArgumentsLength) \ |
53 V(ArgumentsObject) \ | 53 V(ArgumentsObject) \ |
54 V(ArrayShift) \ | |
55 V(Bitwise) \ | 54 V(Bitwise) \ |
56 V(BlockEntry) \ | 55 V(BlockEntry) \ |
57 V(BoundsCheck) \ | 56 V(BoundsCheck) \ |
58 V(BoundsCheckBaseIndexInformation) \ | 57 V(BoundsCheckBaseIndexInformation) \ |
59 V(Branch) \ | 58 V(Branch) \ |
60 V(CallWithDescriptor) \ | 59 V(CallWithDescriptor) \ |
61 V(CallJSFunction) \ | 60 V(CallJSFunction) \ |
62 V(CallFunction) \ | 61 V(CallFunction) \ |
63 V(CallNew) \ | 62 V(CallNew) \ |
64 V(CallNewArray) \ | 63 V(CallNewArray) \ |
(...skipping 7018 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7083 set_representation(Representation::Tagged()); | 7082 set_representation(Representation::Tagged()); |
7084 } | 7083 } |
7085 | 7084 |
7086 Unique<Map> original_map_; | 7085 Unique<Map> original_map_; |
7087 Unique<Map> transitioned_map_; | 7086 Unique<Map> transitioned_map_; |
7088 ElementsKind from_kind_; | 7087 ElementsKind from_kind_; |
7089 ElementsKind to_kind_; | 7088 ElementsKind to_kind_; |
7090 }; | 7089 }; |
7091 | 7090 |
7092 | 7091 |
7093 class HArrayShift V8_FINAL : public HTemplateInstruction<2> { | |
7094 public: | |
7095 static HArrayShift* New(Zone* zone, | |
7096 HValue* context, | |
7097 HValue* object, | |
7098 ElementsKind kind) { | |
7099 return new(zone) HArrayShift(context, object, kind); | |
7100 } | |
7101 | |
7102 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | |
7103 return Representation::Tagged(); | |
7104 } | |
7105 | |
7106 HValue* context() const { return OperandAt(0); } | |
7107 HValue* object() const { return OperandAt(1); } | |
7108 ElementsKind kind() const { return kind_; } | |
7109 | |
7110 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | |
7111 | |
7112 DECLARE_CONCRETE_INSTRUCTION(ArrayShift); | |
7113 | |
7114 protected: | |
7115 virtual bool DataEquals(HValue* other) V8_OVERRIDE { | |
7116 HArrayShift* that = HArrayShift::cast(other); | |
7117 return this->kind_ == that->kind_; | |
7118 } | |
7119 | |
7120 private: | |
7121 HArrayShift(HValue* context, HValue* object, ElementsKind kind) | |
7122 : kind_(kind) { | |
7123 SetOperandAt(0, context); | |
7124 SetOperandAt(1, object); | |
7125 SetChangesFlag(kArrayLengths); | |
7126 SetChangesFlag(kNewSpacePromotion); | |
7127 set_representation(Representation::Tagged()); | |
7128 if (IsFastSmiOrObjectElementsKind(kind)) { | |
7129 SetChangesFlag(kArrayElements); | |
7130 } else { | |
7131 SetChangesFlag(kDoubleArrayElements); | |
7132 } | |
7133 } | |
7134 | |
7135 ElementsKind kind_; | |
7136 }; | |
7137 | |
7138 | |
7139 class HStringAdd V8_FINAL : public HBinaryOperation { | 7092 class HStringAdd V8_FINAL : public HBinaryOperation { |
7140 public: | 7093 public: |
7141 static HInstruction* New(Zone* zone, | 7094 static HInstruction* New(Zone* zone, |
7142 HValue* context, | 7095 HValue* context, |
7143 HValue* left, | 7096 HValue* left, |
7144 HValue* right, | 7097 HValue* right, |
7145 PretenureFlag pretenure_flag = NOT_TENURED, | 7098 PretenureFlag pretenure_flag = NOT_TENURED, |
7146 StringAddFlags flags = STRING_ADD_CHECK_BOTH, | 7099 StringAddFlags flags = STRING_ADD_CHECK_BOTH, |
7147 Handle<AllocationSite> allocation_site = | 7100 Handle<AllocationSite> allocation_site = |
7148 Handle<AllocationSite>::null()); | 7101 Handle<AllocationSite>::null()); |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7717 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 7670 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
7718 }; | 7671 }; |
7719 | 7672 |
7720 | 7673 |
7721 #undef DECLARE_INSTRUCTION | 7674 #undef DECLARE_INSTRUCTION |
7722 #undef DECLARE_CONCRETE_INSTRUCTION | 7675 #undef DECLARE_CONCRETE_INSTRUCTION |
7723 | 7676 |
7724 } } // namespace v8::internal | 7677 } } // namespace v8::internal |
7725 | 7678 |
7726 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7679 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |