| Index: src/interpreter/interpreter.cc
|
| diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc
|
| index 227bef538fafff8487362d8ff4af26aaba6ff7a4..d1a96825ab5910d5ab07bfe3945aa0d0ab3ce624 100644
|
| --- a/src/interpreter/interpreter.cc
|
| +++ b/src/interpreter/interpreter.cc
|
| @@ -836,6 +836,42 @@ void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) {
|
| DoBinaryOp<ShiftRightLogicalStub>(assembler);
|
| }
|
|
|
| +template <class Generator>
|
| +void Interpreter::DoBinaryOpWithImmediate(InterpreterAssembler* assembler) {
|
| + Node* reg_index = __ BytecodeOperandReg(1);
|
| + Node* lhs = __ LoadRegister(reg_index);
|
| + Node* raw_int = __ BytecodeOperandImm(0);
|
| + Node* rhs = __ SmiTag(raw_int);
|
| + Node* context = __ GetContext();
|
| + Node* result = Generator::Generate(assembler, lhs, rhs, context);
|
| + __ SetAccumulator(result);
|
| + __ Dispatch();
|
| +}
|
| +
|
| +void Interpreter::DoAddSmi(InterpreterAssembler* assembler) {
|
| + DoBinaryOpWithImmediate<AddSmiStub>(assembler);
|
| +}
|
| +
|
| +void Interpreter::DoSubSmi(InterpreterAssembler* assembler) {
|
| + DoBinaryOpWithImmediate<SubtractSmiStub>(assembler);
|
| +}
|
| +
|
| +void Interpreter::DoBitwiseOrSmi(InterpreterAssembler* assembler) {
|
| + DoBinaryOpWithImmediate<BitwiseOrSmiStub>(assembler);
|
| +}
|
| +
|
| +void Interpreter::DoBitwiseAndSmi(InterpreterAssembler* assembler) {
|
| + DoBinaryOpWithImmediate<BitwiseAndSmiStub>(assembler);
|
| +}
|
| +
|
| +void Interpreter::DoShiftLeftSmi(InterpreterAssembler* assembler) {
|
| + DoBinaryOpWithImmediate<ShiftLeftSmiStub>(assembler);
|
| +}
|
| +
|
| +void Interpreter::DoShiftRightSmi(InterpreterAssembler* assembler) {
|
| + DoBinaryOpWithImmediate<ShiftRightSmiStub>(assembler);
|
| +}
|
| +
|
| void Interpreter::DoUnaryOp(Callable callable,
|
| InterpreterAssembler* assembler) {
|
| Node* target = __ HeapConstant(callable.code());
|
|
|