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

Side by Side Diff: src/interpreter/interpreter-assembler.cc

Issue 2571563004: [Turbofan] Implement super calls with spread bytecode in assembly code. (Closed)
Patch Set: MIPS64 port Created 3 years, 11 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/runtime/runtime.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/interpreter/interpreter-assembler.h" 5 #include "src/interpreter/interpreter-assembler.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <ostream> 8 #include <ostream>
9 9
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 Node* feedback_value = LoadWeakCellValueUnchecked(feedback_element); 711 Node* feedback_value = LoadWeakCellValueUnchecked(feedback_element);
712 Node* is_monomorphic = WordEqual(constructor, feedback_value); 712 Node* is_monomorphic = WordEqual(constructor, feedback_value);
713 allocation_feedback.Bind(UndefinedConstant()); 713 allocation_feedback.Bind(UndefinedConstant());
714 Branch(is_monomorphic, &call_construct_function, &extra_checks); 714 Branch(is_monomorphic, &call_construct_function, &extra_checks);
715 715
716 Bind(&call_construct_function); 716 Bind(&call_construct_function);
717 { 717 {
718 Comment("call using callConstructFunction"); 718 Comment("call using callConstructFunction");
719 IncrementCallCount(type_feedback_vector, slot_id); 719 IncrementCallCount(type_feedback_vector, slot_id);
720 Callable callable_function = CodeFactory::InterpreterPushArgsAndConstruct( 720 Callable callable_function = CodeFactory::InterpreterPushArgsAndConstruct(
721 isolate(), CallableType::kJSFunction); 721 isolate(), PushArgsConstructMode::kJSFunction);
722 return_value.Bind(CallStub(callable_function.descriptor(), 722 return_value.Bind(CallStub(callable_function.descriptor(),
723 HeapConstant(callable_function.code()), context, 723 HeapConstant(callable_function.code()), context,
724 arg_count, new_target, constructor, 724 arg_count, new_target, constructor,
725 allocation_feedback.value(), first_arg)); 725 allocation_feedback.value(), first_arg));
726 Goto(&end); 726 Goto(&end);
727 } 727 }
728 728
729 Bind(&extra_checks); 729 Bind(&extra_checks);
730 { 730 {
731 Label check_allocation_site(this), check_initialized(this), 731 Label check_allocation_site(this), check_initialized(this),
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 HeapConstant(TypeFeedbackVector::MegamorphicSentinel(isolate())), 814 HeapConstant(TypeFeedbackVector::MegamorphicSentinel(isolate())),
815 SKIP_WRITE_BARRIER); 815 SKIP_WRITE_BARRIER);
816 Goto(&call_construct_function); 816 Goto(&call_construct_function);
817 } 817 }
818 } 818 }
819 819
820 Bind(&call_construct); 820 Bind(&call_construct);
821 { 821 {
822 Comment("call using callConstruct builtin"); 822 Comment("call using callConstruct builtin");
823 Callable callable = CodeFactory::InterpreterPushArgsAndConstruct( 823 Callable callable = CodeFactory::InterpreterPushArgsAndConstruct(
824 isolate(), CallableType::kAny); 824 isolate(), PushArgsConstructMode::kOther);
825 Node* code_target = HeapConstant(callable.code()); 825 Node* code_target = HeapConstant(callable.code());
826 return_value.Bind(CallStub(callable.descriptor(), code_target, context, 826 return_value.Bind(CallStub(callable.descriptor(), code_target, context,
827 arg_count, new_target, constructor, 827 arg_count, new_target, constructor,
828 UndefinedConstant(), first_arg)); 828 UndefinedConstant(), first_arg));
829 Goto(&end); 829 Goto(&end);
830 } 830 }
831 831
832 Bind(&end); 832 Bind(&end);
833 return return_value.value(); 833 return return_value.value();
834 } 834 }
835 835
836 Node* InterpreterAssembler::CallConstructWithSpread(Node* constructor,
837 Node* context,
838 Node* new_target,
839 Node* first_arg,
840 Node* arg_count) {
841 Variable return_value(this, MachineRepresentation::kTagged);
842 Comment("call using ConstructWithSpread");
843 Callable callable = CodeFactory::InterpreterPushArgsAndConstruct(
844 isolate(), PushArgsConstructMode::kWithFinalSpread);
845 Node* code_target = HeapConstant(callable.code());
846 return_value.Bind(CallStub(callable.descriptor(), code_target, context,
847 arg_count, new_target, constructor,
848 UndefinedConstant(), first_arg));
849
850 return return_value.value();
851 }
852
836 Node* InterpreterAssembler::CallRuntimeN(Node* function_id, Node* context, 853 Node* InterpreterAssembler::CallRuntimeN(Node* function_id, Node* context,
837 Node* first_arg, Node* arg_count, 854 Node* first_arg, Node* arg_count,
838 int result_size) { 855 int result_size) {
839 Callable callable = CodeFactory::InterpreterCEntry(isolate(), result_size); 856 Callable callable = CodeFactory::InterpreterCEntry(isolate(), result_size);
840 Node* code_target = HeapConstant(callable.code()); 857 Node* code_target = HeapConstant(callable.code());
841 858
842 // Get the function entry from the function id. 859 // Get the function entry from the function id.
843 Node* function_table = ExternalConstant( 860 Node* function_table = ExternalConstant(
844 ExternalReference::runtime_function_table_address(isolate())); 861 ExternalReference::runtime_function_table_address(isolate()));
845 Node* function_offset = 862 Node* function_offset =
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 Goto(&loop); 1320 Goto(&loop);
1304 } 1321 }
1305 Bind(&done_loop); 1322 Bind(&done_loop);
1306 1323
1307 return array; 1324 return array;
1308 } 1325 }
1309 1326
1310 } // namespace interpreter 1327 } // namespace interpreter
1311 } // namespace internal 1328 } // namespace internal
1312 } // namespace v8 1329 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/interpreter-assembler.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698