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

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

Issue 1640213002: [Interpreter] Add option to trace bytecode execution. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Review comments 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.cc » ('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 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 case interpreter::OperandType::kImm8: 373 case interpreter::OperandType::kImm8:
374 os << "#" << static_cast<int>(static_cast<int8_t>(*operand_start)); 374 os << "#" << static_cast<int>(static_cast<int8_t>(*operand_start));
375 break; 375 break;
376 case interpreter::OperandType::kMaybeReg8: 376 case interpreter::OperandType::kMaybeReg8:
377 case interpreter::OperandType::kMaybeReg16: 377 case interpreter::OperandType::kMaybeReg16:
378 case interpreter::OperandType::kReg8: 378 case interpreter::OperandType::kReg8:
379 case interpreter::OperandType::kReg16: 379 case interpreter::OperandType::kReg16:
380 case interpreter::OperandType::kRegOut8: 380 case interpreter::OperandType::kRegOut8:
381 case interpreter::OperandType::kRegOut16: { 381 case interpreter::OperandType::kRegOut16: {
382 Register reg = DecodeRegister(operand_start, op_type); 382 Register reg = DecodeRegister(operand_start, op_type);
383 if (reg.is_current_context()) { 383 os << reg.ToString(parameter_count);
384 os << "<context>";
385 } else if (reg.is_function_closure()) {
386 os << "<closure>";
387 } else if (reg.is_new_target()) {
388 os << "<new.target>";
389 } else if (reg.is_parameter()) {
390 int parameter_index = reg.ToParameterIndex(parameter_count);
391 if (parameter_index == 0) {
392 os << "<this>";
393 } else {
394 os << "a" << parameter_index - 1;
395 }
396 } else {
397 os << "r" << reg.index();
398 }
399 break; 384 break;
400 } 385 }
401 case interpreter::OperandType::kRegOutTriple8: 386 case interpreter::OperandType::kRegOutTriple8:
402 case interpreter::OperandType::kRegOutTriple16: 387 case interpreter::OperandType::kRegOutTriple16:
403 range += 1; 388 range += 1;
404 case interpreter::OperandType::kRegOutPair8: 389 case interpreter::OperandType::kRegOutPair8:
405 case interpreter::OperandType::kRegOutPair16: 390 case interpreter::OperandType::kRegOutPair16:
406 case interpreter::OperandType::kRegPair8: 391 case interpreter::OperandType::kRegPair8:
407 case interpreter::OperandType::kRegPair16: { 392 case interpreter::OperandType::kRegPair16: {
408 range += 1; 393 range += 1;
409 Register reg = DecodeRegister(operand_start, op_type); 394 Register first_reg = DecodeRegister(operand_start, op_type);
410 if (reg.is_parameter()) { 395 Register last_reg = Register(first_reg.index() + range);
411 int parameter_index = reg.ToParameterIndex(parameter_count); 396 os << first_reg.ToString(parameter_count) << "-"
412 DCHECK_GT(parameter_index, 0); 397 << last_reg.ToString(parameter_count);
413 os << "a" << parameter_index - range << "-" << parameter_index;
414 } else {
415 os << "r" << reg.index() << "-" << reg.index() + range;
416 }
417 break; 398 break;
418 } 399 }
419 case interpreter::OperandType::kNone: 400 case interpreter::OperandType::kNone:
420 UNREACHABLE(); 401 UNREACHABLE();
421 break; 402 break;
422 } 403 }
423 if (i != number_of_operands - 1) { 404 if (i != number_of_operands - 1) {
424 os << ", "; 405 os << ", ";
425 } 406 }
426 } 407 }
427 return os; 408 return os;
428 } 409 }
429 410
430
431 std::ostream& operator<<(std::ostream& os, const Bytecode& bytecode) { 411 std::ostream& operator<<(std::ostream& os, const Bytecode& bytecode) {
432 return os << Bytecodes::ToString(bytecode); 412 return os << Bytecodes::ToString(bytecode);
433 } 413 }
434 414
435 415
436 std::ostream& operator<<(std::ostream& os, const OperandType& operand_type) { 416 std::ostream& operator<<(std::ostream& os, const OperandType& operand_type) {
437 return os << Bytecodes::OperandTypeToString(operand_type); 417 return os << Bytecodes::OperandTypeToString(operand_type);
438 } 418 }
439 419
440 420
441 std::ostream& operator<<(std::ostream& os, const OperandSize& operand_size) { 421 std::ostream& operator<<(std::ostream& os, const OperandSize& operand_size) {
442 return os << Bytecodes::OperandSizeToString(operand_size); 422 return os << Bytecodes::OperandSizeToString(operand_size);
443 } 423 }
444 424
445
446 static const int kLastParamRegisterIndex = 425 static const int kLastParamRegisterIndex =
447 -InterpreterFrameConstants::kLastParamFromRegisterPointer / kPointerSize; 426 -InterpreterFrameConstants::kLastParamFromRegisterPointer / kPointerSize;
448 static const int kFunctionClosureRegisterIndex = 427 static const int kFunctionClosureRegisterIndex =
449 -InterpreterFrameConstants::kFunctionFromRegisterPointer / kPointerSize; 428 -InterpreterFrameConstants::kFunctionFromRegisterPointer / kPointerSize;
450 static const int kCurrentContextRegisterIndex = 429 static const int kCurrentContextRegisterIndex =
451 -InterpreterFrameConstants::kContextFromRegisterPointer / kPointerSize; 430 -InterpreterFrameConstants::kContextFromRegisterPointer / kPointerSize;
452 static const int kNewTargetRegisterIndex = 431 static const int kNewTargetRegisterIndex =
453 -InterpreterFrameConstants::kNewTargetFromRegisterPointer / kPointerSize; 432 -InterpreterFrameConstants::kNewTargetFromRegisterPointer / kPointerSize;
454 433
455 // The register space is a signed 16-bit space. Register operands 434 // The register space is a signed 16-bit space. Register operands
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 } 541 }
563 if (reg4.is_valid() && reg3.index() + 1 != reg4.index()) { 542 if (reg4.is_valid() && reg3.index() + 1 != reg4.index()) {
564 return false; 543 return false;
565 } 544 }
566 if (reg5.is_valid() && reg4.index() + 1 != reg5.index()) { 545 if (reg5.is_valid() && reg4.index() + 1 != reg5.index()) {
567 return false; 546 return false;
568 } 547 }
569 return true; 548 return true;
570 } 549 }
571 550
551 std::string Register::ToString(int parameter_count) {
552 if (is_current_context()) {
553 return std::string("<context>");
554 } else if (is_function_closure()) {
555 return std::string("<closure>");
556 } else if (is_new_target()) {
557 return std::string("<new.target>");
558 } else if (is_parameter()) {
559 int parameter_index = ToParameterIndex(parameter_count);
560 if (parameter_index == 0) {
561 return std::string("<this>");
562 } else {
563 std::ostringstream s;
564 s << "a" << parameter_index - 1;
565 return s.str();
566 }
567 } else {
568 std::ostringstream s;
569 s << "r" << index();
570 return s.str();
571 }
572 }
573
572 } // namespace interpreter 574 } // namespace interpreter
573 } // namespace internal 575 } // namespace internal
574 } // namespace v8 576 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecodes.h ('k') | src/interpreter/interpreter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698