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

Side by Side Diff: src/builtins/builtins-conversion.cc

Issue 2380973002: [stubs] replaced ToString MacroAssembler Stub with CodeStubAssembler builtin (Closed)
Patch Set: Merge branch 'master' of https://chromium.googlesource.com/v8/v8 into ToStringTFStub Created 4 years, 2 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/builtins/builtins.h ('k') | src/builtins/ia32/builtins-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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/builtins/builtins.h" 5 #include "src/builtins/builtins.h"
6 #include "src/builtins/builtins-utils.h" 6 #include "src/builtins/builtins-utils.h"
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 void Builtins::Generate_ToNumber(CodeStubAssembler* assembler) { 144 void Builtins::Generate_ToNumber(CodeStubAssembler* assembler) {
145 typedef compiler::Node Node; 145 typedef compiler::Node Node;
146 typedef TypeConversionDescriptor Descriptor; 146 typedef TypeConversionDescriptor Descriptor;
147 147
148 Node* input = assembler->Parameter(Descriptor::kArgument); 148 Node* input = assembler->Parameter(Descriptor::kArgument);
149 Node* context = assembler->Parameter(Descriptor::kContext); 149 Node* context = assembler->Parameter(Descriptor::kContext);
150 150
151 assembler->Return(assembler->ToNumber(context, input)); 151 assembler->Return(assembler->ToNumber(context, input));
152 } 152 }
153 153
154 void Builtins::Generate_ToString(CodeStubAssembler* assembler) {
155 typedef CodeStubAssembler::Label Label;
156 typedef compiler::Node Node;
157 typedef TypeConversionDescriptor Descriptor;
158
159 Node* input = assembler->Parameter(Descriptor::kArgument);
160 Node* context = assembler->Parameter(Descriptor::kContext);
161
162 Label is_number(assembler);
163 Label runtime(assembler);
164
165 assembler->GotoIf(assembler->WordIsSmi(input), &is_number);
166
167 Node* input_map = assembler->LoadMap(input);
168 Node* input_instance_type = assembler->LoadMapInstanceType(input_map);
169
170 Label not_string(assembler);
171 assembler->GotoIf(
172 assembler->Int32GreaterThanOrEqual(
173 input_instance_type, assembler->Int32Constant(FIRST_NONSTRING_TYPE)),
174 &not_string);
175 assembler->Return(input);
176
177 Label not_heap_number(assembler);
178
179 assembler->Bind(&not_string);
180 {
181 assembler->GotoUnless(
182 assembler->WordEqual(input_map, assembler->HeapNumberMapConstant()),
183 &not_heap_number);
184 assembler->Goto(&is_number);
185 }
186
187 assembler->Bind(&is_number);
188 {
189 // TODO(tebbi): inline as soon as NumberToString is in the CodeStubAssembler
190 Callable callable = CodeFactory::NumberToString(assembler->isolate());
191 assembler->Return(assembler->CallStub(callable, context, input));
192 }
193
194 assembler->Bind(&not_heap_number);
195 {
196 assembler->GotoIf(
197 assembler->Word32NotEqual(input_instance_type,
198 assembler->Int32Constant(ODDBALL_TYPE)),
199 &runtime);
200 assembler->Return(
201 assembler->LoadObjectField(input, Oddball::kToStringOffset));
202 }
203
204 assembler->Bind(&runtime);
205 {
206 assembler->Return(
207 assembler->CallRuntime(Runtime::kToString, context, input));
208 }
209 }
210
154 Handle<Code> Builtins::OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint) { 211 Handle<Code> Builtins::OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint) {
155 switch (hint) { 212 switch (hint) {
156 case OrdinaryToPrimitiveHint::kNumber: 213 case OrdinaryToPrimitiveHint::kNumber:
157 return OrdinaryToPrimitive_Number(); 214 return OrdinaryToPrimitive_Number();
158 case OrdinaryToPrimitiveHint::kString: 215 case OrdinaryToPrimitiveHint::kString:
159 return OrdinaryToPrimitive_String(); 216 return OrdinaryToPrimitive_String();
160 } 217 }
161 UNREACHABLE(); 218 UNREACHABLE();
162 return Handle<Code>::null(); 219 return Handle<Code>::null();
163 } 220 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 316
260 assembler->Bind(&return_true); 317 assembler->Bind(&return_true);
261 assembler->Return(assembler->BooleanConstant(true)); 318 assembler->Return(assembler->BooleanConstant(true));
262 319
263 assembler->Bind(&return_false); 320 assembler->Bind(&return_false);
264 assembler->Return(assembler->BooleanConstant(false)); 321 assembler->Return(assembler->BooleanConstant(false));
265 } 322 }
266 323
267 } // namespace internal 324 } // namespace internal
268 } // namespace v8 325 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins.h ('k') | src/builtins/ia32/builtins-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698