Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index b7e9903f05aa078e458654341a77b464fc231e33..c7838a0eac0816536d5102e8a86432fc78a5a5cf 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -119,6 +119,7 @@ class LChunkBuilder; |
V(LoadFieldByIndex) \ |
V(LoadFunctionPrototype) \ |
V(LoadGlobalGeneric) \ |
+ V(LoadGlobalViaContext) \ |
V(LoadKeyed) \ |
V(LoadKeyedGeneric) \ |
V(LoadNamedField) \ |
@@ -147,6 +148,7 @@ class LChunkBuilder; |
V(StoreCodeEntry) \ |
V(StoreContextSlot) \ |
V(StoreFrameContext) \ |
+ V(StoreGlobalViaContext) \ |
V(StoreKeyed) \ |
V(StoreKeyedGeneric) \ |
V(StoreNamedField) \ |
@@ -5445,6 +5447,39 @@ class HLoadGlobalGeneric final : public HTemplateInstruction<2> { |
}; |
+class HLoadGlobalViaContext final : public HTemplateInstruction<1> { |
+ public: |
+ DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalViaContext, |
+ 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
|
+ |
+ HValue* context() { return OperandAt(0); } |
+ Handle<String> name() const { return name_; } |
+ int depth() const { return depth_; } |
+ int slot_index() const { return slot_index_; } |
+ |
+ std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT |
+ |
+ Representation RequiredInputRepresentation(int index) override { |
+ return Representation::Tagged(); |
+ } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(LoadGlobalViaContext) |
+ |
+ private: |
+ HLoadGlobalViaContext(HValue* context, Handle<String> name, int depth, |
+ int slot_index) |
+ : name_(name), depth_(depth), slot_index_(slot_index) { |
+ SetOperandAt(0, context); |
+ set_representation(Representation::Tagged()); |
+ SetAllSideEffects(); |
+ } |
+ |
+ Handle<String> name_; |
+ int depth_; |
+ int slot_index_; |
+}; |
+ |
+ |
class HAllocate final : public HTemplateInstruction<2> { |
public: |
static bool CompatibleInstanceTypes(InstanceType type1, |
@@ -6979,6 +7014,45 @@ class HStoreNamedGeneric final : public HTemplateInstruction<3> { |
}; |
+class HStoreGlobalViaContext final : public HTemplateInstruction<2> { |
+ public: |
+ DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HStoreGlobalViaContext, |
+ Handle<Name>, HValue*, int, int, |
+ LanguageMode); |
+ HValue* context() const { return OperandAt(0); } |
+ HValue* value() const { return OperandAt(1); } |
+ Handle<Name> name() const { return name_; } |
+ int depth() const { return depth_; } |
+ int slot_index() const { return slot_index_; } |
+ LanguageMode language_mode() const { return language_mode_; } |
+ |
+ std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT |
+ |
+ Representation RequiredInputRepresentation(int index) override { |
+ return Representation::Tagged(); |
+ } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(StoreGlobalViaContext) |
+ |
+ private: |
+ HStoreGlobalViaContext(HValue* context, Handle<Name> name, HValue* value, |
+ int depth, int slot_index, LanguageMode language_mode) |
+ : name_(name), |
+ depth_(depth), |
+ slot_index_(slot_index), |
+ language_mode_(language_mode) { |
+ SetOperandAt(0, context); |
+ SetOperandAt(1, value); |
+ SetAllSideEffects(); |
+ } |
+ |
+ Handle<Name> name_; |
+ int depth_; |
+ int slot_index_; |
+ LanguageMode language_mode_; |
+}; |
+ |
+ |
class HStoreKeyed final : public HTemplateInstruction<3>, |
public ArrayInstructionInterface { |
public: |