Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index a9b647ca80095acce040ac6a3823dc16dae6ea48..d34a0504357cc79daeb185a2fb9fccd458faa372 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -3878,6 +3878,39 @@ void ToStringStub::Generate(MacroAssembler* masm) { |
} |
+void ToNameStub::Generate(MacroAssembler* masm) { |
+ // The ToName stub takes one argument in x0. |
+ Label is_number; |
+ __ JumpIfSmi(x0, &is_number); |
+ |
+ Label not_name; |
+ STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE); |
+ __ JumpIfObjectType(x0, x1, x1, LAST_NAME_TYPE, ¬_name, hi); |
+ // x0: receiver |
+ // x1: receiver instance type |
+ __ Ret(); |
+ __ Bind(¬_name); |
+ |
+ Label not_heap_number; |
+ __ Cmp(x1, HEAP_NUMBER_TYPE); |
+ __ B(ne, ¬_heap_number); |
+ __ Bind(&is_number); |
+ NumberToStringStub stub(isolate()); |
+ __ TailCallStub(&stub); |
+ __ Bind(¬_heap_number); |
+ |
+ Label not_oddball; |
+ __ Cmp(x1, ODDBALL_TYPE); |
+ __ B(ne, ¬_oddball); |
+ __ Ldr(x0, FieldMemOperand(x0, Oddball::kToStringOffset)); |
+ __ Ret(); |
+ __ Bind(¬_oddball); |
+ |
+ __ Push(x0); // Push argument. |
+ __ TailCallRuntime(Runtime::kToName); |
+} |
+ |
+ |
void StringHelper::GenerateFlatOneByteStringEquals( |
MacroAssembler* masm, Register left, Register right, Register scratch1, |
Register scratch2, Register scratch3) { |