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

Unified 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, 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/builtins/builtins.h ('k') | src/builtins/ia32/builtins-ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/builtins/builtins-conversion.cc
diff --git a/src/builtins/builtins-conversion.cc b/src/builtins/builtins-conversion.cc
index 77a3e2f2eb6fdca3bc696673a31289f01a6d4986..eccec6b8b9e01b572926324c385fd87372055224 100644
--- a/src/builtins/builtins-conversion.cc
+++ b/src/builtins/builtins-conversion.cc
@@ -151,6 +151,63 @@ void Builtins::Generate_ToNumber(CodeStubAssembler* assembler) {
assembler->Return(assembler->ToNumber(context, input));
}
+void Builtins::Generate_ToString(CodeStubAssembler* assembler) {
+ typedef CodeStubAssembler::Label Label;
+ typedef compiler::Node Node;
+ typedef TypeConversionDescriptor Descriptor;
+
+ Node* input = assembler->Parameter(Descriptor::kArgument);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ Label is_number(assembler);
+ Label runtime(assembler);
+
+ assembler->GotoIf(assembler->WordIsSmi(input), &is_number);
+
+ Node* input_map = assembler->LoadMap(input);
+ Node* input_instance_type = assembler->LoadMapInstanceType(input_map);
+
+ Label not_string(assembler);
+ assembler->GotoIf(
+ assembler->Int32GreaterThanOrEqual(
+ input_instance_type, assembler->Int32Constant(FIRST_NONSTRING_TYPE)),
+ &not_string);
+ assembler->Return(input);
+
+ Label not_heap_number(assembler);
+
+ assembler->Bind(&not_string);
+ {
+ assembler->GotoUnless(
+ assembler->WordEqual(input_map, assembler->HeapNumberMapConstant()),
+ &not_heap_number);
+ assembler->Goto(&is_number);
+ }
+
+ assembler->Bind(&is_number);
+ {
+ // TODO(tebbi): inline as soon as NumberToString is in the CodeStubAssembler
+ Callable callable = CodeFactory::NumberToString(assembler->isolate());
+ assembler->Return(assembler->CallStub(callable, context, input));
+ }
+
+ assembler->Bind(&not_heap_number);
+ {
+ assembler->GotoIf(
+ assembler->Word32NotEqual(input_instance_type,
+ assembler->Int32Constant(ODDBALL_TYPE)),
+ &runtime);
+ assembler->Return(
+ assembler->LoadObjectField(input, Oddball::kToStringOffset));
+ }
+
+ assembler->Bind(&runtime);
+ {
+ assembler->Return(
+ assembler->CallRuntime(Runtime::kToString, context, input));
+ }
+}
+
Handle<Code> Builtins::OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint) {
switch (hint) {
case OrdinaryToPrimitiveHint::kNumber:
« 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