| Index: src/arm/deoptimizer-arm.cc
 | 
| diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc
 | 
| index 9bcc1ac14c0e467a67a0bffdc0565aa46ec15bff..3b50ad4ae4d2bb84c6736cc67487d1ecb8d76b02 100644
 | 
| --- a/src/arm/deoptimizer-arm.cc
 | 
| +++ b/src/arm/deoptimizer-arm.cc
 | 
| @@ -594,23 +594,18 @@ void Deoptimizer::EntryGenerator::Generate() {
 | 
|    const int kDoubleRegsSize =
 | 
|        kDoubleSize * DwVfpRegister::kMaxNumAllocatableRegisters;
 | 
|  
 | 
| -  if (CpuFeatures::IsSupported(VFP2)) {
 | 
| -    CpuFeatureScope scope(masm(), VFP2);
 | 
| -    // Save all allocatable VFP registers before messing with them.
 | 
| -    ASSERT(kDoubleRegZero.code() == 14);
 | 
| -    ASSERT(kScratchDoubleReg.code() == 15);
 | 
| -
 | 
| -    // Check CPU flags for number of registers, setting the Z condition flag.
 | 
| -    __ CheckFor32DRegs(ip);
 | 
| -
 | 
| -    // Push registers d0-d13, and possibly d16-d31, on the stack.
 | 
| -    // If d16-d31 are not pushed, decrease the stack pointer instead.
 | 
| -    __ vstm(db_w, sp, d16, d31, ne);
 | 
| -    __ sub(sp, sp, Operand(16 * kDoubleSize), LeaveCC, eq);
 | 
| -    __ vstm(db_w, sp, d0, d13);
 | 
| -  } else {
 | 
| -    __ sub(sp, sp, Operand(kDoubleRegsSize));
 | 
| -  }
 | 
| +  // Save all allocatable VFP registers before messing with them.
 | 
| +  ASSERT(kDoubleRegZero.code() == 14);
 | 
| +  ASSERT(kScratchDoubleReg.code() == 15);
 | 
| +
 | 
| +  // Check CPU flags for number of registers, setting the Z condition flag.
 | 
| +  __ CheckFor32DRegs(ip);
 | 
| +
 | 
| +  // Push registers d0-d13, and possibly d16-d31, on the stack.
 | 
| +  // If d16-d31 are not pushed, decrease the stack pointer instead.
 | 
| +  __ vstm(db_w, sp, d16, d31, ne);
 | 
| +  __ sub(sp, sp, Operand(16 * kDoubleSize), LeaveCC, eq);
 | 
| +  __ vstm(db_w, sp, d0, d13);
 | 
|  
 | 
|    // Push all 16 registers (needed to populate FrameDescription::registers_).
 | 
|    // TODO(1588) Note that using pc with stm is deprecated, so we should perhaps
 | 
| @@ -669,17 +664,14 @@ void Deoptimizer::EntryGenerator::Generate() {
 | 
|      __ str(r2, MemOperand(r1, offset));
 | 
|    }
 | 
|  
 | 
| -  if (CpuFeatures::IsSupported(VFP2)) {
 | 
| -    CpuFeatureScope scope(masm(), VFP2);
 | 
| -    // Copy VFP registers to
 | 
| -    // double_registers_[DoubleRegister::kMaxNumAllocatableRegisters]
 | 
| -    int double_regs_offset = FrameDescription::double_registers_offset();
 | 
| -    for (int i = 0; i < DwVfpRegister::kMaxNumAllocatableRegisters; ++i) {
 | 
| -      int dst_offset = i * kDoubleSize + double_regs_offset;
 | 
| -      int src_offset = i * kDoubleSize + kNumberOfRegisters * kPointerSize;
 | 
| -      __ vldr(d0, sp, src_offset);
 | 
| -      __ vstr(d0, r1, dst_offset);
 | 
| -    }
 | 
| +  // Copy VFP registers to
 | 
| +  // double_registers_[DoubleRegister::kMaxNumAllocatableRegisters]
 | 
| +  int double_regs_offset = FrameDescription::double_registers_offset();
 | 
| +  for (int i = 0; i < DwVfpRegister::kMaxNumAllocatableRegisters; ++i) {
 | 
| +    int dst_offset = i * kDoubleSize + double_regs_offset;
 | 
| +    int src_offset = i * kDoubleSize + kNumberOfRegisters * kPointerSize;
 | 
| +    __ vldr(d0, sp, src_offset);
 | 
| +    __ vstr(d0, r1, dst_offset);
 | 
|    }
 | 
|  
 | 
|    // Remove the bailout id, eventually return address, and the saved registers
 | 
| @@ -749,21 +741,18 @@ void Deoptimizer::EntryGenerator::Generate() {
 | 
|    __ cmp(r4, r1);
 | 
|    __ b(lt, &outer_push_loop);
 | 
|  
 | 
| -  if (CpuFeatures::IsSupported(VFP2)) {
 | 
| -    CpuFeatureScope scope(masm(), VFP2);
 | 
| -    // Check CPU flags for number of registers, setting the Z condition flag.
 | 
| -    __ CheckFor32DRegs(ip);
 | 
| +  // Check CPU flags for number of registers, setting the Z condition flag.
 | 
| +  __ CheckFor32DRegs(ip);
 | 
|  
 | 
| -    __ ldr(r1, MemOperand(r0, Deoptimizer::input_offset()));
 | 
| -    int src_offset = FrameDescription::double_registers_offset();
 | 
| -    for (int i = 0; i < DwVfpRegister::kMaxNumRegisters; ++i) {
 | 
| -      if (i == kDoubleRegZero.code()) continue;
 | 
| -      if (i == kScratchDoubleReg.code()) continue;
 | 
| +  __ ldr(r1, MemOperand(r0, Deoptimizer::input_offset()));
 | 
| +  int src_offset = FrameDescription::double_registers_offset();
 | 
| +  for (int i = 0; i < DwVfpRegister::kMaxNumRegisters; ++i) {
 | 
| +    if (i == kDoubleRegZero.code()) continue;
 | 
| +    if (i == kScratchDoubleReg.code()) continue;
 | 
|  
 | 
| -      const DwVfpRegister reg = DwVfpRegister::from_code(i);
 | 
| -      __ vldr(reg, r1, src_offset, i < 16 ? al : ne);
 | 
| -      src_offset += kDoubleSize;
 | 
| -    }
 | 
| +    const DwVfpRegister reg = DwVfpRegister::from_code(i);
 | 
| +    __ vldr(reg, r1, src_offset, i < 16 ? al : ne);
 | 
| +    src_offset += kDoubleSize;
 | 
|    }
 | 
|  
 | 
|    // Push state, pc, and continuation from the last output frame.
 | 
| 
 |