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

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

Issue 2076953002: [turbofan] CodeAssembler is now able to generate calls of JavaScript objects. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@add-test-code-assember
Patch Set: Created 4 years, 6 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/compiler/code-assembler.h ('k') | test/cctest/compiler/function-tester.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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 if (!FLAG_code_comments) return; 167 if (!FLAG_code_comments) return;
168 char buffer[4 * KB]; 168 char buffer[4 * KB];
169 StringBuilder builder(buffer, arraysize(buffer)); 169 StringBuilder builder(buffer, arraysize(buffer));
170 va_list arguments; 170 va_list arguments;
171 va_start(arguments, format); 171 va_start(arguments, format);
172 builder.AddFormattedList(format, arguments); 172 builder.AddFormattedList(format, arguments);
173 va_end(arguments); 173 va_end(arguments);
174 174
175 // Copy the string before recording it in the assembler to avoid 175 // Copy the string before recording it in the assembler to avoid
176 // issues when the stack allocated buffer goes out of scope. 176 // issues when the stack allocated buffer goes out of scope.
177 size_t length = builder.position() + 3; 177 const int prefix_len = 2;
178 char* copy = reinterpret_cast<char*>(malloc(static_cast<int>(length))); 178 int length = builder.position() + 1;
179 MemCopy(copy + 2, builder.Finalize(), length); 179 char* copy = reinterpret_cast<char*>(malloc(length + prefix_len));
180 MemCopy(copy + prefix_len, builder.Finalize(), length);
180 copy[0] = ';'; 181 copy[0] = ';';
181 copy[1] = ' '; 182 copy[1] = ' ';
182 raw_assembler_->Comment(copy); 183 raw_assembler_->Comment(copy);
183 } 184 }
184 185
185 void CodeAssembler::Bind(CodeAssembler::Label* label) { return label->Bind(); } 186 void CodeAssembler::Bind(CodeAssembler::Label* label) { return label->Bind(); }
186 187
187 Node* CodeAssembler::LoadFramePointer() { 188 Node* CodeAssembler::LoadFramePointer() {
188 return raw_assembler_->LoadFramePointer(); 189 return raw_assembler_->LoadFramePointer();
189 } 190 }
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 571
571 Node* CodeAssembler::TailCallBytecodeDispatch( 572 Node* CodeAssembler::TailCallBytecodeDispatch(
572 const CallInterfaceDescriptor& interface_descriptor, 573 const CallInterfaceDescriptor& interface_descriptor,
573 Node* code_target_address, Node** args) { 574 Node* code_target_address, Node** args) {
574 CallDescriptor* descriptor = Linkage::GetBytecodeDispatchCallDescriptor( 575 CallDescriptor* descriptor = Linkage::GetBytecodeDispatchCallDescriptor(
575 isolate(), zone(), interface_descriptor, 576 isolate(), zone(), interface_descriptor,
576 interface_descriptor.GetStackParameterCount()); 577 interface_descriptor.GetStackParameterCount());
577 return raw_assembler_->TailCallN(descriptor, code_target_address, args); 578 return raw_assembler_->TailCallN(descriptor, code_target_address, args);
578 } 579 }
579 580
581 Node* CodeAssembler::CallJS(Callable const& callable, Node* context,
582 Node* function, Node* receiver,
583 size_t result_size) {
584 const int argc = 0;
585 CallDescriptor* call_descriptor = Linkage::GetStubCallDescriptor(
586 isolate(), zone(), callable.descriptor(), argc + 1,
587 CallDescriptor::kNoFlags, Operator::kNoProperties,
588 MachineType::AnyTagged(), result_size);
589 Node* target = HeapConstant(callable.code());
590
591 Node** args = zone()->NewArray<Node*>(argc + 4);
592 args[0] = function;
593 args[1] = Int32Constant(argc);
594 args[2] = receiver;
595 args[3] = context;
596
597 return CallN(call_descriptor, target, args);
598 }
599
600 Node* CodeAssembler::CallJS(Callable const& callable, Node* context,
601 Node* function, Node* receiver, Node* arg1,
602 size_t result_size) {
603 const int argc = 1;
604 CallDescriptor* call_descriptor = Linkage::GetStubCallDescriptor(
605 isolate(), zone(), callable.descriptor(), argc + 1,
606 CallDescriptor::kNoFlags, Operator::kNoProperties,
607 MachineType::AnyTagged(), result_size);
608 Node* target = HeapConstant(callable.code());
609
610 Node** args = zone()->NewArray<Node*>(argc + 4);
611 args[0] = function;
612 args[1] = Int32Constant(argc);
613 args[2] = receiver;
614 args[3] = arg1;
615 args[4] = context;
616
617 return CallN(call_descriptor, target, args);
618 }
619
620 Node* CodeAssembler::CallJS(Callable const& callable, Node* context,
621 Node* function, Node* receiver, Node* arg1,
622 Node* arg2, size_t result_size) {
623 const int argc = 2;
624 CallDescriptor* call_descriptor = Linkage::GetStubCallDescriptor(
625 isolate(), zone(), callable.descriptor(), argc + 1,
626 CallDescriptor::kNoFlags, Operator::kNoProperties,
627 MachineType::AnyTagged(), result_size);
628 Node* target = HeapConstant(callable.code());
629
630 Node** args = zone()->NewArray<Node*>(argc + 4);
631 args[0] = function;
632 args[1] = Int32Constant(argc);
633 args[2] = receiver;
634 args[3] = arg1;
635 args[4] = arg2;
636 args[5] = context;
637
638 return CallN(call_descriptor, target, args);
639 }
640
580 void CodeAssembler::Goto(CodeAssembler::Label* label) { 641 void CodeAssembler::Goto(CodeAssembler::Label* label) {
581 label->MergeVariables(); 642 label->MergeVariables();
582 raw_assembler_->Goto(label->label_); 643 raw_assembler_->Goto(label->label_);
583 } 644 }
584 645
585 void CodeAssembler::GotoIf(Node* condition, Label* true_label) { 646 void CodeAssembler::GotoIf(Node* condition, Label* true_label) {
586 Label false_label(this); 647 Label false_label(this);
587 Branch(condition, true_label, &false_label); 648 Branch(condition, true_label, &false_label);
588 Bind(&false_label); 649 Bind(&false_label);
589 } 650 }
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 } 832 }
772 } 833 }
773 } 834 }
774 835
775 bound_ = true; 836 bound_ = true;
776 } 837 }
777 838
778 } // namespace compiler 839 } // namespace compiler
779 } // namespace internal 840 } // namespace internal
780 } // namespace v8 841 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-assembler.h ('k') | test/cctest/compiler/function-tester.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698