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