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

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

Issue 2579163003: [turbofan] Combine family of CallJS() methods into single implementation. (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') | no next file » | 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 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 #undef INSTANTIATE 478 #undef INSTANTIATE
479 479
480 template <class... TArgs> 480 template <class... TArgs>
481 Node* CodeAssembler::CallStubR(const CallInterfaceDescriptor& descriptor, 481 Node* CodeAssembler::CallStubR(const CallInterfaceDescriptor& descriptor,
482 size_t result_size, Node* target, Node* context, 482 size_t result_size, Node* target, Node* context,
483 TArgs... args) { 483 TArgs... args) {
484 Node* nodes[] = {target, args..., context}; 484 Node* nodes[] = {target, args..., context};
485 return CallStubN(descriptor, result_size, arraysize(nodes), nodes); 485 return CallStubN(descriptor, result_size, arraysize(nodes), nodes);
486 } 486 }
487 487
488 // Instantiate CallStubR() with up to 5 arguments. 488 // Instantiate CallStubR() with up to 6 arguments.
489 #define INSTANTIATE(...) \ 489 #define INSTANTIATE(...) \
490 template V8_EXPORT_PRIVATE Node* CodeAssembler::CallStubR( \ 490 template V8_EXPORT_PRIVATE Node* CodeAssembler::CallStubR( \
491 const CallInterfaceDescriptor& descriptor, size_t, Node*, __VA_ARGS__); 491 const CallInterfaceDescriptor& descriptor, size_t, Node*, __VA_ARGS__);
492 REPEAT_1_TO_6(INSTANTIATE, Node*) 492 REPEAT_1_TO_7(INSTANTIATE, Node*)
493 #undef INSTANTIATE 493 #undef INSTANTIATE
494 494
495 Node* CodeAssembler::CallStubN(const CallInterfaceDescriptor& descriptor, 495 Node* CodeAssembler::CallStubN(const CallInterfaceDescriptor& descriptor,
496 size_t result_size, int input_count, 496 size_t result_size, int input_count,
497 Node* const* inputs) { 497 Node* const* inputs) {
498 // 2 is for target and context. 498 // 2 is for target and context.
499 DCHECK_LE(2, input_count); 499 DCHECK_LE(2, input_count);
500 int argc = input_count - 2; 500 int argc = input_count - 2;
501 DCHECK_LE(descriptor.GetParameterCount(), argc); 501 DCHECK_LE(descriptor.GetParameterCount(), argc);
502 // Extra arguments not mentioned in the descriptor are passed on the stack. 502 // Extra arguments not mentioned in the descriptor are passed on the stack.
503 int stack_parameter_count = argc - descriptor.GetRegisterParameterCount(); 503 int stack_parameter_count = argc - descriptor.GetRegisterParameterCount();
504 DCHECK_LE(descriptor.GetStackParameterCount(), stack_parameter_count); 504 DCHECK_LE(descriptor.GetStackParameterCount(), stack_parameter_count);
505 CallDescriptor* desc = Linkage::GetStubCallDescriptor( 505 CallDescriptor* desc = Linkage::GetStubCallDescriptor(
506 isolate(), zone(), descriptor, stack_parameter_count, 506 isolate(), zone(), descriptor, stack_parameter_count,
507 CallDescriptor::kNoFlags, Operator::kNoProperties, 507 CallDescriptor::kNoFlags, Operator::kNoProperties,
508 MachineType::AnyTagged(), result_size); 508 MachineType::AnyTagged(), result_size);
509 509
510 CallPrologue(); 510 CallPrologue();
511 Node* return_value = raw_assembler()->CallN(desc, input_count, inputs); 511 Node* return_value = raw_assembler()->CallN(desc, input_count, inputs);
512 CallEpilogue(); 512 CallEpilogue();
513 return return_value; 513 return return_value;
514 } 514 }
515 515
516 Node* CodeAssembler::CallStubN(const CallInterfaceDescriptor& descriptor,
517 int js_parameter_count, Node* target,
518 Node** args, size_t result_size) {
519 CallDescriptor* call_descriptor = Linkage::GetStubCallDescriptor(
520 isolate(), zone(), descriptor,
521 descriptor.GetStackParameterCount() + js_parameter_count,
522 CallDescriptor::kNoFlags, Operator::kNoProperties,
523 MachineType::AnyTagged(), result_size);
524
525 return CallN(call_descriptor, target, args);
526 }
527
528 Node* CodeAssembler::TailCallStub(Callable const& callable, Node* context, 516 Node* CodeAssembler::TailCallStub(Callable const& callable, Node* context,
529 Node* arg1, size_t result_size) { 517 Node* arg1, size_t result_size) {
530 Node* target = HeapConstant(callable.code()); 518 Node* target = HeapConstant(callable.code());
531 return TailCallStub(callable.descriptor(), target, context, arg1, 519 return TailCallStub(callable.descriptor(), target, context, arg1,
532 result_size); 520 result_size);
533 } 521 }
534 522
535 Node* CodeAssembler::TailCallStub(Callable const& callable, Node* context, 523 Node* CodeAssembler::TailCallStub(Callable const& callable, Node* context,
536 Node* arg1, Node* arg2, size_t result_size) { 524 Node* arg1, Node* arg2, size_t result_size) {
537 Node* target = HeapConstant(callable.code()); 525 Node* target = HeapConstant(callable.code());
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 661
674 Node* CodeAssembler::TailCallBytecodeDispatch( 662 Node* CodeAssembler::TailCallBytecodeDispatch(
675 const CallInterfaceDescriptor& interface_descriptor, 663 const CallInterfaceDescriptor& interface_descriptor,
676 Node* code_target_address, Node** args) { 664 Node* code_target_address, Node** args) {
677 CallDescriptor* descriptor = Linkage::GetBytecodeDispatchCallDescriptor( 665 CallDescriptor* descriptor = Linkage::GetBytecodeDispatchCallDescriptor(
678 isolate(), zone(), interface_descriptor, 666 isolate(), zone(), interface_descriptor,
679 interface_descriptor.GetStackParameterCount()); 667 interface_descriptor.GetStackParameterCount());
680 return raw_assembler()->TailCallN(descriptor, code_target_address, args); 668 return raw_assembler()->TailCallN(descriptor, code_target_address, args);
681 } 669 }
682 670
683 Node* CodeAssembler::CallJS(Callable const& callable, Node* context,
684 Node* function, Node* receiver,
685 size_t result_size) {
686 const int argc = 0;
687 Node* target = HeapConstant(callable.code());
688
689 Node** args = zone()->NewArray<Node*>(argc + 4);
690 args[0] = function;
691 args[1] = Int32Constant(argc);
692 args[2] = receiver;
693 args[3] = context;
694
695 return CallStubN(callable.descriptor(), argc + 1, target, args, result_size);
696 }
697
698 Node* CodeAssembler::CallJS(Callable const& callable, Node* context,
699 Node* function, Node* receiver, Node* arg1,
700 size_t result_size) {
701 const int argc = 1;
702 Node* target = HeapConstant(callable.code());
703
704 Node** args = zone()->NewArray<Node*>(argc + 4);
705 args[0] = function;
706 args[1] = Int32Constant(argc);
707 args[2] = receiver;
708 args[3] = arg1;
709 args[4] = context;
710
711 return CallStubN(callable.descriptor(), argc + 1, target, args, result_size);
712 }
713
714 Node* CodeAssembler::CallJS(Callable const& callable, Node* context,
715 Node* function, Node* receiver, Node* arg1,
716 Node* arg2, size_t result_size) {
717 const int argc = 2;
718 Node* target = HeapConstant(callable.code());
719
720 Node** args = zone()->NewArray<Node*>(argc + 4);
721 args[0] = function;
722 args[1] = Int32Constant(argc);
723 args[2] = receiver;
724 args[3] = arg1;
725 args[4] = arg2;
726 args[5] = context;
727
728 return CallStubN(callable.descriptor(), argc + 1, target, args, result_size);
729 }
730
731 Node* CodeAssembler::CallJS(Callable const& callable, Node* context,
732 Node* function, Node* receiver, Node* arg1,
733 Node* arg2, Node* arg3, size_t result_size) {
734 const int argc = 3;
735 Node* target = HeapConstant(callable.code());
736
737 Node** args = zone()->NewArray<Node*>(argc + 4);
738 args[0] = function;
739 args[1] = Int32Constant(argc);
740 args[2] = receiver;
741 args[3] = arg1;
742 args[4] = arg2;
743 args[5] = arg3;
744 args[6] = context;
745
746 return CallStubN(callable.descriptor(), argc + 1, target, args, result_size);
747 }
748
749 Node* CodeAssembler::CallCFunction2(MachineType return_type, 671 Node* CodeAssembler::CallCFunction2(MachineType return_type,
750 MachineType arg0_type, 672 MachineType arg0_type,
751 MachineType arg1_type, Node* function, 673 MachineType arg1_type, Node* function,
752 Node* arg0, Node* arg1) { 674 Node* arg0, Node* arg1) {
753 return raw_assembler()->CallCFunction2(return_type, arg0_type, arg1_type, 675 return raw_assembler()->CallCFunction2(return_type, arg0_type, arg1_type,
754 function, arg0, arg1); 676 function, arg0, arg1);
755 } 677 }
756 678
757 void CodeAssembler::Goto(Label* label) { 679 void CodeAssembler::Goto(Label* label) {
758 label->MergeVariables(); 680 label->MergeVariables();
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 } 874 }
953 } 875 }
954 } 876 }
955 877
956 bound_ = true; 878 bound_ = true;
957 } 879 }
958 880
959 } // namespace compiler 881 } // namespace compiler
960 } // namespace internal 882 } // namespace internal
961 } // namespace v8 883 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-assembler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698