Index: src/hydrogen-instructions.h |
=================================================================== |
--- src/hydrogen-instructions.h (revision 7211) |
+++ src/hydrogen-instructions.h (working copy) |
@@ -122,7 +122,8 @@ |
V(LoadElements) \ |
V(LoadExternalArrayPointer) \ |
V(LoadFunctionPrototype) \ |
- V(LoadGlobal) \ |
+ V(LoadGlobalCell) \ |
+ V(LoadGlobalGeneric) \ |
V(LoadKeyedFastElement) \ |
V(LoadKeyedGeneric) \ |
V(LoadNamedField) \ |
@@ -2785,9 +2786,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); |
@@ -2808,11 +2809,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()); |
} |
@@ -2822,6 +2823,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, |