| Index: src/ppc/code-stubs-ppc.cc
|
| diff --git a/src/ppc/code-stubs-ppc.cc b/src/ppc/code-stubs-ppc.cc
|
| index 50e8b7f6fab357fefe7af797a961b23a20c0b712..2f76275f1ef5cf942954da7cbc6c73e15899283d 100644
|
| --- a/src/ppc/code-stubs-ppc.cc
|
| +++ b/src/ppc/code-stubs-ppc.cc
|
| @@ -3401,15 +3401,10 @@ void ToNumberStub::Generate(MacroAssembler* masm) {
|
| __ blr();
|
| __ bind(¬_smi);
|
|
|
| - Label not_heap_number;
|
| - __ LoadP(r4, FieldMemOperand(r3, HeapObject::kMapOffset));
|
| - __ lbz(r4, FieldMemOperand(r4, Map::kInstanceTypeOffset));
|
| - // r3: object
|
| - // r4: instance type.
|
| - __ cmpi(r4, Operand(HEAP_NUMBER_TYPE));
|
| - __ bne(¬_heap_number);
|
| - __ blr();
|
| - __ bind(¬_heap_number);
|
| + __ CompareObjectType(r3, r4, r4, HEAP_NUMBER_TYPE);
|
| + // r3: receiver
|
| + // r4: receiver instance type
|
| + __ Ret(eq);
|
|
|
| Label not_string, slow_string;
|
| __ cmpli(r4, Operand(FIRST_NONSTRING_TYPE));
|
| @@ -3437,6 +3432,36 @@ void ToNumberStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +void ToStringStub::Generate(MacroAssembler* masm) {
|
| + // The ToString stub takes one argument in r3.
|
| + Label is_number;
|
| + __ JumpIfSmi(r3, &is_number);
|
| +
|
| + __ CompareObjectType(r3, r4, r4, FIRST_NONSTRING_TYPE);
|
| + // r3: receiver
|
| + // r4: receiver instance type
|
| + __ Ret(lt);
|
| +
|
| + Label not_heap_number;
|
| + __ cmpi(r4, Operand(HEAP_NUMBER_TYPE));
|
| + __ bne(¬_heap_number);
|
| + __ bind(&is_number);
|
| + NumberToStringStub stub(isolate());
|
| + __ TailCallStub(&stub);
|
| + __ bind(¬_heap_number);
|
| +
|
| + Label not_oddball;
|
| + __ cmpi(r4, Operand(ODDBALL_TYPE));
|
| + __ bne(¬_oddball);
|
| + __ LoadP(r3, FieldMemOperand(r3, Oddball::kToStringOffset));
|
| + __ Ret();
|
| + __ bind(¬_oddball);
|
| +
|
| + __ push(r3); // Push argument.
|
| + __ TailCallRuntime(Runtime::kToString, 1, 1);
|
| +}
|
| +
|
| +
|
| void StringHelper::GenerateFlatOneByteStringEquals(MacroAssembler* masm,
|
| Register left,
|
| Register right,
|
|
|