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

Side by Side Diff: src/code-stubs.cc

Issue 2302923002: [stubs] Port ToName stub to TurboFan. (Closed)
Patch Set: Created 4 years, 3 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/code-stubs.h ('k') | src/ia32/code-stubs-ia32.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 4645 matching lines...) Expand 10 before | Expand all | Expand 10 after
4656 } 4656 }
4657 4657
4658 assembler->Bind(&return_arg); 4658 assembler->Bind(&return_arg);
4659 assembler->Return(var_arg.value()); 4659 assembler->Return(var_arg.value());
4660 4660
4661 assembler->Bind(&return_zero); 4661 assembler->Bind(&return_zero);
4662 assembler->Return(assembler->SmiConstant(Smi::FromInt(0))); 4662 assembler->Return(assembler->SmiConstant(Smi::FromInt(0)));
4663 } 4663 }
4664 } 4664 }
4665 4665
4666 compiler::Node* ToNameStub::Generate(CodeStubAssembler* assembler,
4667 compiler::Node* value,
4668 compiler::Node* context) {
4669 typedef CodeStubAssembler::Label Label;
4670 typedef compiler::Node Node;
4671 typedef CodeStubAssembler::Variable Variable;
4672
4673 Label end(assembler);
4674 Variable var_result(assembler, MachineRepresentation::kTagged);
4675
4676 Label is_number(assembler, Label::kDeferred);
4677 assembler->GotoIf(assembler->WordIsSmi(value), &is_number);
4678
4679 Label not_name(assembler, Label::kDeferred);
4680 Node* value_instance_type = assembler->LoadInstanceType(value);
4681 assembler->GotoIf(
4682 assembler->Int32GreaterThan(value_instance_type,
4683 assembler->Int32Constant(LAST_NAME_TYPE)),
4684 &not_name);
4685
4686 var_result.Bind(value);
4687 assembler->Goto(&end);
4688
4689 assembler->Bind(&is_number);
4690 {
4691 Callable callable = CodeFactory::NumberToString(assembler->isolate());
4692 var_result.Bind(assembler->CallStub(callable, context, value));
Benedikt Meurer 2016/09/02 04:36:25 You can tail call to the stub here.
4693 assembler->Goto(&end);
4694 }
4695
4696 assembler->Bind(&not_name);
4697 {
4698 assembler->GotoIf(
4699 assembler->Word32Equal(value_instance_type,
4700 assembler->Int32Constant(HEAP_NUMBER_TYPE)),
4701 &is_number);
4702
4703 Label not_oddball(assembler, Label::kDeferred);
4704 assembler->GotoIf(
4705 assembler->Word32NotEqual(value_instance_type,
4706 assembler->Int32Constant(ODDBALL_TYPE)),
4707 &not_oddball);
4708
4709 var_result.Bind(
4710 assembler->LoadObjectField(value, Oddball::kToStringOffset));
4711 assembler->Goto(&end);
4712
4713 assembler->Bind(&not_oddball);
4714 {
4715 var_result.Bind(assembler->CallRuntime(Runtime::kToName, context, value));
Benedikt Meurer 2016/09/02 04:36:25 Likewise you can tail call to the runtime here.
4716 assembler->Goto(&end);
4717 }
4718 }
4719
4720 assembler->Bind(&end);
4721 return var_result.value();
4722 }
4723
4666 void StoreInterceptorStub::GenerateAssembly( 4724 void StoreInterceptorStub::GenerateAssembly(
4667 CodeStubAssembler* assembler) const { 4725 CodeStubAssembler* assembler) const {
4668 typedef compiler::Node Node; 4726 typedef compiler::Node Node;
4669 4727
4670 Node* receiver = assembler->Parameter(Descriptor::kReceiver); 4728 Node* receiver = assembler->Parameter(Descriptor::kReceiver);
4671 Node* name = assembler->Parameter(Descriptor::kName); 4729 Node* name = assembler->Parameter(Descriptor::kName);
4672 Node* value = assembler->Parameter(Descriptor::kValue); 4730 Node* value = assembler->Parameter(Descriptor::kValue);
4673 Node* context = assembler->Parameter(Descriptor::kContext); 4731 Node* context = assembler->Parameter(Descriptor::kContext);
4674 assembler->TailCallRuntime(Runtime::kStorePropertyWithInterceptor, context, 4732 assembler->TailCallRuntime(Runtime::kStorePropertyWithInterceptor, context,
4675 receiver, name, value); 4733 receiver, name, value);
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
5081 5139
5082 Node* has_property = GenerateHasProperty(assembler, object, key, context, 5140 Node* has_property = GenerateHasProperty(assembler, object, key, context,
5083 Runtime::kForInHasProperty); 5141 Runtime::kForInHasProperty);
5084 5142
5085 assembler->Branch( 5143 assembler->Branch(
5086 assembler->WordEqual(has_property, assembler->BooleanConstant(true)), 5144 assembler->WordEqual(has_property, assembler->BooleanConstant(true)),
5087 &return_to_name, &return_undefined); 5145 &return_to_name, &return_undefined);
5088 5146
5089 assembler->Bind(&return_to_name); 5147 assembler->Bind(&return_to_name);
5090 { 5148 {
5091 // TODO(cbruni): inline ToName here. 5149 var_result.Bind(ToNameStub::Generate(assembler, key, context));
5092 Callable callable = CodeFactory::ToName(assembler->isolate());
5093 var_result.Bind(assembler->CallStub(callable, context, key));
5094 assembler->Goto(&end); 5150 assembler->Goto(&end);
5095 } 5151 }
5096 5152
5097 assembler->Bind(&return_undefined); 5153 assembler->Bind(&return_undefined);
5098 { 5154 {
5099 var_result.Bind(assembler->UndefinedConstant()); 5155 var_result.Bind(assembler->UndefinedConstant());
5100 assembler->Goto(&end); 5156 assembler->Goto(&end);
5101 } 5157 }
5102 5158
5103 assembler->Bind(&end); 5159 assembler->Bind(&end);
(...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after
5849 if (type->Is(Type::UntaggedPointer())) { 5905 if (type->Is(Type::UntaggedPointer())) {
5850 return Representation::External(); 5906 return Representation::External();
5851 } 5907 }
5852 5908
5853 DCHECK(!type->Is(Type::Untagged())); 5909 DCHECK(!type->Is(Type::Untagged()));
5854 return Representation::Tagged(); 5910 return Representation::Tagged();
5855 } 5911 }
5856 5912
5857 } // namespace internal 5913 } // namespace internal
5858 } // namespace v8 5914 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs.h ('k') | src/ia32/code-stubs-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698