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

Unified Diff: src/debug/debug.cc

Issue 1783483002: [interpreter] Add support for scalable operands. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Operand renaming. Created 4 years, 9 months 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/debug/debug.cc
diff --git a/src/debug/debug.cc b/src/debug/debug.cc
index a7bce4083b90c8ed2915d926be4401851258f72d..44342376e57e436b3767331ecc77df1b201091d2 100644
--- a/src/debug/debug.cc
+++ b/src/debug/debug.cc
@@ -222,6 +222,10 @@ BreakLocation::BytecodeArrayIterator::GetDebugBreakType() {
BytecodeArray* bytecode_array = debug_info_->original_bytecode_array();
interpreter::Bytecode bytecode =
interpreter::Bytecodes::FromByte(bytecode_array->get(code_offset()));
+ if (interpreter::Bytecodes::GetPrefixBytecodeScale(bytecode) > 1) {
rmcilroy 2016/03/10 16:45:37 Could you pull out the logic for getting the curre
oth 2016/03/11 16:26:12 Done.
+ bytecode = interpreter::Bytecodes::FromByte(
+ bytecode_array->get(code_offset() + 1));
+ }
if (bytecode == interpreter::Bytecode::kDebugger) {
return DEBUGGER_STATEMENT;
@@ -421,9 +425,17 @@ void BreakLocation::SetDebugBreak() {
BytecodeArray* bytecode_array = abstract_code()->GetBytecodeArray();
interpreter::Bytecode bytecode =
interpreter::Bytecodes::FromByte(bytecode_array->get(code_offset()));
+ int prefix_offset = 0;
+ int operand_scale =
+ interpreter::Bytecodes::GetPrefixBytecodeScale(bytecode);
+ if (operand_scale > 1) {
+ prefix_offset = 1;
+ bytecode = interpreter::Bytecodes::FromByte(
+ bytecode_array->get(code_offset() + prefix_offset));
+ }
interpreter::Bytecode debugbreak =
- interpreter::Bytecodes::GetDebugBreak(bytecode);
- bytecode_array->set(code_offset(),
+ interpreter::Bytecodes::GetDebugBreak(bytecode, operand_scale);
+ bytecode_array->set(code_offset() + prefix_offset,
interpreter::Bytecodes::ToByte(debugbreak));
}
DCHECK(IsDebugBreak());
@@ -443,7 +455,11 @@ void BreakLocation::ClearDebugBreak() {
} else {
BytecodeArray* bytecode_array = abstract_code()->GetBytecodeArray();
BytecodeArray* original = debug_info_->original_bytecode_array();
- bytecode_array->set(code_offset(), original->get(code_offset()));
+ int operand_scale = interpreter::Bytecodes::GetPrefixBytecodeScale(
+ interpreter::Bytecodes::FromByte(original->get(code_offset())));
+ int prefix_offset = operand_scale > 1 ? 1 : 0;
+ bytecode_array->set(code_offset() + prefix_offset,
+ original->get(code_offset() + prefix_offset));
}
DCHECK(!IsDebugBreak());
}
@@ -461,6 +477,10 @@ bool BreakLocation::IsDebugBreak() const {
BytecodeArray* bytecode_array = abstract_code()->GetBytecodeArray();
interpreter::Bytecode bytecode =
interpreter::Bytecodes::FromByte(bytecode_array->get(code_offset()));
+ if (interpreter::Bytecodes::GetPrefixBytecodeScale(bytecode) > 1) {
+ bytecode = interpreter::Bytecodes::FromByte(
+ bytecode_array->get(code_offset()) + 1);
+ }
return interpreter::Bytecodes::IsDebugBreak(bytecode);
}
}
@@ -1593,7 +1613,13 @@ Object* Debug::SetAfterBreakTarget(JavaScriptFrame* frame) {
int bytecode_offset = interpreted_frame->GetBytecodeOffset();
interpreter::Bytecode bytecode =
interpreter::Bytecodes::FromByte(bytecode_array->get(bytecode_offset));
- return isolate_->interpreter()->GetBytecodeHandler(bytecode);
+ int operand_scale =
+ interpreter::Bytecodes::GetPrefixBytecodeScale(bytecode);
+ if (operand_scale > 1) {
+ interpreter::Bytecodes::FromByte(
+ bytecode_array->get(bytecode_offset + 1));
+ }
+ return isolate_->interpreter()->GetBytecodeHandler(bytecode, operand_scale);
} else {
after_break_target_ = NULL;
if (!LiveEdit::SetAfterBreakTarget(this)) {

Powered by Google App Engine
This is Rietveld 408576698