Index: src/interpreter/bytecode-pipeline.cc |
diff --git a/src/interpreter/bytecode-pipeline.cc b/src/interpreter/bytecode-pipeline.cc |
index 6e6a6b6fab6af113e197826b7c33b9aeb56e3192..66b8bdf533cf7006cb81c18f4d48f0a37b4a7cef 100644 |
--- a/src/interpreter/bytecode-pipeline.cc |
+++ b/src/interpreter/bytecode-pipeline.cc |
@@ -10,6 +10,45 @@ |
namespace v8 { |
namespace internal { |
namespace interpreter { |
+ |
+BytecodeNode::BytecodeNode(Bytecode bytecode) { |
+ DCHECK_EQ(Bytecodes::NumberOfOperands(bytecode), 0); |
+ bytecode_ = bytecode; |
+} |
+ |
+BytecodeNode::BytecodeNode(Bytecode bytecode, uint32_t operand0) { |
+ DCHECK_EQ(Bytecodes::NumberOfOperands(bytecode), 1); |
+ bytecode_ = bytecode; |
+ operands_[0] = operand0; |
+} |
+ |
+BytecodeNode::BytecodeNode(Bytecode bytecode, uint32_t operand0, |
+ uint32_t operand1) { |
+ DCHECK_EQ(Bytecodes::NumberOfOperands(bytecode), 2); |
+ bytecode_ = bytecode; |
+ operands_[0] = operand0; |
+ operands_[1] = operand1; |
+} |
+ |
+BytecodeNode::BytecodeNode(Bytecode bytecode, uint32_t operand0, |
+ uint32_t operand1, uint32_t operand2) { |
+ DCHECK_EQ(Bytecodes::NumberOfOperands(bytecode), 3); |
+ bytecode_ = bytecode; |
+ operands_[0] = operand0; |
+ operands_[1] = operand1; |
+ operands_[2] = operand2; |
+} |
+ |
+BytecodeNode::BytecodeNode(Bytecode bytecode, uint32_t operand0, |
+ uint32_t operand1, uint32_t operand2, |
+ uint32_t operand3) { |
+ DCHECK_EQ(Bytecodes::NumberOfOperands(bytecode), 4); |
+ bytecode_ = bytecode; |
+ operands_[0] = operand0; |
+ operands_[1] = operand1; |
+ operands_[2] = operand2; |
+ operands_[3] = operand3; |
+} |
BytecodeNode::BytecodeNode(const BytecodeNode& other) { |
memcpy(this, &other, sizeof(other)); |
@@ -44,6 +83,23 @@ |
#endif // DEBUG |
} |
+void BytecodeNode::Transform(Bytecode new_bytecode, uint32_t extra_operand) { |
+ DCHECK_EQ(Bytecodes::NumberOfOperands(new_bytecode), |
+ Bytecodes::NumberOfOperands(bytecode()) + 1); |
+ DCHECK(Bytecodes::NumberOfOperands(bytecode()) < 1 || |
+ Bytecodes::GetOperandType(new_bytecode, 0) == |
+ Bytecodes::GetOperandType(bytecode(), 0)); |
+ DCHECK(Bytecodes::NumberOfOperands(bytecode()) < 2 || |
+ Bytecodes::GetOperandType(new_bytecode, 1) == |
+ Bytecodes::GetOperandType(bytecode(), 1)); |
+ DCHECK(Bytecodes::NumberOfOperands(bytecode()) < 3 || |
+ Bytecodes::GetOperandType(new_bytecode, 2) == |
+ Bytecodes::GetOperandType(bytecode(), 2)); |
+ DCHECK(Bytecodes::NumberOfOperands(bytecode()) < 4); |
+ operands_[operand_count()] = extra_operand; |
+ bytecode_ = new_bytecode; |
+} |
+ |
bool BytecodeNode::operator==(const BytecodeNode& other) const { |
if (this == &other) { |
return true; |