| 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);
|
| }
|
|
|