Index: src/ia32/lithium-ia32.h |
=================================================================== |
--- src/ia32/lithium-ia32.h (revision 6273) |
+++ src/ia32/lithium-ia32.h (working copy) |
@@ -295,7 +295,8 @@ |
virtual void CompileToNative(LCodeGen* generator) = 0; |
virtual const char* Mnemonic() const = 0; |
virtual void PrintTo(StringStream* stream); |
- virtual void PrintDataTo(StringStream* stream) { } |
+ virtual void PrintDataTo(StringStream* stream) = 0; |
+ virtual void PrintOutputOperandTo(StringStream* stream) = 0; |
// Declare virtual type testers. |
#define DECLARE_DO(type) virtual bool Is##type() const { return false; } |
@@ -334,32 +335,61 @@ |
}; |
-template <int Result> |
-class LTemplateInstruction: public LInstruction { }; |
+template<typename T, int N> |
+class OperandContainer { |
+ public: |
+ OperandContainer() { |
+ for (int i = 0; i < N; i++) elems_[i] = NULL; |
+ } |
+ int length() const { return N; } |
+ T at(int i) const { return elems_[i]; } |
+ void set_at(int i, T value) { elems_[i] = value; } |
+ private: |
+ T elems_[N]; |
+}; |
-template<> |
-class LTemplateInstruction<0>: public LInstruction { |
- virtual bool HasResult() const { return false; } |
+template<typename T> |
+class OperandContainer<T, 0> { |
+ public: |
+ int length() const { return 0; } |
+ T at(int i) const { |
+ UNREACHABLE(); |
+ return NULL; |
+ } |
+ void set_at(int i, T value) { |
+ UNREACHABLE(); |
+ } |
}; |
-template<> |
-class LTemplateInstruction<1>: public LInstruction { |
+template<int R, int I, int T> |
+class LTemplateInstruction: public LInstruction { |
public: |
- static LTemplateInstruction<1>* cast(LInstruction* instr) { |
- ASSERT(instr->HasResult()); |
- return reinterpret_cast<LTemplateInstruction<1>*>(instr); |
- } |
- void set_result(LOperand* operand) { result_.set(operand); } |
- LOperand* result() const { return result_.get(); } |
- virtual bool HasResult() const { return result_.is_set(); } |
+ // Allow 0 or 1 output operands. |
+ STATIC_ASSERT(R == 0 || R == 1); |
+ virtual bool HasResult() const { return R != 0; } |
+ void set_result(LOperand* operand) { outputs_.set_at(0, operand); } |
+ LOperand* result() const { return outputs_.at(0); } |
+ |
+ int InputCount() const { return inputs_.length(); } |
+ LOperand* InputAt(int i) const { return inputs_.at(i); } |
+ void SetInputAt(int i, LOperand* operand) { inputs_.set_at(i, operand); } |
+ |
+ int TempCount() const { return temps_.length(); } |
+ LOperand* TempAt(int i) const { return temps_.at(i); } |
+ |
+ virtual void PrintDataTo(StringStream* stream); |
+ virtual void PrintOutputOperandTo(StringStream* stream); |
+ |
private: |
- SetOncePointer<LOperand> result_; |
+ OperandContainer<LOperand*, R> outputs_; |
+ OperandContainer<LOperand*, I> inputs_; |
+ OperandContainer<LOperand*, T> temps_; |
}; |
-class LGap: public LTemplateInstruction<0> { |
+class LGap: public LTemplateInstruction<0, 0, 0> { |
public: |
explicit LGap(HBasicBlock* block) |
: block_(block) { |
@@ -400,7 +430,7 @@ |
}; |
-class LGoto: public LTemplateInstruction<0> { |
+class LGoto: public LTemplateInstruction<0, 0, 0> { |
public: |
LGoto(int block_id, bool include_stack_check = false) |
: block_id_(block_id), include_stack_check_(include_stack_check) { } |
@@ -418,7 +448,7 @@ |
}; |
-class LLazyBailout: public LTemplateInstruction<0> { |
+class LLazyBailout: public LTemplateInstruction<0, 0, 0> { |
public: |
LLazyBailout() : gap_instructions_size_(0) { } |
@@ -434,7 +464,7 @@ |
}; |
-class LDeoptimize: public LTemplateInstruction<0> { |
+class LDeoptimize: public LTemplateInstruction<0, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") |
}; |
@@ -462,13 +492,13 @@ |
}; |
-class LParameter: public LTemplateInstruction<1> { |
+class LParameter: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") |
}; |
-class LCallStub: public LTemplateInstruction<1> { |
+class LCallStub: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallStub, "call-stub") |
DECLARE_HYDROGEN_ACCESSOR(CallStub) |
@@ -479,85 +509,76 @@ |
}; |
-class LUnknownOSRValue: public LTemplateInstruction<1> { |
+class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") |
}; |
template<int R> |
-class LUnaryOperation: public LTemplateInstruction<R> { |
+class LUnaryOperation: public LTemplateInstruction<R, 1, 0> { |
public: |
- explicit LUnaryOperation(LOperand* input) : input_(input) { } |
+ explicit LUnaryOperation<R>(LOperand* input) { |
+ this->SetInputAt(0, input); |
+ } |
+ LOperand* input() const { return this->InputAt(0); } |
+ |
DECLARE_INSTRUCTION(UnaryOperation) |
- |
- LOperand* input() const { return input_; } |
- |
- virtual void PrintDataTo(StringStream* stream); |
- |
- private: |
- LOperand* input_; |
}; |
-class LBinaryOperation: public LTemplateInstruction<1> { |
+template<int R> |
+class LBinaryOperation: public LTemplateInstruction<R, 2, 0> { |
public: |
- LBinaryOperation(LOperand* left, LOperand* right) |
- : left_(left), right_(right) { } |
+ LBinaryOperation(LOperand* left, LOperand* right) { |
+ this->SetInputAt(0, left); |
+ this->SetInputAt(1, right); |
+ } |
DECLARE_INSTRUCTION(BinaryOperation) |
- LOperand* left() const { return left_; } |
- LOperand* right() const { return right_; } |
- virtual void PrintDataTo(StringStream* stream); |
- |
- private: |
- LOperand* left_; |
- LOperand* right_; |
+ LOperand* left() const { return this->InputAt(0); } |
+ LOperand* right() const { return this->InputAt(1); } |
}; |
-class LApplyArguments: public LBinaryOperation { |
+class LApplyArguments: public LTemplateInstruction<1, 4, 0> { |
public: |
LApplyArguments(LOperand* function, |
LOperand* receiver, |
LOperand* length, |
- LOperand* elements) |
- : LBinaryOperation(function, receiver), |
- length_(length), |
- elements_(elements) { } |
+ LOperand* elements) { |
+ this->SetInputAt(0, function); |
+ this->SetInputAt(1, receiver); |
+ this->SetInputAt(2, length); |
+ this->SetInputAt(3, elements); |
+ } |
DECLARE_CONCRETE_INSTRUCTION(ApplyArguments, "apply-arguments") |
- LOperand* function() const { return left(); } |
- LOperand* receiver() const { return right(); } |
- LOperand* length() const { return length_; } |
- LOperand* elements() const { return elements_; } |
- |
- private: |
- LOperand* length_; |
- LOperand* elements_; |
+ LOperand* function() const { return InputAt(0); } |
+ LOperand* receiver() const { return InputAt(1); } |
+ LOperand* length() const { return InputAt(2); } |
+ LOperand* elements() const { return InputAt(3); } |
}; |
-class LAccessArgumentsAt: public LTemplateInstruction<1> { |
+class LAccessArgumentsAt: public LTemplateInstruction<1, 3, 0> { |
public: |
- LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) |
- : arguments_(arguments), length_(length), index_(index) { } |
+ LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) { |
+ this->SetInputAt(0, arguments); |
+ this->SetInputAt(1, length); |
+ this->SetInputAt(2, index); |
+ } |
DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") |
- LOperand* arguments() const { return arguments_; } |
- LOperand* length() const { return length_; } |
- LOperand* index() const { return index_; } |
+ LOperand* arguments() const { return this->InputAt(0); } |
+ LOperand* length() const { return this->InputAt(1); } |
+ LOperand* index() const { return this->InputAt(2); } |
virtual void PrintDataTo(StringStream* stream); |
- |
- private: |
- LOperand* arguments_; |
- LOperand* length_; |
- LOperand* index_; |
}; |
@@ -570,7 +591,7 @@ |
}; |
-class LArgumentsElements: public LTemplateInstruction<1> { |
+class LArgumentsElements: public LTemplateInstruction<1, 0, 0> { |
public: |
LArgumentsElements() { } |
@@ -578,29 +599,29 @@ |
}; |
-class LModI: public LBinaryOperation { |
+class LModI: public LBinaryOperation<1> { |
public: |
- LModI(LOperand* left, LOperand* right) : LBinaryOperation(left, right) { } |
+ LModI(LOperand* left, LOperand* right) : LBinaryOperation<1>(left, right) { } |
DECLARE_CONCRETE_INSTRUCTION(ModI, "mod-i") |
DECLARE_HYDROGEN_ACCESSOR(Mod) |
}; |
-class LDivI: public LBinaryOperation { |
+class LDivI: public LBinaryOperation<1> { |
public: |
LDivI(LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right) { } |
+ : LBinaryOperation<1>(left, right) { } |
DECLARE_CONCRETE_INSTRUCTION(DivI, "div-i") |
DECLARE_HYDROGEN_ACCESSOR(Div) |
}; |
-class LMulI: public LBinaryOperation { |
+class LMulI: public LBinaryOperation<1> { |
public: |
LMulI(LOperand* left, LOperand* right, LOperand* temp) |
- : LBinaryOperation(left, right), temp_(temp) { } |
+ : LBinaryOperation<1>(left, right), temp_(temp) { } |
DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") |
DECLARE_HYDROGEN_ACCESSOR(Mul) |
@@ -612,10 +633,10 @@ |
}; |
-class LCmpID: public LBinaryOperation { |
+class LCmpID: public LBinaryOperation<1> { |
public: |
LCmpID(Token::Value op, LOperand* left, LOperand* right, bool is_double) |
- : LBinaryOperation(left, right), op_(op), is_double_(is_double) { } |
+ : LBinaryOperation<1>(left, right), op_(op), is_double_(is_double) { } |
Token::Value op() const { return op_; } |
bool is_double() const { return is_double_; } |
@@ -666,10 +687,10 @@ |
}; |
-class LCmpJSObjectEq: public LBinaryOperation { |
+class LCmpJSObjectEq: public LBinaryOperation<1> { |
public: |
LCmpJSObjectEq(LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right) {} |
+ : LBinaryOperation<1>(left, right) {} |
DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEq, "cmp-jsobject-eq") |
}; |
@@ -930,9 +951,9 @@ |
}; |
-class LCmpT: public LBinaryOperation { |
+class LCmpT: public LBinaryOperation<1> { |
public: |
- LCmpT(LOperand* left, LOperand* right) : LBinaryOperation(left, right) {} |
+ LCmpT(LOperand* left, LOperand* right) : LBinaryOperation<1>(left, right) {} |
DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") |
DECLARE_HYDROGEN_ACCESSOR(Compare) |
@@ -962,10 +983,10 @@ |
}; |
-class LInstanceOf: public LBinaryOperation { |
+class LInstanceOf: public LBinaryOperation<1> { |
public: |
LInstanceOf(LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right) { } |
+ : LBinaryOperation<1>(left, right) { } |
DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") |
}; |
@@ -1009,10 +1030,10 @@ |
}; |
-class LBoundsCheck: public LBinaryOperation { |
+class LBoundsCheck: public LBinaryOperation<0> { |
public: |
LBoundsCheck(LOperand* index, LOperand* length) |
- : LBinaryOperation(index, length) { } |
+ : LBinaryOperation<0>(index, length) { } |
LOperand* index() const { return left(); } |
LOperand* length() const { return right(); } |
@@ -1021,10 +1042,10 @@ |
}; |
-class LBitI: public LBinaryOperation { |
+class LBitI: public LBinaryOperation<1> { |
public: |
LBitI(Token::Value op, LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right), op_(op) { } |
+ : LBinaryOperation<1>(left, right), op_(op) { } |
Token::Value op() const { return op_; } |
@@ -1035,10 +1056,10 @@ |
}; |
-class LShiftI: public LBinaryOperation { |
+class LShiftI: public LBinaryOperation<1> { |
public: |
LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) |
- : LBinaryOperation(left, right), op_(op), can_deopt_(can_deopt) { } |
+ : LBinaryOperation<1>(left, right), op_(op), can_deopt_(can_deopt) { } |
Token::Value op() const { return op_; } |
@@ -1052,17 +1073,17 @@ |
}; |
-class LSubI: public LBinaryOperation { |
+class LSubI: public LBinaryOperation<1> { |
public: |
LSubI(LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right) { } |
+ : LBinaryOperation<1>(left, right) { } |
DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") |
DECLARE_HYDROGEN_ACCESSOR(Sub) |
}; |
-class LConstant: public LTemplateInstruction<1> { |
+class LConstant: public LTemplateInstruction<1, 0, 0> { |
DECLARE_INSTRUCTION(Constant) |
}; |
@@ -1187,36 +1208,36 @@ |
class LBitNotI: public LUnaryOperation<1> { |
public: |
- explicit LBitNotI(LOperand* use) : LUnaryOperation<1>(use) { } |
+ explicit LBitNotI(LOperand* input) : LUnaryOperation<1>(input) { } |
DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i") |
}; |
-class LAddI: public LBinaryOperation { |
+class LAddI: public LBinaryOperation<1> { |
public: |
LAddI(LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right) { } |
+ : LBinaryOperation<1>(left, right) { } |
DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") |
DECLARE_HYDROGEN_ACCESSOR(Add) |
}; |
-class LPower: public LBinaryOperation { |
+class LPower: public LBinaryOperation<1> { |
public: |
LPower(LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right) { } |
+ : LBinaryOperation<1>(left, right) { } |
DECLARE_CONCRETE_INSTRUCTION(Power, "power") |
DECLARE_HYDROGEN_ACCESSOR(Power) |
}; |
-class LArithmeticD: public LBinaryOperation { |
+class LArithmeticD: public LBinaryOperation<1> { |
public: |
LArithmeticD(Token::Value op, LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right), op_(op) { } |
+ : LBinaryOperation<1>(left, right), op_(op) { } |
Token::Value op() const { return op_; } |
@@ -1228,10 +1249,10 @@ |
}; |
-class LArithmeticT: public LBinaryOperation { |
+class LArithmeticT: public LBinaryOperation<1> { |
public: |
LArithmeticT(Token::Value op, LOperand* left, LOperand* right) |
- : LBinaryOperation(left, right), op_(op) { } |
+ : LBinaryOperation<1>(left, right), op_(op) { } |
virtual void CompileToNative(LCodeGen* generator); |
virtual const char* Mnemonic() const; |
@@ -1296,10 +1317,10 @@ |
}; |
-class LLoadKeyedFastElement: public LBinaryOperation { |
+class LLoadKeyedFastElement: public LBinaryOperation<1> { |
public: |
LLoadKeyedFastElement(LOperand* elements, LOperand* key) |
- : LBinaryOperation(elements, key) { } |
+ : LBinaryOperation<1>(elements, key) { } |
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, "load-keyed-fast-element") |
DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastElement) |
@@ -1309,10 +1330,10 @@ |
}; |
-class LLoadKeyedGeneric: public LBinaryOperation { |
+class LLoadKeyedGeneric: public LBinaryOperation<1> { |
public: |
LLoadKeyedGeneric(LOperand* obj, LOperand* key) |
- : LBinaryOperation(obj, key) { } |
+ : LBinaryOperation<1>(obj, key) { } |
DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") |
@@ -1321,7 +1342,7 @@ |
}; |
-class LLoadGlobal: public LTemplateInstruction<1> { |
+class LLoadGlobal: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(LoadGlobal, "load-global") |
DECLARE_HYDROGEN_ACCESSOR(LoadGlobal) |
@@ -1345,31 +1366,31 @@ |
}; |
-class LGlobalObject: public LTemplateInstruction<1> { |
+class LGlobalObject: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object") |
}; |
-class LGlobalReceiver: public LTemplateInstruction<1> { |
+class LGlobalReceiver: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global-receiver") |
}; |
-class LCallConstantFunction: public LTemplateInstruction<1> { |
+class LCallConstantFunction: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") |
DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) |
virtual void PrintDataTo(StringStream* stream); |
- Handle<JSFunction> function() const { return hydrogen()->function(); } |
+ Handle<JSFunction> function() { return hydrogen()->function(); } |
int arity() const { return hydrogen()->argument_count() - 1; } |
}; |
-class LCallKeyed: public LTemplateInstruction<1> { |
+class LCallKeyed: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") |
DECLARE_HYDROGEN_ACCESSOR(CallKeyed) |
@@ -1380,7 +1401,7 @@ |
}; |
-class LCallNamed: public LTemplateInstruction<1> { |
+class LCallNamed: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named") |
DECLARE_HYDROGEN_ACCESSOR(CallNamed) |
@@ -1392,7 +1413,7 @@ |
}; |
-class LCallFunction: public LTemplateInstruction<1> { |
+class LCallFunction: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call-function") |
DECLARE_HYDROGEN_ACCESSOR(CallFunction) |
@@ -1401,7 +1422,7 @@ |
}; |
-class LCallGlobal: public LTemplateInstruction<1> { |
+class LCallGlobal: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global") |
DECLARE_HYDROGEN_ACCESSOR(CallGlobal) |
@@ -1413,7 +1434,7 @@ |
}; |
-class LCallKnownGlobal: public LTemplateInstruction<1> { |
+class LCallKnownGlobal: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") |
DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) |
@@ -1438,7 +1459,7 @@ |
}; |
-class LCallRuntime: public LTemplateInstruction<1> { |
+class LCallRuntime: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") |
DECLARE_HYDROGEN_ACCESSOR(CallRuntime) |
@@ -1542,22 +1563,21 @@ |
}; |
-class LStoreNamed: public LTemplateInstruction<0> { |
+class LStoreNamed: public LTemplateInstruction<0, 2, 0> { |
public: |
- LStoreNamed(LOperand* obj, LOperand* val) : object_(obj), value_(val) { } |
+ LStoreNamed(LOperand* obj, LOperand* val) { |
+ this->SetInputAt(0, obj); |
+ this->SetInputAt(1, val); |
+ } |
DECLARE_INSTRUCTION(StoreNamed) |
DECLARE_HYDROGEN_ACCESSOR(StoreNamed) |
virtual void PrintDataTo(StringStream* stream); |
- LOperand* object() const { return object_; } |
+ LOperand* object() const { return this->InputAt(0); } |
+ LOperand* value() const { return this->InputAt(1); } |
Handle<Object> name() const { return hydrogen()->name(); } |
- LOperand* value() const { return value_; } |
- |
- private: |
- LOperand* object_; |
- LOperand* value_; |
}; |
@@ -1571,10 +1591,11 @@ |
bool is_in_object() { return hydrogen()->is_in_object(); } |
int offset() { return hydrogen()->offset(); } |
- LOperand* temp() { return temp_; } |
bool needs_write_barrier() { return hydrogen()->NeedsWriteBarrier(); } |
Handle<Map> transition() const { return hydrogen()->transition(); } |
+ LOperand* temp() { return temp_; } |
+ |
private: |
LOperand* temp_; |
}; |
@@ -1590,23 +1611,21 @@ |
}; |
-class LStoreKeyed: public LTemplateInstruction<0> { |
+class LStoreKeyed: public LTemplateInstruction<0, 3, 0> { |
public: |
- LStoreKeyed(LOperand* obj, LOperand* key, LOperand* val) |
- : object_(obj), key_(key), value_(val) { } |
+ LStoreKeyed(LOperand* obj, LOperand* key, LOperand* val) { |
+ this->SetInputAt(0, obj); |
+ this->SetInputAt(1, key); |
+ this->SetInputAt(2, val); |
+ } |
DECLARE_INSTRUCTION(StoreKeyed) |
virtual void PrintDataTo(StringStream* stream); |
- LOperand* object() const { return object_; } |
- LOperand* key() const { return key_; } |
- LOperand* value() const { return value_; } |
- |
- private: |
- LOperand* object_; |
- LOperand* key_; |
- LOperand* value_; |
+ LOperand* object() const { return this->InputAt(0); } |
+ LOperand* key() const { return this->InputAt(1); } |
+ LOperand* value() const { return this->InputAt(2); } |
}; |
@@ -1663,7 +1682,7 @@ |
}; |
-class LCheckPrototypeMaps: public LTemplateInstruction<0> { |
+class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 0> { |
public: |
explicit LCheckPrototypeMaps(LOperand* temp) : temp_(temp) { } |
@@ -1672,6 +1691,7 @@ |
Handle<JSObject> holder() const { return hydrogen()->holder(); } |
Handle<Map> receiver_map() const { return hydrogen()->receiver_map(); } |
+ |
LOperand* temp() const { return temp_; } |
private: |
@@ -1696,7 +1716,7 @@ |
}; |
-class LMaterializedLiteral: public LTemplateInstruction<1> { |
+class LMaterializedLiteral: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_INSTRUCTION(MaterializedLiteral) |
}; |
@@ -1723,7 +1743,7 @@ |
}; |
-class LFunctionLiteral: public LTemplateInstruction<1> { |
+class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") |
DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) |
@@ -1775,9 +1795,10 @@ |
}; |
-class LDeleteProperty: public LBinaryOperation { |
+class LDeleteProperty: public LBinaryOperation<1> { |
public: |
- LDeleteProperty(LOperand* obj, LOperand* key) : LBinaryOperation(obj, key) {} |
+ LDeleteProperty(LOperand* obj, LOperand* key) |
+ : LBinaryOperation<1>(obj, key) { } |
DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property") |
@@ -1786,7 +1807,7 @@ |
}; |
-class LOsrEntry: public LTemplateInstruction<0> { |
+class LOsrEntry: public LTemplateInstruction<0, 0, 0> { |
public: |
LOsrEntry(); |
@@ -1809,7 +1830,7 @@ |
}; |
-class LStackCheck: public LTemplateInstruction<0> { |
+class LStackCheck: public LTemplateInstruction<0, 0, 0> { |
public: |
DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") |
}; |
@@ -1972,8 +1993,6 @@ |
inlined_closures_.Add(closure); |
} |
- void Verify() const; |
- |
private: |
int spill_slot_count_; |
HGraph* const graph_; |
@@ -2056,14 +2075,24 @@ |
// Methods for setting up define-use relationships. |
// Return the same instruction that they are passed. |
- LInstruction* Define(LTemplateInstruction<1>* instr, LUnallocated* result); |
- LInstruction* Define(LTemplateInstruction<1>* instr); |
- LInstruction* DefineAsRegister(LTemplateInstruction<1>* instr); |
- LInstruction* DefineAsSpilled(LTemplateInstruction<1>* instr, int index); |
- LInstruction* DefineSameAsFirst(LTemplateInstruction<1>* instr); |
- LInstruction* DefineFixed(LTemplateInstruction<1>* instr, Register reg); |
- LInstruction* DefineFixedDouble(LTemplateInstruction<1>* instr, |
- XMMRegister reg); |
+ template<int I, int T> |
+ LInstruction* Define(LTemplateInstruction<1, I, T>* instr, |
+ LUnallocated* result); |
+ template<int I, int T> |
+ LInstruction* Define(LTemplateInstruction<1, I, T>* instr); |
+ template<int I, int T> |
+ LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr); |
+ template<int I, int T> |
+ LInstruction* DefineAsSpilled(LTemplateInstruction<1, I, T>* instr, |
+ int index); |
+ template<int I, int T> |
+ LInstruction* DefineSameAsFirst(LTemplateInstruction<1, I, T>* instr); |
+ template<int I, int T> |
+ LInstruction* DefineFixed(LTemplateInstruction<1, I, T>* instr, |
+ Register reg); |
+ template<int I, int T> |
+ LInstruction* DefineFixedDouble(LTemplateInstruction<1, I, T>* instr, |
+ XMMRegister reg); |
LInstruction* AssignEnvironment(LInstruction* instr); |
LInstruction* AssignPointerMap(LInstruction* instr); |