| Index: src/mips/code-stubs-mips.cc
|
| diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
|
| index 9385f2fda7af2fe9c6c03e393b91bddfd00deaa5..0340c50e94cd916cc66774df480c5549bc938171 100644
|
| --- a/src/mips/code-stubs-mips.cc
|
| +++ b/src/mips/code-stubs-mips.cc
|
| @@ -3695,9 +3695,20 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| // Save callee saved registers on the stack.
|
| __ MultiPush(kCalleeSaved | ra.bit());
|
|
|
| + if (CpuFeatures::IsSupported(FPU)) {
|
| + CpuFeatures::Scope scope(FPU);
|
| + // Save callee-saved FPU registers.
|
| + __ MultiPushFPU(kCalleeSavedFPU);
|
| + }
|
| +
|
| // Load argv in s0 register.
|
| - __ lw(s0, MemOperand(sp, (kNumCalleeSaved + 1) * kPointerSize +
|
| - StandardFrameConstants::kCArgsSlotsSize));
|
| + int offset_to_argv = (kNumCalleeSaved + 1) * kPointerSize;
|
| + if (CpuFeatures::IsSupported(FPU)) {
|
| + offset_to_argv += kNumCalleeSavedFPU * kDoubleSize;
|
| + }
|
| +
|
| + __ lw(s0, MemOperand(sp, offset_to_argv +
|
| + StandardFrameConstants::kCArgsSlotsSize));
|
|
|
| // We build an EntryFrame.
|
| __ li(t3, Operand(-1)); // Push a bad frame pointer to fail if it is used.
|
| @@ -3829,6 +3840,12 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
| // Reset the stack to the callee saved registers.
|
| __ addiu(sp, sp, -EntryFrameConstants::kCallerFPOffset);
|
|
|
| + if (CpuFeatures::IsSupported(FPU)) {
|
| + CpuFeatures::Scope scope(FPU);
|
| + // Restore callee-saved fpu registers.
|
| + __ MultiPopFPU(kCalleeSavedFPU);
|
| + }
|
| +
|
| // Restore callee saved registers from the stack.
|
| __ MultiPop(kCalleeSaved | ra.bit());
|
| // Return.
|
|
|