Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index 781f314eb04c6875020e921e585924275e8d6dbc..4c6dea96f75e89fdb94724f97d3d82a4384981da 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -287,6 +287,7 @@ void MacroAssembler::And(Register dst, Register src1, const Operand& src2, |
!src2.must_output_reloc_info(this) && |
CpuFeatures::IsSupported(ARMv7) && |
base::bits::IsPowerOfTwo32(src2.immediate() + 1)) { |
+ CpuFeatureScope scope(this, ARMv7); |
ubfx(dst, src1, 0, |
WhichPowerOf2(static_cast<uint32_t>(src2.immediate()) + 1), cond); |
} else { |
@@ -305,6 +306,7 @@ void MacroAssembler::Ubfx(Register dst, Register src1, int lsb, int width, |
mov(dst, Operand(dst, LSR, lsb), LeaveCC, cond); |
} |
} else { |
+ CpuFeatureScope scope(this, ARMv7); |
ubfx(dst, src1, lsb, width, cond); |
} |
} |
@@ -325,6 +327,7 @@ void MacroAssembler::Sbfx(Register dst, Register src1, int lsb, int width, |
mov(dst, Operand(dst, ASR, shift_down), LeaveCC, cond); |
} |
} else { |
+ CpuFeatureScope scope(this, ARMv7); |
sbfx(dst, src1, lsb, width, cond); |
} |
} |
@@ -348,6 +351,7 @@ void MacroAssembler::Bfi(Register dst, |
mov(scratch, Operand(scratch, LSL, lsb)); |
orr(dst, dst, scratch); |
} else { |
+ CpuFeatureScope scope(this, ARMv7); |
bfi(dst, src, lsb, width, cond); |
} |
} |
@@ -360,6 +364,7 @@ void MacroAssembler::Bfc(Register dst, Register src, int lsb, int width, |
int mask = (1 << (width + lsb)) - 1 - ((1 << lsb) - 1); |
bic(dst, src, Operand(mask)); |
} else { |
+ CpuFeatureScope scope(this, ARMv7); |
Move(dst, src, cond); |
bfc(dst, lsb, width, cond); |
} |
@@ -409,6 +414,7 @@ void MacroAssembler::LoadRoot(Register destination, |
if (CpuFeatures::IsSupported(MOVW_MOVT_IMMEDIATE_LOADS) && |
isolate()->heap()->RootCanBeTreatedAsConstant(index) && |
!predictable_code_size()) { |
+ CpuFeatureScope scope(this, MOVW_MOVT_IMMEDIATE_LOADS); |
// The CPU supports fast immediate values, and this root will never |
// change. We will load it as a relocatable immediate value. |
Handle<Object> root = isolate()->heap()->root_handle(index); |
@@ -2651,7 +2657,8 @@ void MacroAssembler::IndexFromHash(Register hash, Register index) { |
void MacroAssembler::SmiToDouble(LowDwVfpRegister value, Register smi) { |
- if (CpuFeatures::IsSupported(VFP3)) { |
+ if (CpuFeatures::IsSupported(VFPv3)) { |
+ CpuFeatureScope scope(this, VFPv3); |
vmov(value.low(), smi); |
vcvt_f64_s32(value, 1); |
} else { |
@@ -2808,6 +2815,7 @@ void MacroAssembler::GetLeastBitsFromSmi(Register dst, |
Register src, |
int num_least_bits) { |
if (CpuFeatures::IsSupported(ARMv7) && !predictable_code_size()) { |
+ CpuFeatureScope scope(this, ARMv7); |
ubfx(dst, src, kSmiTagSize, num_least_bits); |
} else { |
SmiUntag(dst, src); |
@@ -3417,6 +3425,7 @@ void MacroAssembler::CheckFor32DRegs(Register scratch) { |
void MacroAssembler::SaveFPRegs(Register location, Register scratch) { |
+ CpuFeatureScope scope(this, VFP32DREGS, CpuFeatureScope::kDontCheckSupported); |
CheckFor32DRegs(scratch); |
vstm(db_w, location, d16, d31, ne); |
sub(location, location, Operand(16 * kDoubleSize), LeaveCC, eq); |
@@ -3425,6 +3434,7 @@ void MacroAssembler::SaveFPRegs(Register location, Register scratch) { |
void MacroAssembler::RestoreFPRegs(Register location, Register scratch) { |
+ CpuFeatureScope scope(this, VFP32DREGS, CpuFeatureScope::kDontCheckSupported); |
CheckFor32DRegs(scratch); |
vldm(ia_w, location, d0, d15); |
vldm(ia_w, location, d16, d31, ne); |