| Index: src/mips/macro-assembler-mips.cc | 
| diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc | 
| index 478e6368a62f0359fbd7f1fc501b6482542f6c30..067634e954cf816d5205d4edb3bb115659eb90e4 100644 | 
| --- a/src/mips/macro-assembler-mips.cc | 
| +++ b/src/mips/macro-assembler-mips.cc | 
| @@ -4632,16 +4632,17 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, | 
|  | 
| const int frame_alignment = MacroAssembler::ActivationFrameAlignment(); | 
| if (save_doubles) { | 
| +    CpuFeatures::Scope scope(FPU); | 
| // The stack  must be allign to 0 modulo 8 for stores with sdc1. | 
| ASSERT(kDoubleSize == frame_alignment); | 
| if (frame_alignment > 0) { | 
| ASSERT(IsPowerOf2(frame_alignment)); | 
| And(sp, sp, Operand(-frame_alignment));  // Align stack. | 
| } | 
| -    int space = FPURegister::kNumRegisters * kDoubleSize; | 
| +    int space = FPURegister::kMaxNumRegisters * kDoubleSize; | 
| Subu(sp, sp, Operand(space)); | 
| // Remember: we only need to save every 2nd double FPU value. | 
| -    for (int i = 0; i < FPURegister::kNumRegisters; i+=2) { | 
| +    for (int i = 0; i < FPURegister::kMaxNumRegisters; i+=2) { | 
| FPURegister reg = FPURegister::from_code(i); | 
| sdc1(reg, MemOperand(sp, i * kDoubleSize)); | 
| } | 
| @@ -4669,9 +4670,10 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles, | 
| bool do_return) { | 
| // Optionally restore all double registers. | 
| if (save_doubles) { | 
| +    CpuFeatures::Scope scope(FPU); | 
| // Remember: we only need to restore every 2nd double FPU value. | 
| lw(t8, MemOperand(fp, ExitFrameConstants::kSPOffset)); | 
| -    for (int i = 0; i < FPURegister::kNumRegisters; i+=2) { | 
| +    for (int i = 0; i < FPURegister::kMaxNumRegisters; i+=2) { | 
| FPURegister reg = FPURegister::from_code(i); | 
| ldc1(reg, MemOperand(t8, i  * kDoubleSize + kPointerSize)); | 
| } | 
| @@ -5448,6 +5450,7 @@ void MacroAssembler::ClampDoubleToUint8(Register result_reg, | 
| void MacroAssembler::TestJSArrayForAllocationSiteInfo( | 
| Register receiver_reg, | 
| Register scratch_reg, | 
| +    Condition cond, | 
| Label* allocation_info_present) { | 
| Label no_info_available; | 
| ExternalReference new_space_start = | 
| @@ -5461,7 +5464,7 @@ void MacroAssembler::TestJSArrayForAllocationSiteInfo( | 
| lw(at, MemOperand(at)); | 
| Branch(&no_info_available, gt, scratch_reg, Operand(at)); | 
| lw(scratch_reg, MemOperand(scratch_reg, -AllocationSiteInfo::kSize)); | 
| -  Branch(allocation_info_present, eq, scratch_reg, | 
| +  Branch(allocation_info_present, cond, scratch_reg, | 
| Operand(Handle<Map>(isolate()->heap()->allocation_site_info_map()))); | 
| bind(&no_info_available); | 
| } | 
|  |