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 <cstring> | 8 #include <cstring> |
9 #include <iosfwd> | 9 #include <iosfwd> |
10 | 10 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
112 V(IsConstructCallAndBranch) \ | 112 V(IsConstructCallAndBranch) \ |
113 V(IsObjectAndBranch) \ | 113 V(IsObjectAndBranch) \ |
114 V(IsStringAndBranch) \ | 114 V(IsStringAndBranch) \ |
115 V(IsSmiAndBranch) \ | 115 V(IsSmiAndBranch) \ |
116 V(IsUndetectableAndBranch) \ | 116 V(IsUndetectableAndBranch) \ |
117 V(LeaveInlined) \ | 117 V(LeaveInlined) \ |
118 V(LoadContextSlot) \ | 118 V(LoadContextSlot) \ |
119 V(LoadFieldByIndex) \ | 119 V(LoadFieldByIndex) \ |
120 V(LoadFunctionPrototype) \ | 120 V(LoadFunctionPrototype) \ |
121 V(LoadGlobalGeneric) \ | 121 V(LoadGlobalGeneric) \ |
122 V(LoadGlobalViaContext) \ | |
122 V(LoadKeyed) \ | 123 V(LoadKeyed) \ |
123 V(LoadKeyedGeneric) \ | 124 V(LoadKeyedGeneric) \ |
124 V(LoadNamedField) \ | 125 V(LoadNamedField) \ |
125 V(LoadNamedGeneric) \ | 126 V(LoadNamedGeneric) \ |
126 V(LoadRoot) \ | 127 V(LoadRoot) \ |
127 V(MapEnumLength) \ | 128 V(MapEnumLength) \ |
128 V(MathFloorOfDiv) \ | 129 V(MathFloorOfDiv) \ |
129 V(MathMinMax) \ | 130 V(MathMinMax) \ |
130 V(MaybeGrowElements) \ | 131 V(MaybeGrowElements) \ |
131 V(Mod) \ | 132 V(Mod) \ |
132 V(Mul) \ | 133 V(Mul) \ |
133 V(OsrEntry) \ | 134 V(OsrEntry) \ |
134 V(Parameter) \ | 135 V(Parameter) \ |
135 V(Power) \ | 136 V(Power) \ |
136 V(PushArguments) \ | 137 V(PushArguments) \ |
137 V(RegExpLiteral) \ | 138 V(RegExpLiteral) \ |
138 V(Return) \ | 139 V(Return) \ |
139 V(Ror) \ | 140 V(Ror) \ |
140 V(Sar) \ | 141 V(Sar) \ |
141 V(SeqStringGetChar) \ | 142 V(SeqStringGetChar) \ |
142 V(SeqStringSetChar) \ | 143 V(SeqStringSetChar) \ |
143 V(Shl) \ | 144 V(Shl) \ |
144 V(Shr) \ | 145 V(Shr) \ |
145 V(Simulate) \ | 146 V(Simulate) \ |
146 V(StackCheck) \ | 147 V(StackCheck) \ |
147 V(StoreCodeEntry) \ | 148 V(StoreCodeEntry) \ |
148 V(StoreContextSlot) \ | 149 V(StoreContextSlot) \ |
149 V(StoreFrameContext) \ | 150 V(StoreFrameContext) \ |
151 V(StoreGlobalViaContext) \ | |
150 V(StoreKeyed) \ | 152 V(StoreKeyed) \ |
151 V(StoreKeyedGeneric) \ | 153 V(StoreKeyedGeneric) \ |
152 V(StoreNamedField) \ | 154 V(StoreNamedField) \ |
153 V(StoreNamedGeneric) \ | 155 V(StoreNamedGeneric) \ |
154 V(StringAdd) \ | 156 V(StringAdd) \ |
155 V(StringCharCodeAt) \ | 157 V(StringCharCodeAt) \ |
156 V(StringCharFromCode) \ | 158 V(StringCharFromCode) \ |
157 V(StringCompareAndBranch) \ | 159 V(StringCompareAndBranch) \ |
158 V(Sub) \ | 160 V(Sub) \ |
159 V(ThisFunction) \ | 161 V(ThisFunction) \ |
(...skipping 5278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5438 SetAllSideEffects(); | 5440 SetAllSideEffects(); |
5439 } | 5441 } |
5440 | 5442 |
5441 Handle<String> name_; | 5443 Handle<String> name_; |
5442 TypeofMode typeof_mode_; | 5444 TypeofMode typeof_mode_; |
5443 Handle<TypeFeedbackVector> feedback_vector_; | 5445 Handle<TypeFeedbackVector> feedback_vector_; |
5444 FeedbackVectorICSlot slot_; | 5446 FeedbackVectorICSlot slot_; |
5445 }; | 5447 }; |
5446 | 5448 |
5447 | 5449 |
5450 class HLoadGlobalViaContext final : public HTemplateInstruction<1> { | |
5451 public: | |
5452 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalViaContext, | |
5453 Handle<String>, int, int); | |
Jakob Kummerow
2015/07/19 10:34:53
s/Handle<String>/Handle<Name>/ here and below? Sin
Igor Sheludko
2015/07/20 08:42:00
This operation is about writing to global via vari
| |
5454 | |
5455 HValue* context() { return OperandAt(0); } | |
5456 Handle<String> name() const { return name_; } | |
5457 int depth() const { return depth_; } | |
5458 int slot_index() const { return slot_index_; } | |
5459 | |
5460 std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT | |
5461 | |
5462 Representation RequiredInputRepresentation(int index) override { | |
5463 return Representation::Tagged(); | |
5464 } | |
5465 | |
5466 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalViaContext) | |
5467 | |
5468 private: | |
5469 HLoadGlobalViaContext(HValue* context, Handle<String> name, int depth, | |
5470 int slot_index) | |
5471 : name_(name), depth_(depth), slot_index_(slot_index) { | |
5472 SetOperandAt(0, context); | |
5473 set_representation(Representation::Tagged()); | |
5474 SetAllSideEffects(); | |
5475 } | |
5476 | |
5477 Handle<String> name_; | |
5478 int depth_; | |
5479 int slot_index_; | |
5480 }; | |
5481 | |
5482 | |
5448 class HAllocate final : public HTemplateInstruction<2> { | 5483 class HAllocate final : public HTemplateInstruction<2> { |
5449 public: | 5484 public: |
5450 static bool CompatibleInstanceTypes(InstanceType type1, | 5485 static bool CompatibleInstanceTypes(InstanceType type1, |
5451 InstanceType type2) { | 5486 InstanceType type2) { |
5452 return ComputeFlags(TENURED, type1) == ComputeFlags(TENURED, type2) && | 5487 return ComputeFlags(TENURED, type1) == ComputeFlags(TENURED, type2) && |
5453 ComputeFlags(NOT_TENURED, type1) == ComputeFlags(NOT_TENURED, type2); | 5488 ComputeFlags(NOT_TENURED, type1) == ComputeFlags(NOT_TENURED, type2); |
5454 } | 5489 } |
5455 | 5490 |
5456 static HAllocate* New( | 5491 static HAllocate* New( |
5457 Isolate* isolate, Zone* zone, HValue* context, HValue* size, HType type, | 5492 Isolate* isolate, Zone* zone, HValue* context, HValue* size, HType type, |
(...skipping 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6972 } | 7007 } |
6973 | 7008 |
6974 Handle<Name> name_; | 7009 Handle<Name> name_; |
6975 Handle<TypeFeedbackVector> feedback_vector_; | 7010 Handle<TypeFeedbackVector> feedback_vector_; |
6976 FeedbackVectorICSlot slot_; | 7011 FeedbackVectorICSlot slot_; |
6977 LanguageMode language_mode_; | 7012 LanguageMode language_mode_; |
6978 InlineCacheState initialization_state_; | 7013 InlineCacheState initialization_state_; |
6979 }; | 7014 }; |
6980 | 7015 |
6981 | 7016 |
7017 class HStoreGlobalViaContext final : public HTemplateInstruction<2> { | |
7018 public: | |
7019 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HStoreGlobalViaContext, | |
7020 Handle<Name>, HValue*, int, int, | |
7021 LanguageMode); | |
7022 HValue* context() const { return OperandAt(0); } | |
7023 HValue* value() const { return OperandAt(1); } | |
7024 Handle<Name> name() const { return name_; } | |
7025 int depth() const { return depth_; } | |
7026 int slot_index() const { return slot_index_; } | |
7027 LanguageMode language_mode() const { return language_mode_; } | |
7028 | |
7029 std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT | |
7030 | |
7031 Representation RequiredInputRepresentation(int index) override { | |
7032 return Representation::Tagged(); | |
7033 } | |
7034 | |
7035 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalViaContext) | |
7036 | |
7037 private: | |
7038 HStoreGlobalViaContext(HValue* context, Handle<Name> name, HValue* value, | |
7039 int depth, int slot_index, LanguageMode language_mode) | |
7040 : name_(name), | |
7041 depth_(depth), | |
7042 slot_index_(slot_index), | |
7043 language_mode_(language_mode) { | |
7044 SetOperandAt(0, context); | |
7045 SetOperandAt(1, value); | |
7046 SetAllSideEffects(); | |
7047 } | |
7048 | |
7049 Handle<Name> name_; | |
7050 int depth_; | |
7051 int slot_index_; | |
7052 LanguageMode language_mode_; | |
7053 }; | |
7054 | |
7055 | |
6982 class HStoreKeyed final : public HTemplateInstruction<3>, | 7056 class HStoreKeyed final : public HTemplateInstruction<3>, |
6983 public ArrayInstructionInterface { | 7057 public ArrayInstructionInterface { |
6984 public: | 7058 public: |
6985 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, | 7059 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, |
6986 ElementsKind); | 7060 ElementsKind); |
6987 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, | 7061 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, |
6988 ElementsKind, StoreFieldOrKeyedMode); | 7062 ElementsKind, StoreFieldOrKeyedMode); |
6989 DECLARE_INSTRUCTION_FACTORY_P6(HStoreKeyed, HValue*, HValue*, HValue*, | 7063 DECLARE_INSTRUCTION_FACTORY_P6(HStoreKeyed, HValue*, HValue*, HValue*, |
6990 ElementsKind, StoreFieldOrKeyedMode, int); | 7064 ElementsKind, StoreFieldOrKeyedMode, int); |
6991 | 7065 |
(...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7968 }; | 8042 }; |
7969 | 8043 |
7970 | 8044 |
7971 | 8045 |
7972 #undef DECLARE_INSTRUCTION | 8046 #undef DECLARE_INSTRUCTION |
7973 #undef DECLARE_CONCRETE_INSTRUCTION | 8047 #undef DECLARE_CONCRETE_INSTRUCTION |
7974 | 8048 |
7975 } } // namespace v8::internal | 8049 } } // namespace v8::internal |
7976 | 8050 |
7977 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 8051 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |