Index: src/arm/deoptimizer-arm.cc |
diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc |
index c569e6615b097b5f5b84a0a9c0294b687844cab8..e49fed97c8b5504160cfae0fbfb0ba637004e4d0 100644 |
--- a/src/arm/deoptimizer-arm.cc |
+++ b/src/arm/deoptimizer-arm.cc |
@@ -119,14 +119,20 @@ void Deoptimizer::TableEntryGenerator::Generate() { |
DCHECK(kDoubleRegZero.code() == 14); |
DCHECK(kScratchDoubleReg.code() == 15); |
- // Check CPU flags for number of registers, setting the Z condition flag. |
- __ CheckFor32DRegs(ip); |
+ { |
+ // We use a run-time check for VFP32DREGS. |
+ CpuFeatureScope scope(masm(), VFP32DREGS, |
+ CpuFeatureScope::kDontCheckSupported); |
- // Push registers d0-d15, 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, d15); |
+ // Check CPU flags for number of registers, setting the Z condition flag. |
+ __ CheckFor32DRegs(ip); |
+ |
+ // Push registers d0-d15, 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, d15); |
+ } |
// Push all 16 registers (needed to populate FrameDescription::registers_). |
// TODO(1588) Note that using pc with stm is deprecated, so we should perhaps |
@@ -259,9 +265,6 @@ void Deoptimizer::TableEntryGenerator::Generate() { |
__ cmp(r4, r1); |
__ b(lt, &outer_push_loop); |
- // Check CPU flags for number of registers, setting the Z condition flag. |
- __ CheckFor32DRegs(ip); |
- |
__ ldr(r1, MemOperand(r0, Deoptimizer::input_offset())); |
for (int i = 0; i < config->num_allocatable_double_registers(); ++i) { |
int code = config->GetAllocatableDoubleCode(i); |