Index: src/mips64/code-stubs-mips64.cc |
diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc |
index 751da944024cb0638ea7c466e248c16793259bc2..e7b4bab2452a2b45a0099d8864033caad93ea097 100644 |
--- a/src/mips64/code-stubs-mips64.cc |
+++ b/src/mips64/code-stubs-mips64.cc |
@@ -3318,6 +3318,39 @@ void ToStringStub::Generate(MacroAssembler* masm) { |
} |
+void ToNameStub::Generate(MacroAssembler* masm) { |
+ // The ToName stub takes on argument in a0. |
+ Label is_number; |
+ __ JumpIfSmi(a0, &is_number); |
+ |
+ Label not_name; |
+ STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE); |
+ __ GetObjectType(a0, a1, a1); |
+ // a0: receiver |
+ // a1: receiver instance type |
+ __ Branch(¬_name, gt, a1, Operand(LAST_NAME_TYPE)); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ mov(v0, a0); |
+ __ bind(¬_name); |
+ |
+ Label not_heap_number; |
+ __ Branch(¬_heap_number, ne, a1, Operand(HEAP_NUMBER_TYPE)); |
+ __ bind(&is_number); |
+ NumberToStringStub stub(isolate()); |
+ __ TailCallStub(&stub); |
+ __ bind(¬_heap_number); |
+ |
+ Label not_oddball; |
+ __ Branch(¬_oddball, ne, a1, Operand(ODDBALL_TYPE)); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ ld(v0, FieldMemOperand(a0, Oddball::kToStringOffset)); |
+ __ bind(¬_oddball); |
+ |
+ __ push(a0); // Push argument. |
+ __ TailCallRuntime(Runtime::kToName); |
+} |
+ |
+ |
void StringHelper::GenerateFlatOneByteStringEquals( |
MacroAssembler* masm, Register left, Register right, Register scratch1, |
Register scratch2, Register scratch3) { |