Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(919)

Unified Diff: src/interpreter/interpreter.cc

Issue 1512543002: [Interpreter] Save bytecode offset in interpreter stack frames. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Minor tweak Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
« no previous file with comments | « src/frames.h ('k') | src/x64/builtins-x64.cc » ('j') | src/x64/builtins-x64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698