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