Index: src/ia32/lithium-ia32.h |
diff --git a/src/ia32/lithium-ia32.h b/src/ia32/lithium-ia32.h |
index 1cdd31ede883dcf08c4ab8a3327c3ba2a05cbd96..17bbd7025b769b6cd1631370ded0dadbb31b4e46 100644 |
--- a/src/ia32/lithium-ia32.h |
+++ b/src/ia32/lithium-ia32.h |
@@ -44,112 +44,115 @@ class LCodeGen; |
// |
// LInstruction |
// LTemplateInstruction |
-// LControlInstruction |
-// LBranch |
-// LClassOfTestAndBranch |
-// LCmpJSObjectEqAndBranch |
-// LCmpIDAndBranch |
-// LHasCachedArrayIndexAndBranch |
-// LHasInstanceTypeAndBranch |
-// LInstanceOfAndBranch |
-// LIsNullAndBranch |
-// LIsObjectAndBranch |
-// LIsSmiAndBranch |
-// LTypeofIsAndBranch |
// LAccessArgumentsAt |
-// LArgumentsElements |
-// LArgumentsLength |
// LAddI |
// LApplyArguments |
+// LArgumentsElements |
+// LArgumentsLength |
// LArithmeticD |
// LArithmeticT |
+// LArrayLiteral |
// LBitI |
+// LBitNotI |
// LBoundsCheck |
-// LCmpID |
-// LCmpJSObjectEq |
-// LCmpT |
-// LDivI |
-// LInstanceOf |
-// LInstanceOfKnownGlobal |
-// LLoadKeyedFastElement |
-// LLoadKeyedGeneric |
-// LModI |
-// LMulI |
-// LPower |
-// LShiftI |
-// LSubI |
// LCallConstantFunction |
// LCallFunction |
// LCallGlobal |
// LCallKeyed |
// LCallKnownGlobal |
// LCallNamed |
+// LCallNew |
// LCallRuntime |
// LCallStub |
+// LCheckFunction |
+// LCheckInstanceType |
+// LCheckMap |
+// LCheckPrototypeMaps |
+// LCheckPrototypeMaps |
+// LCheckSmi |
+// LClassOfTest |
+// LCmpID |
+// LCmpJSObjectEq |
+// LCmpT |
// LConstant |
// LConstantD |
// LConstantI |
// LConstantT |
+// LContext |
+// LControlInstruction |
+// LBranch |
+// LClassOfTestAndBranch |
+// LCmpIDAndBranch |
+// LCmpJSObjectEqAndBranch |
+// LHasCachedArrayIndexAndBranch |
+// LHasInstanceTypeAndBranch |
+// LInstanceOfAndBranch |
+// LIsNullAndBranch |
+// LIsObjectAndBranch |
+// LIsSmiAndBranch |
+// LTypeofIsAndBranch |
+// LDeleteProperty |
// LDeoptimize |
+// LDivI |
+// LDoubleToI |
+// LFixedArrayLength |
// LFunctionLiteral |
// LGap |
// LLabel |
// LGlobalObject |
// LGlobalReceiver |
// LGoto |
-// LLazyBailout |
-// LLoadGlobal |
-// LCheckPrototypeMaps |
-// LLoadContextSlot |
-// LArrayLiteral |
-// LObjectLiteral |
-// LRegExpLiteral |
-// LOsrEntry |
-// LParameter |
-// LRegExpConstructResult |
-// LStackCheck |
-// LStoreKeyed |
-// LStoreKeyedFastElement |
-// LStoreKeyedGeneric |
-// LStoreNamed |
-// LStoreNamedField |
-// LStoreNamedGeneric |
-// LStringCharCodeAt |
-// LBitNotI |
-// LCallNew |
-// LCheckFunction |
-// LCheckPrototypeMaps |
-// LCheckInstanceType |
-// LCheckMap |
-// LCheckSmi |
-// LClassOfTest |
-// LDeleteProperty |
-// LDoubleToI |
-// LFixedArrayLength |
// LHasCachedArrayIndex |
// LHasInstanceType |
+// LInstanceOf |
+// LInstanceOfKnownGlobal |
// LInteger32ToDouble |
// LIsNull |
// LIsObject |
// LIsSmi |
// LJSArrayLength |
+// LLazyBailout |
+// LLoadContextSlot |
+// LLoadFunctionPrototype |
+// LLoadGlobal |
+// LLoadKeyedFastElement |
+// LLoadKeyedGeneric |
// LLoadNamedField |
// LLoadNamedGeneric |
-// LLoadFunctionPrototype |
+// LModI |
+// LMulI |
// LNumberTagD |
// LNumberTagI |
+// LObjectLiteral |
+// LOsrEntry |
+// LOuterContext |
+// LParameter |
+// LPower |
// LPushArgument |
+// LRegExpConstructResult |
+// LRegExpLiteral |
// LReturn |
+// LShiftI |
// LSmiTag |
+// LStackCheck |
+// LSubI |
+// LStoreContextSlot |
// LStoreGlobal |
+// LStoreKeyed |
+// LStoreKeyedFastElement |
+// LStoreKeyedGeneric |
+// LStoreNamed |
+// LStoreNamedField |
+// LStoreNamedGeneric |
+// LStringCharCodeAt |
// LStringLength |
// LTaggedToI |
// LThrow |
// LTypeof |
// LTypeofIs |
// LUnaryMathOperation |
-// LValueOf |
// LUnknownOSRValue |
+// LValueOf |
#define LITHIUM_ALL_INSTRUCTION_LIST(V) \ |
V(ControlInstruction) \ |
@@ -197,6 +200,7 @@ class LCodeGen; |
V(ConstantD) \ |
V(ConstantI) \ |
V(ConstantT) \ |
+ V(Context) \ |
V(DeleteProperty) \ |
V(Deoptimize) \ |
V(DivI) \ |
@@ -241,6 +245,7 @@ class LCodeGen; |
V(NumberUntagD) \ |
V(ObjectLiteral) \ |
V(OsrEntry) \ |
+ V(OuterContext) \ |
V(Parameter) \ |
V(Power) \ |
V(PushArgument) \ |
@@ -250,6 +255,7 @@ class LCodeGen; |
V(SmiTag) \ |
V(SmiUntag) \ |
V(StackCheck) \ |
+ V(StoreContextSlot) \ |
V(StoreGlobal) \ |
V(StoreKeyedFastElement) \ |
V(StoreKeyedGeneric) \ |
@@ -1286,12 +1292,34 @@ class LStoreGlobal: public LTemplateInstruction<0, 1, 0> { |
}; |
-class LLoadContextSlot: public LTemplateInstruction<1, 0, 0> { |
+class LLoadContextSlot: public LTemplateInstruction<1, 1, 0> { |
public: |
+ explicit LLoadContextSlot(LOperand* context) { |
+ inputs_[0] = context; |
+ } |
+ |
DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") |
DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) |
- int context_chain_length() { return hydrogen()->context_chain_length(); } |
+ int slot_index() { return hydrogen()->slot_index(); } |
+ |
+ virtual void PrintDataTo(StringStream* stream); |
+}; |
+ |
+ |
+class LStoreContextSlot: public LTemplateInstruction<0, 2, 1> { |
+ public: |
+ explicit LStoreContextSlot(LOperand* context, |
+ LOperand* value, |
+ LOperand* temp) { |
+ inputs_[0] = context; |
+ inputs_[1] = value; |
+ temps_[0] = temp; |
+ } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot") |
+ DECLARE_HYDROGEN_ACCESSOR(StoreContextSlot) |
+ |
int slot_index() { return hydrogen()->slot_index(); } |
virtual void PrintDataTo(StringStream* stream); |
@@ -1308,14 +1336,38 @@ class LPushArgument: public LTemplateInstruction<0, 1, 0> { |
}; |
-class LGlobalObject: public LTemplateInstruction<1, 0, 0> { |
+class LContext: public LTemplateInstruction<1, 0, 0> { |
public: |
+ DECLARE_CONCRETE_INSTRUCTION(Context, "context") |
+}; |
+ |
+ |
+class LOuterContext: public LTemplateInstruction<1, 1, 0> { |
+ public: |
+ explicit LOuterContext(LOperand* context) { |
+ inputs_[0] = context; |
+ } |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context") |
+}; |
+ |
+ |
+class LGlobalObject: public LTemplateInstruction<1, 1, 0> { |
+ public: |
+ explicit LGlobalObject(LOperand* context) { |
+ inputs_[0] = context; |
+ } |
+ |
DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object") |
}; |
-class LGlobalReceiver: public LTemplateInstruction<1, 0, 0> { |
+class LGlobalReceiver: public LTemplateInstruction<1, 1, 0> { |
public: |
+ explicit LGlobalReceiver(LOperand* global_object) { |
+ inputs_[0] = global_object; |
+ } |
+ |
DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global-receiver") |
}; |