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

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: address comments and add ports 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 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 void InterpreterAssembler::JumpIfWordNotEqual(Node* lhs, Node* rhs, 401 void InterpreterAssembler::JumpIfWordNotEqual(Node* lhs, Node* rhs,
402 Node* delta) { 402 Node* delta) {
403 JumpConditional(WordNotEqual(lhs, rhs), delta); 403 JumpConditional(WordNotEqual(lhs, rhs), delta);
404 } 404 }
405 405
406 void InterpreterAssembler::Dispatch() { 406 void InterpreterAssembler::Dispatch() {
407 DispatchTo(Advance(Bytecodes::Size(bytecode_))); 407 DispatchTo(Advance(Bytecodes::Size(bytecode_)));
408 } 408 }
409 409
410 void InterpreterAssembler::DispatchTo(Node* new_bytecode_offset) { 410 void InterpreterAssembler::DispatchTo(Node* new_bytecode_offset) {
411 if (FLAG_trace_ignition) {
412 TraceBytecode(Runtime::kInterpreterTraceBytecodeExit);
413 }
414 Node* target_bytecode = Load( 411 Node* target_bytecode = Load(
415 MachineType::Uint8(), BytecodeArrayTaggedPointer(), new_bytecode_offset); 412 MachineType::Uint8(), BytecodeArrayTaggedPointer(), new_bytecode_offset);
416 413
417 // TODO(rmcilroy): Create a code target dispatch table to avoid conversion 414 // TODO(rmcilroy): Create a code target dispatch table to avoid conversion
418 // from code object on every dispatch. 415 // from code object on every dispatch.
419 Node* target_code_object = 416 Node* target_code_object =
420 Load(MachineType::Pointer(), DispatchTableRawPointer(), 417 Load(MachineType::Pointer(), DispatchTableRawPointer(),
421 Word32Shl(target_bytecode, Int32Constant(kPointerSizeLog2))); 418 Word32Shl(target_bytecode, Int32Constant(kPointerSizeLog2)));
422 419
420 DispatchToBytecodeHandler(target_code_object, new_bytecode_offset);
421 }
422
423 void InterpreterAssembler::DispatchToBytecodeHandler(Node* handler,
424 Node* bytecode_offset) {
425 if (FLAG_trace_ignition) {
426 TraceBytecode(Runtime::kInterpreterTraceBytecodeExit);
427 }
428
429 if (bytecode_offset == nullptr) bytecode_offset = BytecodeOffset();
rmcilroy 2016/02/19 14:47:16 Could you avoid this and the default argument type
430
423 InterpreterDispatchDescriptor descriptor(isolate()); 431 InterpreterDispatchDescriptor descriptor(isolate());
424 Node* args[] = {GetAccumulator(), RegisterFileRawPointer(), 432 Node* args[] = {GetAccumulator(), RegisterFileRawPointer(),
425 new_bytecode_offset, BytecodeArrayTaggedPointer(), 433 bytecode_offset, BytecodeArrayTaggedPointer(),
426 DispatchTableRawPointer(), GetContext()}; 434 DispatchTableRawPointer(), GetContext()};
427 TailCall(descriptor, target_code_object, args, 0); 435 TailCall(descriptor, handler, args, 0);
428 } 436 }
429 437
430 void InterpreterAssembler::InterpreterReturn() { 438 void InterpreterAssembler::InterpreterReturn() {
431 if (FLAG_trace_ignition) {
432 TraceBytecode(Runtime::kInterpreterTraceBytecodeExit);
433 }
434 InterpreterDispatchDescriptor descriptor(isolate());
435 Node* exit_trampoline_code_object = 439 Node* exit_trampoline_code_object =
436 HeapConstant(isolate()->builtins()->InterpreterExitTrampoline()); 440 HeapConstant(isolate()->builtins()->InterpreterExitTrampoline());
437 Node* args[] = {GetAccumulator(), RegisterFileRawPointer(), 441 DispatchToBytecodeHandler(exit_trampoline_code_object);
438 BytecodeOffset(), BytecodeArrayTaggedPointer(),
439 DispatchTableRawPointer(), GetContext()};
440 TailCall(descriptor, exit_trampoline_code_object, args, 0);
441 } 442 }
442 443
443 void InterpreterAssembler::StackCheck() { 444 void InterpreterAssembler::StackCheck() {
444 CodeStubAssembler::Label end(this); 445 CodeStubAssembler::Label end(this);
445 CodeStubAssembler::Label ok(this); 446 CodeStubAssembler::Label ok(this);
446 CodeStubAssembler::Label stack_guard(this); 447 CodeStubAssembler::Label stack_guard(this);
447 448
448 Node* sp = LoadStackPointer(); 449 Node* sp = LoadStackPointer();
449 Node* stack_limit = Load( 450 Node* stack_limit = Load(
450 MachineType::Pointer(), 451 MachineType::Pointer(),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 #elif V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_X87 495 #elif V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_X87
495 return true; 496 return true;
496 #else 497 #else
497 #error "Unknown Architecture" 498 #error "Unknown Architecture"
498 #endif 499 #endif
499 } 500 }
500 501
501 } // namespace interpreter 502 } // namespace interpreter
502 } // namespace internal 503 } // namespace internal
503 } // namespace v8 504 } // 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