| 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")
 | 
|  };
 | 
|  
 | 
| 
 |