Index: src/hydrogen-instructions.h |
=================================================================== |
--- src/hydrogen-instructions.h (revision 7468) |
+++ src/hydrogen-instructions.h (working copy) |
@@ -124,7 +124,8 @@ |
V(LoadElements) \ |
V(LoadExternalArrayPointer) \ |
V(LoadFunctionPrototype) \ |
- V(LoadGlobal) \ |
+ V(LoadGlobalCell) \ |
+ V(LoadGlobalGeneric) \ |
V(LoadKeyedFastElement) \ |
V(LoadKeyedGeneric) \ |
V(LoadKeyedSpecializedArrayElement) \ |
@@ -2809,9 +2810,9 @@ |
}; |
-class HLoadGlobal: public HTemplateInstruction<0> { |
+class HLoadGlobalCell: public HTemplateInstruction<0> { |
public: |
- HLoadGlobal(Handle<JSGlobalPropertyCell> cell, bool check_hole_value) |
+ HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, bool check_hole_value) |
: cell_(cell), check_hole_value_(check_hole_value) { |
set_representation(Representation::Tagged()); |
SetFlag(kUseGVN); |
@@ -2832,11 +2833,11 @@ |
return Representation::None(); |
} |
- DECLARE_CONCRETE_INSTRUCTION(LoadGlobal, "load_global") |
+ DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load_global_cell") |
protected: |
virtual bool DataEquals(HValue* other) { |
- HLoadGlobal* b = HLoadGlobal::cast(other); |
+ HLoadGlobalCell* b = HLoadGlobalCell::cast(other); |
return cell_.is_identical_to(b->cell()); |
} |
@@ -2846,6 +2847,38 @@ |
}; |
+class HLoadGlobalGeneric: public HBinaryOperation { |
+ public: |
+ HLoadGlobalGeneric(HValue* context, |
+ HValue* global_object, |
+ Handle<Object> name, |
+ bool for_typeof) |
+ : HBinaryOperation(context, global_object), |
+ name_(name), |
+ for_typeof_(for_typeof) { |
+ set_representation(Representation::Tagged()); |
+ SetAllSideEffects(); |
+ } |
+ |
+ HValue* context() { return OperandAt(0); } |
+ HValue* global_object() { return OperandAt(1); } |
+ Handle<Object> name() const { return name_; } |
+ bool for_typeof() const { return for_typeof_; } |
+ |
+ virtual void PrintDataTo(StringStream* stream); |
+ |
+ virtual Representation RequiredInputRepresentation(int index) const { |
+ return Representation::Tagged(); |
+ } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load_global_generic") |
+ |
+ private: |
+ Handle<Object> name_; |
+ bool for_typeof_; |
+}; |
+ |
+ |
class HStoreGlobal: public HUnaryOperation { |
public: |
HStoreGlobal(HValue* value, |