| Index: src/mips64/codegen-mips64.cc
|
| diff --git a/src/mips64/codegen-mips64.cc b/src/mips64/codegen-mips64.cc
|
| index eb108daf172f8ea3fcfc9354eaff629a0d0c6d12..facce27557285fe2821a92790f9a7f821fd5d4df 100644
|
| --- a/src/mips64/codegen-mips64.cc
|
| +++ b/src/mips64/codegen-mips64.cc
|
| @@ -661,17 +661,17 @@ void ElementsTransitionGenerator::GenerateSmiToDouble(
|
| __ SmiScale(array_end, length, kDoubleSizeLog2);
|
| __ Daddu(array_end, array_end, scratch3);
|
|
|
| -// Repurpose registers no longer in use.
|
| + // Repurpose registers no longer in use.
|
| Register hole_lower = elements;
|
| Register hole_upper = length;
|
| __ li(hole_lower, Operand(kHoleNanLower32));
|
| - __ li(hole_upper, Operand(kHoleNanUpper32));
|
| // scratch1: begin of source FixedArray element fields, not tagged
|
| // hole_lower: kHoleNanLower32
|
| // hole_upper: kHoleNanUpper32
|
| // array_end: end of destination FixedDoubleArray, not tagged
|
| // scratch3: begin of FixedDoubleArray element fields, not tagged
|
| - __ Branch(&entry);
|
| + __ Branch(USE_DELAY_SLOT, &entry);
|
| + __ li(hole_upper, Operand(kHoleNanUpper32)); // In delay slot.
|
|
|
| __ bind(&only_change_map);
|
| __ sd(target_map, FieldMemOperand(receiver, HeapObject::kMapOffset));
|
| @@ -679,7 +679,7 @@ void ElementsTransitionGenerator::GenerateSmiToDouble(
|
| HeapObject::kMapOffset,
|
| target_map,
|
| scratch2,
|
| - kRAHasNotBeenSaved,
|
| + kRAHasBeenSaved,
|
| kDontSaveFPRegs,
|
| OMIT_REMEMBERED_SET,
|
| OMIT_SMI_CHECK);
|
| @@ -687,8 +687,9 @@ void ElementsTransitionGenerator::GenerateSmiToDouble(
|
|
|
| // Call into runtime if GC is required.
|
| __ bind(&gc_required);
|
| - __ pop(ra);
|
| - __ Branch(fail);
|
| + __ ld(ra, MemOperand(sp, 0));
|
| + __ Branch(USE_DELAY_SLOT, fail);
|
| + __ daddiu(sp, sp, kPointerSize); // In delay slot.
|
|
|
| // Convert and copy elements.
|
| __ bind(&loop);
|
| @@ -702,9 +703,8 @@ void ElementsTransitionGenerator::GenerateSmiToDouble(
|
| __ mtc1(scratch2, f0);
|
| __ cvt_d_w(f0, f0);
|
| __ sdc1(f0, MemOperand(scratch3));
|
| - __ Daddu(scratch3, scratch3, kDoubleSize);
|
| -
|
| - __ Branch(&entry);
|
| + __ Branch(USE_DELAY_SLOT, &entry);
|
| + __ daddiu(scratch3, scratch3, kDoubleSize); // In delay slot.
|
|
|
| // Hole found, store the-hole NaN.
|
| __ bind(&convert_hole);
|
| @@ -723,8 +723,8 @@ void ElementsTransitionGenerator::GenerateSmiToDouble(
|
| __ bind(&entry);
|
| __ Branch(&loop, lt, scratch3, Operand(array_end));
|
|
|
| - __ pop(ra);
|
| __ bind(&done);
|
| + __ pop(ra);
|
| }
|
|
|
|
|
|
|