Chromium Code Reviews| Index: src/interpreter/interpreter.cc |
| diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc |
| index b1bd1976339f2c37e451cde252565d75c289d5d3..4861237ae0ac7510a245abfd51d56e73faab217d 100644 |
| --- a/src/interpreter/interpreter.cc |
| +++ b/src/interpreter/interpreter.cc |
| @@ -17,6 +17,8 @@ namespace internal { |
| namespace interpreter { |
| using compiler::Node; |
| +typedef compiler::InterpreterAssembler::SaveAccumulatorMode SaveAccumulatorMode; |
|
Michael Starzinger
2015/12/09 18:16:22
nit: Would "using compiler::InterpreterAssembler::
rmcilroy
2015/12/10 14:17:12
No, that didn't work (can't remember why). Removed
|
| + |
| #define __ assembler-> |
| @@ -345,7 +347,7 @@ void Interpreter::DoStoreGlobal(Callable ic, |
| Node* smi_slot = __ SmiTag(raw_slot); |
| Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
| __ CallIC(ic.descriptor(), code_target, global, name, value, smi_slot, |
| - type_feedback_vector); |
| + type_feedback_vector, SaveAccumulatorMode::kSaveAccumulator); |
| __ Dispatch(); |
| } |
| @@ -562,7 +564,7 @@ void Interpreter::DoStoreIC(Callable ic, |
| Node* smi_slot = __ SmiTag(raw_slot); |
| Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
| __ CallIC(ic.descriptor(), code_target, object, name, value, smi_slot, |
| - type_feedback_vector); |
| + type_feedback_vector, SaveAccumulatorMode::kSaveAccumulator); |
| __ Dispatch(); |
| } |
| @@ -629,7 +631,7 @@ void Interpreter::DoKeyedStoreIC(Callable ic, |
| Node* smi_slot = __ SmiTag(raw_slot); |
| Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
| __ CallIC(ic.descriptor(), code_target, object, name, value, smi_slot, |
| - type_feedback_vector); |
| + type_feedback_vector, SaveAccumulatorMode::kSaveAccumulator); |
| __ Dispatch(); |
| } |
| @@ -1188,9 +1190,10 @@ void Interpreter::DoJumpIfFalseConstant( |
| void Interpreter::DoJumpIfToBooleanTrue( |
| compiler::InterpreterAssembler* assembler) { |
| Node* accumulator = __ GetAccumulator(); |
| - Node* relative_jump = __ BytecodeOperandImm(0); |
| Node* to_boolean_value = |
| - __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| + __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator, |
|
Michael Starzinger
2015/12/09 18:16:22
We assume that this bytecode is safe with the deop
rmcilroy
2015/12/10 14:17:12
Removed accumulator spilling (note the accumulator
|
| + SaveAccumulatorMode::kSaveAccumulator); |
| + Node* relative_jump = __ BytecodeOperandImm(0); |
| Node* true_value = __ BooleanConstant(true); |
| __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); |
| } |
| @@ -1205,7 +1208,8 @@ void Interpreter::DoJumpIfToBooleanTrueConstant( |
| compiler::InterpreterAssembler* assembler) { |
| Node* accumulator = __ GetAccumulator(); |
| Node* to_boolean_value = |
| - __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| + __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator, |
| + SaveAccumulatorMode::kSaveAccumulator); |
| Node* index = __ BytecodeOperandIdx(0); |
| Node* constant = __ LoadConstantPoolEntry(index); |
| Node* relative_jump = __ SmiUntag(constant); |
| @@ -1221,9 +1225,10 @@ void Interpreter::DoJumpIfToBooleanTrueConstant( |
| void Interpreter::DoJumpIfToBooleanFalse( |
| compiler::InterpreterAssembler* assembler) { |
| Node* accumulator = __ GetAccumulator(); |
| - Node* relative_jump = __ BytecodeOperandImm(0); |
| Node* to_boolean_value = |
| - __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| + __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator, |
| + SaveAccumulatorMode::kSaveAccumulator); |
| + Node* relative_jump = __ BytecodeOperandImm(0); |
| Node* false_value = __ BooleanConstant(false); |
| __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); |
| } |
| @@ -1238,7 +1243,8 @@ void Interpreter::DoJumpIfToBooleanFalseConstant( |
| compiler::InterpreterAssembler* assembler) { |
| Node* accumulator = __ GetAccumulator(); |
| Node* to_boolean_value = |
| - __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); |
| + __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator, |
| + SaveAccumulatorMode::kSaveAccumulator); |
| Node* index = __ BytecodeOperandIdx(0); |
| Node* constant = __ LoadConstantPoolEntry(index); |
| Node* relative_jump = __ SmiUntag(constant); |