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

Side by Side Diff: src/interpreter/interpreter-assembler.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/interpreter-assembler.h ('k') | src/mips/builtins-mips.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/interpreter-assembler.h" 5 #include "src/interpreter/interpreter-assembler.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/frames.h" 10 #include "src/frames.h"
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 void InterpreterAssembler::JumpIfWordNotEqual(Node* lhs, Node* rhs, 435 void InterpreterAssembler::JumpIfWordNotEqual(Node* lhs, Node* rhs,
436 Node* delta) { 436 Node* delta) {
437 JumpConditional(WordNotEqual(lhs, rhs), delta); 437 JumpConditional(WordNotEqual(lhs, rhs), delta);
438 } 438 }
439 439
440 void InterpreterAssembler::Dispatch() { 440 void InterpreterAssembler::Dispatch() {
441 DispatchTo(Advance(Bytecodes::Size(bytecode_))); 441 DispatchTo(Advance(Bytecodes::Size(bytecode_)));
442 } 442 }
443 443
444 void InterpreterAssembler::DispatchTo(Node* new_bytecode_offset) { 444 void InterpreterAssembler::DispatchTo(Node* new_bytecode_offset) {
445 if (FLAG_trace_ignition) {
446 TraceBytecode(Runtime::kInterpreterTraceBytecodeExit);
447 }
448 Node* target_bytecode = Load( 445 Node* target_bytecode = Load(
449 MachineType::Uint8(), BytecodeArrayTaggedPointer(), new_bytecode_offset); 446 MachineType::Uint8(), BytecodeArrayTaggedPointer(), new_bytecode_offset);
450 447
451 // TODO(rmcilroy): Create a code target dispatch table to avoid conversion 448 // TODO(rmcilroy): Create a code target dispatch table to avoid conversion
452 // from code object on every dispatch. 449 // from code object on every dispatch.
453 Node* target_code_object = 450 Node* target_code_object =
454 Load(MachineType::Pointer(), DispatchTableRawPointer(), 451 Load(MachineType::Pointer(), DispatchTableRawPointer(),
455 Word32Shl(target_bytecode, Int32Constant(kPointerSizeLog2))); 452 Word32Shl(target_bytecode, Int32Constant(kPointerSizeLog2)));
456 453
457 InterpreterDispatchDescriptor descriptor(isolate()); 454 DispatchToBytecodeHandler(target_code_object, new_bytecode_offset);
458 Node* args[] = {GetAccumulator(), RegisterFileRawPointer(),
459 new_bytecode_offset, BytecodeArrayTaggedPointer(),
460 DispatchTableRawPointer(), GetContext()};
461 TailCall(descriptor, target_code_object, args, 0);
462 } 455 }
463 456
464 void InterpreterAssembler::InterpreterReturn() { 457 void InterpreterAssembler::DispatchToBytecodeHandler(Node* handler,
458 Node* bytecode_offset) {
465 if (FLAG_trace_ignition) { 459 if (FLAG_trace_ignition) {
466 TraceBytecode(Runtime::kInterpreterTraceBytecodeExit); 460 TraceBytecode(Runtime::kInterpreterTraceBytecodeExit);
467 } 461 }
468 462
463 InterpreterDispatchDescriptor descriptor(isolate());
464 Node* args[] = {GetAccumulator(), RegisterFileRawPointer(),
465 bytecode_offset, BytecodeArrayTaggedPointer(),
466 DispatchTableRawPointer(), GetContext()};
467 TailCall(descriptor, handler, args, 0);
468 }
469
470 void InterpreterAssembler::InterpreterReturn() {
469 // TODO(rmcilroy): Investigate whether it is worth supporting self 471 // TODO(rmcilroy): Investigate whether it is worth supporting self
470 // optimization of primitive functions like FullCodegen. 472 // optimization of primitive functions like FullCodegen.
471 473
472 // Update profiling count by -BytecodeOffset to simulate backedge to start of 474 // Update profiling count by -BytecodeOffset to simulate backedge to start of
473 // function. 475 // function.
474 Node* profiling_weight = 476 Node* profiling_weight =
475 Int32Sub(Int32Constant(kHeapObjectTag + BytecodeArray::kHeaderSize), 477 Int32Sub(Int32Constant(kHeapObjectTag + BytecodeArray::kHeaderSize),
476 BytecodeOffset()); 478 BytecodeOffset());
477 UpdateInterruptBudget(profiling_weight); 479 UpdateInterruptBudget(profiling_weight);
478 480
479 InterpreterDispatchDescriptor descriptor(isolate());
480 Node* exit_trampoline_code_object = 481 Node* exit_trampoline_code_object =
481 HeapConstant(isolate()->builtins()->InterpreterExitTrampoline()); 482 HeapConstant(isolate()->builtins()->InterpreterExitTrampoline());
482 Node* args[] = {GetAccumulator(), RegisterFileRawPointer(), 483 DispatchToBytecodeHandler(exit_trampoline_code_object);
483 BytecodeOffset(), BytecodeArrayTaggedPointer(),
484 DispatchTableRawPointer(), GetContext()};
485 TailCall(descriptor, exit_trampoline_code_object, args, 0);
486 } 484 }
487 485
488 void InterpreterAssembler::StackCheck() { 486 void InterpreterAssembler::StackCheck() {
489 CodeStubAssembler::Label end(this); 487 CodeStubAssembler::Label end(this);
490 CodeStubAssembler::Label ok(this); 488 CodeStubAssembler::Label ok(this);
491 CodeStubAssembler::Label stack_guard(this); 489 CodeStubAssembler::Label stack_guard(this);
492 490
493 Node* sp = LoadStackPointer(); 491 Node* sp = LoadStackPointer();
494 Node* stack_limit = Load( 492 Node* stack_limit = Load(
495 MachineType::Pointer(), 493 MachineType::Pointer(),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 #elif V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_X87 537 #elif V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_X87
540 return true; 538 return true;
541 #else 539 #else
542 #error "Unknown Architecture" 540 #error "Unknown Architecture"
543 #endif 541 #endif
544 } 542 }
545 543
546 } // namespace interpreter 544 } // namespace interpreter
547 } // namespace internal 545 } // namespace internal
548 } // namespace v8 546 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/interpreter-assembler.h ('k') | src/mips/builtins-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698