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

Side by Side Diff: src/compiler/code-assembler.cc

Issue 2576213007: [interpreter] Avoid allocation of temporary array of Nodes when generating dispatch to bytecode han… (Closed)
Patch Set: Created 4 years 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/compiler/code-assembler.h ('k') | src/compiler/raw-machine-assembler.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/compiler/code-assembler.h" 5 #include "src/compiler/code-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/compiler/graph.h" 10 #include "src/compiler/graph.h"
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 const Operator* op = raw_assembler()->common()->IfException(); 398 const Operator* op = raw_assembler()->common()->IfException();
399 Node* exception_value = raw_assembler()->AddNode(op, node, node); 399 Node* exception_value = raw_assembler()->AddNode(op, node, node);
400 if (exception_var != nullptr) { 400 if (exception_var != nullptr) {
401 exception_var->Bind(exception_value); 401 exception_var->Bind(exception_value);
402 } 402 }
403 Goto(if_exception); 403 Goto(if_exception);
404 404
405 Bind(&success); 405 Bind(&success);
406 } 406 }
407 407
408 Node* CodeAssembler::CallN(CallDescriptor* descriptor, Node* code_target,
409 Node** args) {
410 CallPrologue();
411 Node* return_value = raw_assembler()->CallN(descriptor, code_target, args);
412 CallEpilogue();
413 return return_value;
414 }
415
416 Node* CodeAssembler::TailCallN(CallDescriptor* descriptor, Node* code_target,
417 Node** args) {
418 return raw_assembler()->TailCallN(descriptor, code_target, args);
419 }
420
421 template <class... TArgs> 408 template <class... TArgs>
422 Node* CodeAssembler::CallRuntime(Runtime::FunctionId function, Node* context, 409 Node* CodeAssembler::CallRuntime(Runtime::FunctionId function, Node* context,
423 TArgs... args) { 410 TArgs... args) {
424 int argc = static_cast<int>(sizeof...(args)); 411 int argc = static_cast<int>(sizeof...(args));
425 CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor( 412 CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor(
426 zone(), function, argc, Operator::kNoProperties, 413 zone(), function, argc, Operator::kNoProperties,
427 CallDescriptor::kNoFlags); 414 CallDescriptor::kNoFlags);
428 int return_count = static_cast<int>(desc->ReturnCount()); 415 int return_count = static_cast<int>(desc->ReturnCount());
429 416
430 Node* centry = 417 Node* centry =
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 return raw_assembler()->TailCallN(desc, arraysize(nodes), nodes); 515 return raw_assembler()->TailCallN(desc, arraysize(nodes), nodes);
529 } 516 }
530 517
531 // Instantiate TailCallStub() with up to 6 arguments. 518 // Instantiate TailCallStub() with up to 6 arguments.
532 #define INSTANTIATE(...) \ 519 #define INSTANTIATE(...) \
533 template V8_EXPORT_PRIVATE Node* CodeAssembler::TailCallStub( \ 520 template V8_EXPORT_PRIVATE Node* CodeAssembler::TailCallStub( \
534 const CallInterfaceDescriptor& descriptor, Node*, __VA_ARGS__); 521 const CallInterfaceDescriptor& descriptor, Node*, __VA_ARGS__);
535 REPEAT_1_TO_7(INSTANTIATE, Node*) 522 REPEAT_1_TO_7(INSTANTIATE, Node*)
536 #undef INSTANTIATE 523 #undef INSTANTIATE
537 524
525 template <class... TArgs>
538 Node* CodeAssembler::TailCallBytecodeDispatch( 526 Node* CodeAssembler::TailCallBytecodeDispatch(
539 const CallInterfaceDescriptor& interface_descriptor, 527 const CallInterfaceDescriptor& descriptor, Node* target, TArgs... args) {
540 Node* code_target_address, Node** args) { 528 DCHECK_EQ(descriptor.GetParameterCount(), sizeof...(args));
541 CallDescriptor* descriptor = Linkage::GetBytecodeDispatchCallDescriptor( 529 CallDescriptor* desc = Linkage::GetBytecodeDispatchCallDescriptor(
542 isolate(), zone(), interface_descriptor, 530 isolate(), zone(), descriptor, descriptor.GetStackParameterCount());
543 interface_descriptor.GetStackParameterCount()); 531
544 return raw_assembler()->TailCallN(descriptor, code_target_address, args); 532 Node* nodes[] = {target, args...};
533 return raw_assembler()->TailCallN(desc, arraysize(nodes), nodes);
545 } 534 }
546 535
536 // Instantiate TailCallBytecodeDispatch() with 4 arguments.
537 template V8_EXPORT_PRIVATE Node* CodeAssembler::TailCallBytecodeDispatch(
538 const CallInterfaceDescriptor& descriptor, Node* target, Node*, Node*,
539 Node*, Node*);
540
547 Node* CodeAssembler::CallCFunction2(MachineType return_type, 541 Node* CodeAssembler::CallCFunction2(MachineType return_type,
548 MachineType arg0_type, 542 MachineType arg0_type,
549 MachineType arg1_type, Node* function, 543 MachineType arg1_type, Node* function,
550 Node* arg0, Node* arg1) { 544 Node* arg0, Node* arg1) {
551 return raw_assembler()->CallCFunction2(return_type, arg0_type, arg1_type, 545 return raw_assembler()->CallCFunction2(return_type, arg0_type, arg1_type,
552 function, arg0, arg1); 546 function, arg0, arg1);
553 } 547 }
554 548
555 void CodeAssembler::Goto(Label* label) { 549 void CodeAssembler::Goto(Label* label) {
556 label->MergeVariables(); 550 label->MergeVariables();
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 } 744 }
751 } 745 }
752 } 746 }
753 747
754 bound_ = true; 748 bound_ = true;
755 } 749 }
756 750
757 } // namespace compiler 751 } // namespace compiler
758 } // namespace internal 752 } // namespace internal
759 } // namespace v8 753 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-assembler.h ('k') | src/compiler/raw-machine-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698