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

Side by Side Diff: src/interpreter/bytecodes.cc

Issue 1703453002: [interpreter, debugger] support debug breaks via bytecode array copy (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « src/interpreter/bytecodes.h ('k') | src/interpreter/interpreter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/interpreter/bytecodes.h" 5 #include "src/interpreter/bytecodes.h"
6 6
7 #include "src/frames.h" 7 #include "src/frames.h"
8 #include "src/interpreter/bytecode-traits.h" 8 #include "src/interpreter/bytecode-traits.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 64
65 // static 65 // static
66 Bytecode Bytecodes::FromByte(uint8_t value) { 66 Bytecode Bytecodes::FromByte(uint8_t value) {
67 Bytecode bytecode = static_cast<Bytecode>(value); 67 Bytecode bytecode = static_cast<Bytecode>(value);
68 DCHECK(bytecode <= Bytecode::kLast); 68 DCHECK(bytecode <= Bytecode::kLast);
69 return bytecode; 69 return bytecode;
70 } 70 }
71 71
72 72
73 // static 73 // static
74 Bytecode Bytecodes::GetDebugBreak(Bytecode bytecode) {
75 switch (Size(bytecode)) {
76 #define CASE(Name, ...) \
77 case BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::kSize: \
78 return Bytecode::k##Name;
79 DEBUG_BREAK_BYTECODE_LIST(CASE)
80 #undef CASE
81 default:
82 break;
83 }
84 UNREACHABLE();
85 return static_cast<Bytecode>(-1);
86 }
87
88 // static
74 int Bytecodes::Size(Bytecode bytecode) { 89 int Bytecodes::Size(Bytecode bytecode) {
75 DCHECK(bytecode <= Bytecode::kLast); 90 DCHECK(bytecode <= Bytecode::kLast);
76 switch (bytecode) { 91 switch (bytecode) {
77 #define CASE(Name, ...) \ 92 #define CASE(Name, ...) \
78 case Bytecode::k##Name: \ 93 case Bytecode::k##Name: \
79 return BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::kSize; 94 return BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::kSize;
80 BYTECODE_LIST(CASE) 95 BYTECODE_LIST(CASE)
81 #undef CASE 96 #undef CASE
82 } 97 }
83 UNREACHABLE(); 98 UNREACHABLE();
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 276
262 277
263 // static 278 // static
264 bool Bytecodes::IsCallOrNew(Bytecode bytecode) { 279 bool Bytecodes::IsCallOrNew(Bytecode bytecode) {
265 return bytecode == Bytecode::kCall || bytecode == Bytecode::kTailCall || 280 return bytecode == Bytecode::kCall || bytecode == Bytecode::kTailCall ||
266 bytecode == Bytecode::kNew || bytecode == Bytecode::kCallWide || 281 bytecode == Bytecode::kNew || bytecode == Bytecode::kCallWide ||
267 bytecode == Bytecode::kTailCallWide || bytecode == Bytecode::kNewWide; 282 bytecode == Bytecode::kTailCallWide || bytecode == Bytecode::kNewWide;
268 } 283 }
269 284
270 // static 285 // static
286 bool Bytecodes::IsDebugBreak(Bytecode bytecode) {
287 switch (bytecode) {
288 #define CASE(Name, ...) case Bytecode::k##Name:
289 DEBUG_BREAK_BYTECODE_LIST(CASE);
290 #undef CASE
291 return true;
292 default:
293 break;
294 }
295 return false;
296 }
297
298 // static
271 bool Bytecodes::IsJumpOrReturn(Bytecode bytecode) { 299 bool Bytecodes::IsJumpOrReturn(Bytecode bytecode) {
272 return bytecode == Bytecode::kReturn || IsJump(bytecode); 300 return bytecode == Bytecode::kReturn || IsJump(bytecode);
273 } 301 }
274 302
275 // static 303 // static
276 bool Bytecodes::IsIndexOperandType(OperandType operand_type) { 304 bool Bytecodes::IsIndexOperandType(OperandType operand_type) {
277 return operand_type == OperandType::kIdx8 || 305 return operand_type == OperandType::kIdx8 ||
278 operand_type == OperandType::kIdx16; 306 operand_type == OperandType::kIdx16;
279 } 307 }
280 308
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 SNPrintF(buf, "%02x ", bytecode_start[i]); 405 SNPrintF(buf, "%02x ", bytecode_start[i]);
378 os << buf.start(); 406 os << buf.start();
379 } 407 }
380 const int kBytecodeColumnSize = 6; 408 const int kBytecodeColumnSize = 6;
381 for (int i = bytecode_size; i < kBytecodeColumnSize; i++) { 409 for (int i = bytecode_size; i < kBytecodeColumnSize; i++) {
382 os << " "; 410 os << " ";
383 } 411 }
384 412
385 os << bytecode << " "; 413 os << bytecode << " ";
386 414
415 // Operands for the debug break are from the original instruction.
416 if (IsDebugBreak(bytecode)) return os;
417
387 int number_of_operands = NumberOfOperands(bytecode); 418 int number_of_operands = NumberOfOperands(bytecode);
388 int range = 0; 419 int range = 0;
389 for (int i = 0; i < number_of_operands; i++) { 420 for (int i = 0; i < number_of_operands; i++) {
390 OperandType op_type = GetOperandType(bytecode, i); 421 OperandType op_type = GetOperandType(bytecode, i);
391 const uint8_t* operand_start = 422 const uint8_t* operand_start =
392 &bytecode_start[GetOperandOffset(bytecode, i)]; 423 &bytecode_start[GetOperandOffset(bytecode, i)];
393 switch (op_type) { 424 switch (op_type) {
394 case interpreter::OperandType::kRegCount8: 425 case interpreter::OperandType::kRegCount8:
395 os << "#" << static_cast<unsigned int>(*operand_start); 426 os << "#" << static_cast<unsigned int>(*operand_start);
396 break; 427 break;
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 } else { 631 } else {
601 std::ostringstream s; 632 std::ostringstream s;
602 s << "r" << index(); 633 s << "r" << index();
603 return s.str(); 634 return s.str();
604 } 635 }
605 } 636 }
606 637
607 } // namespace interpreter 638 } // namespace interpreter
608 } // namespace internal 639 } // namespace internal
609 } // namespace v8 640 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecodes.h ('k') | src/interpreter/interpreter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698