| Index: src/x64/lithium-x64.h
|
| diff --git a/src/x64/lithium-x64.h b/src/x64/lithium-x64.h
|
| index b570672f682e0abcffaa7713f6fa0f0799ec627a..ef001b1c4e11fbd71c3af88960ffd9053659db2f 100644
|
| --- a/src/x64/lithium-x64.h
|
| +++ b/src/x64/lithium-x64.h
|
| @@ -423,11 +423,17 @@ class LParameter: public LTemplateInstruction<1, 0, 0> {
|
| };
|
|
|
|
|
| -class LCallStub: public LTemplateInstruction<1, 0, 0> {
|
| +class LCallStub: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LCallStub(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub")
|
| DECLARE_HYDROGEN_ACCESSOR(CallStub)
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| +
|
| TranscendentalCache::Type transcendental_type() {
|
| return hydrogen()->transcendental_type();
|
| }
|
| @@ -571,12 +577,16 @@ class LCmpIDAndBranch: public LControlInstruction<2, 0> {
|
| };
|
|
|
|
|
| -class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> {
|
| +class LUnaryMathOperation: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LUnaryMathOperation(LOperand* value) {
|
| + LUnaryMathOperation(LOperand* context, LOperand* value) {
|
| + inputs_[1] = context;
|
| inputs_[0] = value;
|
| }
|
|
|
| + LOperand* context() { return inputs_[1]; }
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation")
|
| DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
|
|
|
| @@ -720,13 +730,18 @@ class LClassOfTestAndBranch: public LControlInstruction<1, 1> {
|
| };
|
|
|
|
|
| -class LCmpT: public LTemplateInstruction<1, 2, 0> {
|
| +class LCmpT: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LCmpT(LOperand* left, LOperand* right) {
|
| - inputs_[0] = left;
|
| - inputs_[1] = right;
|
| + LCmpT(LOperand* context, LOperand* left, LOperand* right) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = left;
|
| + inputs_[2] = right;
|
| }
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* left() { return inputs_[1]; }
|
| + LOperand* right() { return inputs_[2]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
|
| DECLARE_HYDROGEN_ACCESSOR(CompareGeneric)
|
|
|
| @@ -734,38 +749,49 @@ class LCmpT: public LTemplateInstruction<1, 2, 0> {
|
| };
|
|
|
|
|
| -class LIn: public LTemplateInstruction<1, 2, 0> {
|
| +class LIn: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LIn(LOperand* key, LOperand* object) {
|
| - inputs_[0] = key;
|
| - inputs_[1] = object;
|
| + LIn(LOperand* context, LOperand* key, LOperand* object) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = key;
|
| + inputs_[2] = object;
|
| }
|
|
|
| - LOperand* key() { return inputs_[0]; }
|
| - LOperand* object() { return inputs_[1]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* key() { return inputs_[1]; }
|
| + LOperand* object() { return inputs_[2]; }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(In, "in")
|
| };
|
|
|
|
|
| -class LInstanceOf: public LTemplateInstruction<1, 2, 0> {
|
| +class LInstanceOf: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LInstanceOf(LOperand* left, LOperand* right) {
|
| - inputs_[0] = left;
|
| - inputs_[1] = right;
|
| + LInstanceOf(LOperand* context, LOperand* left, LOperand* right) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = left;
|
| + inputs_[2] = right;
|
| }
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* left() { return inputs_[1]; }
|
| + LOperand* right() { return inputs_[2]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of")
|
| };
|
|
|
|
|
| -class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 1, 1> {
|
| +class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 2, 1> {
|
| public:
|
| - LInstanceOfKnownGlobal(LOperand* value, LOperand* temp) {
|
| - inputs_[0] = value;
|
| + LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = value;
|
| temps_[0] = temp;
|
| }
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* value() { return inputs_[1]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal,
|
| "instance-of-known-global")
|
| DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal)
|
| @@ -946,12 +972,16 @@ class LValueOf: public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LThrow: public LTemplateInstruction<0, 1, 0> {
|
| +class LThrow: public LTemplateInstruction<0, 2, 0> {
|
| public:
|
| - explicit LThrow(LOperand* value) {
|
| - inputs_[0] = value;
|
| + LThrow(LOperand* context, LOperand* value) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = value;
|
| }
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* value() { return inputs_[1]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(Throw, "throw")
|
| };
|
|
|
| @@ -1009,12 +1039,16 @@ class LArithmeticD: public LTemplateInstruction<1, 2, 0> {
|
| };
|
|
|
|
|
| -class LArithmeticT: public LTemplateInstruction<1, 2, 0> {
|
| +class LArithmeticT: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LArithmeticT(Token::Value op, LOperand* left, LOperand* right)
|
| + LArithmeticT(Token::Value op,
|
| + LOperand* context,
|
| + LOperand* left,
|
| + LOperand* right)
|
| : op_(op) {
|
| - inputs_[0] = left;
|
| - inputs_[1] = right;
|
| + inputs_[0] = context;
|
| + inputs_[1] = left;
|
| + inputs_[2] = right;
|
| }
|
|
|
| virtual Opcode opcode() const { return LInstruction::kArithmeticT; }
|
| @@ -1022,6 +1056,9 @@ class LArithmeticT: public LTemplateInstruction<1, 2, 0> {
|
| virtual const char* Mnemonic() const;
|
|
|
| Token::Value op() const { return op_; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* left() { return inputs_[1]; }
|
| + LOperand* right() { return inputs_[2]; }
|
|
|
| private:
|
| Token::Value op_;
|
| @@ -1049,29 +1086,33 @@ class LLoadNamedField: public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 1, 0> {
|
| +class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LLoadNamedFieldPolymorphic(LOperand* object) {
|
| - inputs_[0] = object;
|
| + LLoadNamedFieldPolymorphic(LOperand* context, LOperand* object) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = object;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic")
|
| DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic)
|
|
|
| - LOperand* object() { return inputs_[0]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* object() { return inputs_[1]; }
|
| };
|
|
|
|
|
| -class LLoadNamedGeneric: public LTemplateInstruction<1, 1, 0> {
|
| +class LLoadNamedGeneric: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LLoadNamedGeneric(LOperand* object) {
|
| - inputs_[0] = object;
|
| + LLoadNamedGeneric(LOperand* context, LOperand* object) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = object;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic")
|
| DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric)
|
|
|
| - LOperand* object() { return inputs_[0]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* object() { return inputs_[1]; }
|
| Handle<Object> name() const { return hydrogen()->name(); }
|
| };
|
|
|
| @@ -1161,17 +1202,19 @@ class LLoadKeyedSpecializedArrayElement: public LTemplateInstruction<1, 2, 0> {
|
| };
|
|
|
|
|
| -class LLoadKeyedGeneric: public LTemplateInstruction<1, 2, 0> {
|
| +class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LLoadKeyedGeneric(LOperand* obj, LOperand* key) {
|
| - inputs_[0] = obj;
|
| - inputs_[1] = key;
|
| + LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = obj;
|
| + inputs_[2] = key;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic")
|
|
|
| - LOperand* object() { return inputs_[0]; }
|
| - LOperand* key() { return inputs_[1]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* object() { return inputs_[1]; }
|
| + LOperand* key() { return inputs_[2]; }
|
| };
|
|
|
|
|
| @@ -1182,16 +1225,18 @@ class LLoadGlobalCell: public LTemplateInstruction<1, 0, 0> {
|
| };
|
|
|
|
|
| -class LLoadGlobalGeneric: public LTemplateInstruction<1, 1, 0> {
|
| +class LLoadGlobalGeneric: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LLoadGlobalGeneric(LOperand* global_object) {
|
| - inputs_[0] = global_object;
|
| + explicit LLoadGlobalGeneric(LOperand* context, LOperand* global_object) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = global_object;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic")
|
| DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric)
|
|
|
| - LOperand* global_object() { return inputs_[0]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* global_object() { return inputs_[1]; }
|
| Handle<Object> name() const { return hydrogen()->name(); }
|
| bool for_typeof() const { return hydrogen()->for_typeof(); }
|
| };
|
| @@ -1204,25 +1249,30 @@ class LStoreGlobalCell: public LTemplateInstruction<0, 1, 1> {
|
| temps_[0] = temp;
|
| }
|
|
|
| + LOperand* value() { return inputs_[0]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell")
|
| DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell)
|
| };
|
|
|
|
|
| -class LStoreGlobalGeneric: public LTemplateInstruction<0, 2, 0> {
|
| +class LStoreGlobalGeneric: public LTemplateInstruction<0, 3, 0> {
|
| public:
|
| - explicit LStoreGlobalGeneric(LOperand* global_object,
|
| + explicit LStoreGlobalGeneric(LOperand* context,
|
| + LOperand* global_object,
|
| LOperand* value) {
|
| - inputs_[0] = global_object;
|
| - inputs_[1] = value;
|
| + inputs_[0] = context;
|
| + inputs_[1] = global_object;
|
| + inputs_[2] = value;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic")
|
| DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric)
|
|
|
| - LOperand* global_object() { return InputAt(0); }
|
| + LOperand* context() { return InputAt(0); }
|
| + LOperand* global_object() { return InputAt(1); }
|
| Handle<Object> name() const { return hydrogen()->name(); }
|
| - LOperand* value() { return InputAt(1); }
|
| + LOperand* value() { return InputAt(2); }
|
| bool strict_mode() { return hydrogen()->strict_mode(); }
|
| };
|
|
|
| @@ -1296,9 +1346,15 @@ class LOuterContext: public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LGlobalObject: public LTemplateInstruction<1, 0, 0> {
|
| +class LGlobalObject: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LGlobalObject(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object")
|
| +
|
| + LOperand* context() { return InputAt(0); }
|
| };
|
|
|
|
|
| @@ -1326,16 +1382,18 @@ class LCallConstantFunction: public LTemplateInstruction<1, 0, 0> {
|
| };
|
|
|
|
|
| -class LInvokeFunction: public LTemplateInstruction<1, 1, 0> {
|
| +class LInvokeFunction: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LInvokeFunction(LOperand* function) {
|
| - inputs_[0] = function;
|
| + explicit LInvokeFunction(LOperand* context, LOperand* function) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = function;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function")
|
| DECLARE_HYDROGEN_ACCESSOR(InvokeFunction)
|
|
|
| - LOperand* function() { return inputs_[0]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* function() { return inputs_[1]; }
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| @@ -1343,16 +1401,18 @@ class LInvokeFunction: public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LCallKeyed: public LTemplateInstruction<1, 1, 0> {
|
| +class LCallKeyed: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LCallKeyed(LOperand* key) {
|
| - inputs_[0] = key;
|
| + explicit LCallKeyed(LOperand* context, LOperand* key) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = key;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed")
|
| DECLARE_HYDROGEN_ACCESSOR(CallKeyed)
|
|
|
| - LOperand* key() { return inputs_[0]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* key() { return inputs_[1]; }
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| @@ -1360,36 +1420,49 @@ class LCallKeyed: public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LCallNamed: public LTemplateInstruction<1, 0, 0> {
|
| +class LCallNamed: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LCallNamed(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named")
|
| DECLARE_HYDROGEN_ACCESSOR(CallNamed)
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| Handle<String> name() const { return hydrogen()->name(); }
|
| int arity() const { return hydrogen()->argument_count() - 1; }
|
| };
|
|
|
|
|
| -class LCallFunction: public LTemplateInstruction<1, 0, 0> {
|
| +class LCallFunction: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| - LCallFunction() {}
|
| + explicit LCallFunction(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function")
|
| DECLARE_HYDROGEN_ACCESSOR(CallFunction)
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| int arity() const { return hydrogen()->argument_count() - 2; }
|
| };
|
|
|
|
|
| -class LCallGlobal: public LTemplateInstruction<1, 0, 0> {
|
| +class LCallGlobal: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LCallGlobal(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global")
|
| DECLARE_HYDROGEN_ACCESSOR(CallGlobal)
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| Handle<String> name() const {return hydrogen()->name(); }
|
| int arity() const { return hydrogen()->argument_count() - 1; }
|
| };
|
| @@ -1407,10 +1480,11 @@ class LCallKnownGlobal: public LTemplateInstruction<1, 0, 0> {
|
| };
|
|
|
|
|
| -class LCallNew: public LTemplateInstruction<1, 1, 0> {
|
| +class LCallNew: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LCallNew(LOperand* constructor) {
|
| - inputs_[0] = constructor;
|
| + LCallNew(LOperand* context, LOperand* constructor) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = constructor;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new")
|
| @@ -1418,15 +1492,21 @@ class LCallNew: public LTemplateInstruction<1, 1, 0> {
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* constructor() { return inputs_[1]; }
|
| int arity() const { return hydrogen()->argument_count() - 1; }
|
| };
|
|
|
|
|
| -class LCallRuntime: public LTemplateInstruction<1, 0, 0> {
|
| +class LCallRuntime: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LCallRuntime(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
|
| DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| const Runtime::Function* function() const { return hydrogen()->function(); }
|
| int arity() const { return hydrogen()->argument_count(); }
|
| };
|
| @@ -1553,11 +1633,12 @@ class LStoreNamedField: public LTemplateInstruction<0, 2, 1> {
|
| };
|
|
|
|
|
| -class LStoreNamedGeneric: public LTemplateInstruction<0, 2, 0> {
|
| +class LStoreNamedGeneric: public LTemplateInstruction<0, 3, 0> {
|
| public:
|
| - LStoreNamedGeneric(LOperand* object, LOperand* value) {
|
| - inputs_[0] = object;
|
| - inputs_[1] = value;
|
| + LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = object;
|
| + inputs_[2] = value;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic")
|
| @@ -1565,8 +1646,9 @@ class LStoreNamedGeneric: public LTemplateInstruction<0, 2, 0> {
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - LOperand* object() { return inputs_[0]; }
|
| - LOperand* value() { return inputs_[1]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* object() { return inputs_[1]; }
|
| + LOperand* value() { return inputs_[2]; }
|
| Handle<Object> name() const { return hydrogen()->name(); }
|
| bool strict_mode() { return hydrogen()->strict_mode(); }
|
| };
|
| @@ -1637,12 +1719,16 @@ class LStoreKeyedSpecializedArrayElement: public LTemplateInstruction<0, 3, 0> {
|
| };
|
|
|
|
|
| -class LStoreKeyedGeneric: public LTemplateInstruction<0, 3, 0> {
|
| +class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> {
|
| public:
|
| - LStoreKeyedGeneric(LOperand* object, LOperand* key, LOperand* value) {
|
| - inputs_[0] = object;
|
| - inputs_[1] = key;
|
| - inputs_[2] = value;
|
| + LStoreKeyedGeneric(LOperand* context,
|
| + LOperand* object,
|
| + LOperand* key,
|
| + LOperand* value) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = object;
|
| + inputs_[2] = key;
|
| + inputs_[3] = value;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic")
|
| @@ -1650,53 +1736,60 @@ class LStoreKeyedGeneric: public LTemplateInstruction<0, 3, 0> {
|
|
|
| virtual void PrintDataTo(StringStream* stream);
|
|
|
| - LOperand* object() { return inputs_[0]; }
|
| - LOperand* key() { return inputs_[1]; }
|
| - LOperand* value() { return inputs_[2]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* object() { return inputs_[1]; }
|
| + LOperand* key() { return inputs_[2]; }
|
| + LOperand* value() { return inputs_[3]; }
|
| bool strict_mode() { return hydrogen()->strict_mode(); }
|
| };
|
|
|
|
|
| -class LStringAdd: public LTemplateInstruction<1, 2, 0> {
|
| +class LStringAdd: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LStringAdd(LOperand* left, LOperand* right) {
|
| - inputs_[0] = left;
|
| - inputs_[1] = right;
|
| + LStringAdd(LOperand* context, LOperand* left, LOperand* right) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = left;
|
| + inputs_[2] = right;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add")
|
| DECLARE_HYDROGEN_ACCESSOR(StringAdd)
|
|
|
| - LOperand* left() { return inputs_[0]; }
|
| - LOperand* right() { return inputs_[1]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* left() { return inputs_[1]; }
|
| + LOperand* right() { return inputs_[2]; }
|
| };
|
|
|
|
|
| -class LStringCharCodeAt: public LTemplateInstruction<1, 2, 0> {
|
| +class LStringCharCodeAt: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LStringCharCodeAt(LOperand* string, LOperand* index) {
|
| - inputs_[0] = string;
|
| - inputs_[1] = index;
|
| + LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = string;
|
| + inputs_[2] = index;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at")
|
| DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt)
|
|
|
| - LOperand* string() { return inputs_[0]; }
|
| - LOperand* index() { return inputs_[1]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* string() { return inputs_[1]; }
|
| + LOperand* index() { return inputs_[2]; }
|
| };
|
|
|
|
|
| -class LStringCharFromCode: public LTemplateInstruction<1, 1, 0> {
|
| +class LStringCharFromCode: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LStringCharFromCode(LOperand* char_code) {
|
| - inputs_[0] = char_code;
|
| + LStringCharFromCode(LOperand* context, LOperand* char_code) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = char_code;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
|
| DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
|
|
|
| - LOperand* char_code() { return inputs_[0]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* char_code() { return inputs_[1]; }
|
| };
|
|
|
|
|
| @@ -1821,29 +1914,53 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
|
| };
|
|
|
|
|
| -class LArrayLiteral: public LTemplateInstruction<1, 0, 0> {
|
| +class LArrayLiteral: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LArrayLiteral(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| + LOperand* context() { return inputs_[0]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(ArrayLiteral, "array-literal")
|
| DECLARE_HYDROGEN_ACCESSOR(ArrayLiteral)
|
| };
|
|
|
|
|
| -class LObjectLiteral: public LTemplateInstruction<1, 0, 0> {
|
| +class LObjectLiteral: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LObjectLiteral(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| + LOperand* context() { return inputs_[0]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral, "object-literal")
|
| DECLARE_HYDROGEN_ACCESSOR(ObjectLiteral)
|
| };
|
|
|
|
|
| -class LRegExpLiteral: public LTemplateInstruction<1, 0, 0> {
|
| +class LRegExpLiteral: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LRegExpLiteral(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| + LOperand* context() { return inputs_[0]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal")
|
| DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral)
|
| };
|
|
|
|
|
| -class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> {
|
| +class LFunctionLiteral: public LTemplateInstruction<1, 1, 0> {
|
| public:
|
| + explicit LFunctionLiteral(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| + LOperand* context() { return inputs_[0]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal")
|
| DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral)
|
|
|
| @@ -1862,12 +1979,16 @@ class LToFastProperties: public LTemplateInstruction<1, 1, 0> {
|
| };
|
|
|
|
|
| -class LTypeof: public LTemplateInstruction<1, 1, 0> {
|
| +class LTypeof: public LTemplateInstruction<1, 2, 0> {
|
| public:
|
| - explicit LTypeof(LOperand* value) {
|
| - inputs_[0] = value;
|
| + LTypeof(LOperand* context, LOperand* value) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = value;
|
| }
|
|
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* value() { return inputs_[1]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
|
| };
|
|
|
| @@ -1899,17 +2020,19 @@ class LIsConstructCallAndBranch: public LControlInstruction<0, 1> {
|
| };
|
|
|
|
|
| -class LDeleteProperty: public LTemplateInstruction<1, 2, 0> {
|
| +class LDeleteProperty: public LTemplateInstruction<1, 3, 0> {
|
| public:
|
| - LDeleteProperty(LOperand* obj, LOperand* key) {
|
| - inputs_[0] = obj;
|
| - inputs_[1] = key;
|
| + LDeleteProperty(LOperand* context, LOperand* obj, LOperand* key) {
|
| + inputs_[0] = context;
|
| + inputs_[1] = obj;
|
| + inputs_[2] = key;
|
| }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property")
|
|
|
| - LOperand* object() { return inputs_[0]; }
|
| - LOperand* key() { return inputs_[1]; }
|
| + LOperand* context() { return inputs_[0]; }
|
| + LOperand* object() { return inputs_[1]; }
|
| + LOperand* key() { return inputs_[2]; }
|
| };
|
|
|
|
|
| @@ -1936,8 +2059,14 @@ class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
|
| };
|
|
|
|
|
| -class LStackCheck: public LTemplateInstruction<0, 0, 0> {
|
| +class LStackCheck: public LTemplateInstruction<0, 1, 0> {
|
| public:
|
| + explicit LStackCheck(LOperand* context) {
|
| + inputs_[0] = context;
|
| + }
|
| +
|
| + LOperand* context() { return inputs_[0]; }
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check")
|
| DECLARE_HYDROGEN_ACCESSOR(StackCheck)
|
|
|
|
|