| Index: src/arm/assembler-arm.cc
|
| diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc
|
| index 42343b19ffea916c3aeab0229f7af5621dc772f4..bf0a655317f6fc94fabb680ed680d5608e215f74 100644
|
| --- a/src/arm/assembler-arm.cc
|
| +++ b/src/arm/assembler-arm.cc
|
| @@ -32,7 +32,7 @@
|
|
|
| // The original source code covered by the above license above has been
|
| // modified significantly by Google Inc.
|
| -// Copyright 2011 the V8 project authors. All rights reserved.
|
| +// Copyright 2012 the V8 project authors. All rights reserved.
|
|
|
| #include "v8.h"
|
|
|
| @@ -52,17 +52,20 @@ unsigned CpuFeatures::found_by_runtime_probing_ = 0;
|
|
|
|
|
| // Get the CPU features enabled by the build. For cross compilation the
|
| -// preprocessor symbols CAN_USE_ARMV7_INSTRUCTIONS and CAN_USE_VFP_INSTRUCTIONS
|
| +// preprocessor symbols CAN_USE_ARMV7_INSTRUCTIONS and CAN_USE_VFP3_INSTRUCTIONS
|
| // can be defined to enable ARMv7 and VFPv3 instructions when building the
|
| // snapshot.
|
| -static uint64_t CpuFeaturesImpliedByCompiler() {
|
| - uint64_t answer = 0;
|
| +static unsigned CpuFeaturesImpliedByCompiler() {
|
| + unsigned answer = 0;
|
| #ifdef CAN_USE_ARMV7_INSTRUCTIONS
|
| answer |= 1u << ARMv7;
|
| -#endif // def CAN_USE_ARMV7_INSTRUCTIONS
|
| -#ifdef CAN_USE_VFP_INSTRUCTIONS
|
| - answer |= 1u << VFP3 | 1u << ARMv7;
|
| -#endif // def CAN_USE_VFP_INSTRUCTIONS
|
| +#endif // CAN_USE_ARMV7_INSTRUCTIONS
|
| +#ifdef CAN_USE_VFP3_INSTRUCTIONS
|
| + answer |= 1u << VFP3 | 1u << VFP2 | 1u << ARMv7;
|
| +#endif // CAN_USE_VFP3_INSTRUCTIONS
|
| +#ifdef CAN_USE_VFP2_INSTRUCTIONS
|
| + answer |= 1u << VFP2;
|
| +#endif // CAN_USE_VFP2_INSTRUCTIONS
|
|
|
| #ifdef __arm__
|
| // If the compiler is allowed to use VFP then we can use VFP too in our code
|
| @@ -70,10 +73,10 @@ static uint64_t CpuFeaturesImpliedByCompiler() {
|
| // point support implies VFPv3, see ARM DDI 0406B, page A1-6.
|
| #if defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(__VFP_FP__) \
|
| && !defined(__SOFTFP__)
|
| - answer |= 1u << VFP3 | 1u << ARMv7;
|
| + answer |= 1u << VFP3 | 1u << ARMv7 | 1u << VFP2;
|
| #endif // defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(__VFP_FP__)
|
| // && !defined(__SOFTFP__)
|
| -#endif // def __arm__
|
| +#endif // _arm__
|
|
|
| return answer;
|
| }
|
| @@ -81,7 +84,7 @@ static uint64_t CpuFeaturesImpliedByCompiler() {
|
|
|
| void CpuFeatures::Probe() {
|
| unsigned standard_features = static_cast<unsigned>(
|
| - OS::CpuFeaturesImpliedByPlatform() | CpuFeaturesImpliedByCompiler());
|
| + OS::CpuFeaturesImpliedByPlatform()) | CpuFeaturesImpliedByCompiler();
|
| ASSERT(supported_ == 0 || supported_ == standard_features);
|
| #ifdef DEBUG
|
| initialized_ = true;
|
| @@ -101,27 +104,32 @@ void CpuFeatures::Probe() {
|
| // For the simulator=arm build, use VFP when FLAG_enable_vfp3 is
|
| // enabled. VFPv3 implies ARMv7, see ARM DDI 0406B, page A1-6.
|
| if (FLAG_enable_vfp3) {
|
| - supported_ |= 1u << VFP3 | 1u << ARMv7;
|
| + supported_ |= 1u << VFP3 | 1u << ARMv7 | 1u << VFP2;
|
| }
|
| // For the simulator=arm build, use ARMv7 when FLAG_enable_armv7 is enabled
|
| if (FLAG_enable_armv7) {
|
| supported_ |= 1u << ARMv7;
|
| }
|
| -#else // def __arm__
|
| +#else // __arm__
|
| // Probe for additional features not already known to be available.
|
| if (!IsSupported(VFP3) && OS::ArmCpuHasFeature(VFP3)) {
|
| // This implementation also sets the VFP flags if runtime
|
| - // detection of VFP returns true. VFPv3 implies ARMv7, see ARM DDI
|
| + // detection of VFP returns true. VFPv3 implies ARMv7 and VFP2, see ARM DDI
|
| // 0406B, page A1-6.
|
| - supported_ |= 1u << VFP3 | 1u << ARMv7;
|
| - found_by_runtime_probing_ |= 1u << VFP3 | 1u << ARMv7;
|
| + found_by_runtime_probing_ |= 1u << VFP3 | 1u << ARMv7 | 1u << VFP2;
|
| + } else if (!IsSupported(VFP2) && OS::ArmCpuHasFeature(VFP2)) {
|
| + found_by_runtime_probing_ |= 1u << VFP2;
|
| }
|
|
|
| if (!IsSupported(ARMv7) && OS::ArmCpuHasFeature(ARMv7)) {
|
| - supported_ |= 1u << ARMv7;
|
| found_by_runtime_probing_ |= 1u << ARMv7;
|
| }
|
| +
|
| + supported_ |= found_by_runtime_probing_;
|
| #endif
|
| +
|
| + // Assert that VFP3 implies VFP2 and ARMv7.
|
| + ASSERT(!IsSupported(VFP3) || (IsSupported(VFP2) && IsSupported(ARMv7)));
|
| }
|
|
|
|
|
| @@ -1656,7 +1664,7 @@ void Assembler::vldr(const DwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-628.
|
| // cond(31-28) | 1101(27-24)| U001(23-20) | Rbase(19-16) |
|
| // Vdst(15-12) | 1011(11-8) | offset
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| int u = 1;
|
| if (offset < 0) {
|
| offset = -offset;
|
| @@ -1698,7 +1706,7 @@ void Assembler::vldr(const SwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-628.
|
| // cond(31-28) | 1101(27-24)| U001(23-20) | Rbase(19-16) |
|
| // Vdst(15-12) | 1010(11-8) | offset
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| int u = 1;
|
| if (offset < 0) {
|
| offset = -offset;
|
| @@ -1742,7 +1750,7 @@ void Assembler::vstr(const DwVfpRegister src,
|
| // Instruction details available in ARM DDI 0406A, A8-786.
|
| // cond(31-28) | 1101(27-24)| U000(23-20) | | Rbase(19-16) |
|
| // Vsrc(15-12) | 1011(11-8) | (offset/4)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| int u = 1;
|
| if (offset < 0) {
|
| offset = -offset;
|
| @@ -1783,7 +1791,7 @@ void Assembler::vstr(const SwVfpRegister src,
|
| // Instruction details available in ARM DDI 0406A, A8-786.
|
| // cond(31-28) | 1101(27-24)| U000(23-20) | Rbase(19-16) |
|
| // Vdst(15-12) | 1010(11-8) | (offset/4)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| int u = 1;
|
| if (offset < 0) {
|
| offset = -offset;
|
| @@ -1826,7 +1834,7 @@ void Assembler::vldm(BlockAddrMode am,
|
| // Instruction details available in ARM DDI 0406A, A8-626.
|
| // cond(31-28) | 110(27-25)| PUDW1(24-20) | Rbase(19-16) |
|
| // first(15-12) | 1010(11-8) | (count * 2)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT_LE(first.code(), last.code());
|
| ASSERT(am == ia || am == ia_w || am == db_w);
|
| ASSERT(!base.is(pc));
|
| @@ -1848,7 +1856,7 @@ void Assembler::vstm(BlockAddrMode am,
|
| // Instruction details available in ARM DDI 0406A, A8-784.
|
| // cond(31-28) | 110(27-25)| PUDW0(24-20) | Rbase(19-16) |
|
| // first(15-12) | 1011(11-8) | (count * 2)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT_LE(first.code(), last.code());
|
| ASSERT(am == ia || am == ia_w || am == db_w);
|
| ASSERT(!base.is(pc));
|
| @@ -1869,7 +1877,7 @@ void Assembler::vldm(BlockAddrMode am,
|
| // Instruction details available in ARM DDI 0406A, A8-626.
|
| // cond(31-28) | 110(27-25)| PUDW1(24-20) | Rbase(19-16) |
|
| // first(15-12) | 1010(11-8) | (count/2)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT_LE(first.code(), last.code());
|
| ASSERT(am == ia || am == ia_w || am == db_w);
|
| ASSERT(!base.is(pc));
|
| @@ -1890,7 +1898,7 @@ void Assembler::vstm(BlockAddrMode am,
|
| // Instruction details available in ARM DDI 0406A, A8-784.
|
| // cond(31-28) | 110(27-25)| PUDW0(24-20) | Rbase(19-16) |
|
| // first(15-12) | 1011(11-8) | (count/2)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT_LE(first.code(), last.code());
|
| ASSERT(am == ia || am == ia_w || am == db_w);
|
| ASSERT(!base.is(pc));
|
| @@ -1913,7 +1921,7 @@ static void DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) {
|
| // Only works for little endian floating point formats.
|
| // We don't support VFP on the mixed endian floating point platform.
|
| static bool FitsVMOVDoubleImmediate(double d, uint32_t *encoding) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsSupported(VFP3));
|
|
|
| // VMOV can accept an immediate of the form:
|
| //
|
| @@ -1966,10 +1974,10 @@ void Assembler::vmov(const DwVfpRegister dst,
|
| const Condition cond) {
|
| // Dd = immediate
|
| // Instruction details available in ARM DDI 0406B, A8-640.
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
|
|
| uint32_t enc;
|
| - if (FitsVMOVDoubleImmediate(imm, &enc)) {
|
| + if (CpuFeatures::IsSupported(VFP3) && FitsVMOVDoubleImmediate(imm, &enc)) {
|
| // The double can be encoded in the instruction.
|
| emit(cond | 0xE*B24 | 0xB*B20 | dst.code()*B12 | 0xB*B8 | enc);
|
| } else {
|
| @@ -2003,7 +2011,7 @@ void Assembler::vmov(const SwVfpRegister dst,
|
| const Condition cond) {
|
| // Sd = Sm
|
| // Instruction details available in ARM DDI 0406B, A8-642.
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| int sd, d, sm, m;
|
| dst.split_code(&sd, &d);
|
| src.split_code(&sm, &m);
|
| @@ -2016,7 +2024,7 @@ void Assembler::vmov(const DwVfpRegister dst,
|
| const Condition cond) {
|
| // Dd = Dm
|
| // Instruction details available in ARM DDI 0406B, A8-642.
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0xB*B20 |
|
| dst.code()*B12 | 0x5*B9 | B8 | B6 | src.code());
|
| }
|
| @@ -2030,7 +2038,7 @@ void Assembler::vmov(const DwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-646.
|
| // cond(31-28) | 1100(27-24)| 010(23-21) | op=0(20) | Rt2(19-16) |
|
| // Rt(15-12) | 1011(11-8) | 00(7-6) | M(5) | 1(4) | Vm
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT(!src1.is(pc) && !src2.is(pc));
|
| emit(cond | 0xC*B24 | B22 | src2.code()*B16 |
|
| src1.code()*B12 | 0xB*B8 | B4 | dst.code());
|
| @@ -2045,7 +2053,7 @@ void Assembler::vmov(const Register dst1,
|
| // Instruction details available in ARM DDI 0406A, A8-646.
|
| // cond(31-28) | 1100(27-24)| 010(23-21) | op=1(20) | Rt2(19-16) |
|
| // Rt(15-12) | 1011(11-8) | 00(7-6) | M(5) | 1(4) | Vm
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT(!dst1.is(pc) && !dst2.is(pc));
|
| emit(cond | 0xC*B24 | B22 | B20 | dst2.code()*B16 |
|
| dst1.code()*B12 | 0xB*B8 | B4 | src.code());
|
| @@ -2059,7 +2067,7 @@ void Assembler::vmov(const SwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-642.
|
| // cond(31-28) | 1110(27-24)| 000(23-21) | op=0(20) | Vn(19-16) |
|
| // Rt(15-12) | 1010(11-8) | N(7)=0 | 00(6-5) | 1(4) | 0000(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT(!src.is(pc));
|
| int sn, n;
|
| dst.split_code(&sn, &n);
|
| @@ -2074,7 +2082,7 @@ void Assembler::vmov(const Register dst,
|
| // Instruction details available in ARM DDI 0406A, A8-642.
|
| // cond(31-28) | 1110(27-24)| 000(23-21) | op=1(20) | Vn(19-16) |
|
| // Rt(15-12) | 1010(11-8) | N(7)=0 | 00(6-5) | 1(4) | 0000(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT(!dst.is(pc));
|
| int sn, n;
|
| src.split_code(&sn, &n);
|
| @@ -2199,7 +2207,7 @@ void Assembler::vcvt_f64_s32(const DwVfpRegister dst,
|
| const SwVfpRegister src,
|
| VFPConversionMode mode,
|
| const Condition cond) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(EncodeVCVT(F64, dst.code(), S32, src.code(), mode, cond));
|
| }
|
|
|
| @@ -2208,7 +2216,7 @@ void Assembler::vcvt_f32_s32(const SwVfpRegister dst,
|
| const SwVfpRegister src,
|
| VFPConversionMode mode,
|
| const Condition cond) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(EncodeVCVT(F32, dst.code(), S32, src.code(), mode, cond));
|
| }
|
|
|
| @@ -2217,7 +2225,7 @@ void Assembler::vcvt_f64_u32(const DwVfpRegister dst,
|
| const SwVfpRegister src,
|
| VFPConversionMode mode,
|
| const Condition cond) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(EncodeVCVT(F64, dst.code(), U32, src.code(), mode, cond));
|
| }
|
|
|
| @@ -2226,7 +2234,7 @@ void Assembler::vcvt_s32_f64(const SwVfpRegister dst,
|
| const DwVfpRegister src,
|
| VFPConversionMode mode,
|
| const Condition cond) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(EncodeVCVT(S32, dst.code(), F64, src.code(), mode, cond));
|
| }
|
|
|
| @@ -2235,7 +2243,7 @@ void Assembler::vcvt_u32_f64(const SwVfpRegister dst,
|
| const DwVfpRegister src,
|
| VFPConversionMode mode,
|
| const Condition cond) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(EncodeVCVT(U32, dst.code(), F64, src.code(), mode, cond));
|
| }
|
|
|
| @@ -2244,7 +2252,7 @@ void Assembler::vcvt_f64_f32(const DwVfpRegister dst,
|
| const SwVfpRegister src,
|
| VFPConversionMode mode,
|
| const Condition cond) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(EncodeVCVT(F64, dst.code(), F32, src.code(), mode, cond));
|
| }
|
|
|
| @@ -2253,7 +2261,7 @@ void Assembler::vcvt_f32_f64(const SwVfpRegister dst,
|
| const DwVfpRegister src,
|
| VFPConversionMode mode,
|
| const Condition cond) {
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(EncodeVCVT(F32, dst.code(), F64, src.code(), mode, cond));
|
| }
|
|
|
| @@ -2261,6 +2269,7 @@ void Assembler::vcvt_f32_f64(const SwVfpRegister dst,
|
| void Assembler::vneg(const DwVfpRegister dst,
|
| const DwVfpRegister src,
|
| const Condition cond) {
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0xB*B20 | B16 | dst.code()*B12 |
|
| 0x5*B9 | B8 | B6 | src.code());
|
| }
|
| @@ -2269,6 +2278,7 @@ void Assembler::vneg(const DwVfpRegister dst,
|
| void Assembler::vabs(const DwVfpRegister dst,
|
| const DwVfpRegister src,
|
| const Condition cond) {
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0xB*B20 | dst.code()*B12 |
|
| 0x5*B9 | B8 | 0x3*B6 | src.code());
|
| }
|
| @@ -2283,7 +2293,7 @@ void Assembler::vadd(const DwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-536.
|
| // cond(31-28) | 11100(27-23)| D=?(22) | 11(21-20) | Vn(19-16) |
|
| // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 0(6) | M=?(5) | 0(4) | Vm(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0x3*B20 | src1.code()*B16 |
|
| dst.code()*B12 | 0x5*B9 | B8 | src2.code());
|
| }
|
| @@ -2298,7 +2308,7 @@ void Assembler::vsub(const DwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-784.
|
| // cond(31-28) | 11100(27-23)| D=?(22) | 11(21-20) | Vn(19-16) |
|
| // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 1(6) | M=?(5) | 0(4) | Vm(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0x3*B20 | src1.code()*B16 |
|
| dst.code()*B12 | 0x5*B9 | B8 | B6 | src2.code());
|
| }
|
| @@ -2313,7 +2323,7 @@ void Assembler::vmul(const DwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-784.
|
| // cond(31-28) | 11100(27-23)| D=?(22) | 10(21-20) | Vn(19-16) |
|
| // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=0 | 0(6) | M=?(5) | 0(4) | Vm(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0x2*B20 | src1.code()*B16 |
|
| dst.code()*B12 | 0x5*B9 | B8 | src2.code());
|
| }
|
| @@ -2328,7 +2338,7 @@ void Assembler::vdiv(const DwVfpRegister dst,
|
| // Instruction details available in ARM DDI 0406A, A8-584.
|
| // cond(31-28) | 11101(27-23)| D=?(22) | 00(21-20) | Vn(19-16) |
|
| // Vd(15-12) | 101(11-9) | sz(8)=1 | N(7)=? | 0(6) | M=?(5) | 0(4) | Vm(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | B23 | src1.code()*B16 |
|
| dst.code()*B12 | 0x5*B9 | B8 | src2.code());
|
| }
|
| @@ -2341,7 +2351,7 @@ void Assembler::vcmp(const DwVfpRegister src1,
|
| // Instruction details available in ARM DDI 0406A, A8-570.
|
| // cond(31-28) | 11101 (27-23)| D=?(22) | 11 (21-20) | 0100 (19-16) |
|
| // Vd(15-12) | 101(11-9) | sz(8)=1 | E(7)=0 | 1(6) | M(5)=? | 0(4) | Vm(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 |B23 | 0x3*B20 | B18 |
|
| src1.code()*B12 | 0x5*B9 | B8 | B6 | src2.code());
|
| }
|
| @@ -2354,7 +2364,7 @@ void Assembler::vcmp(const DwVfpRegister src1,
|
| // Instruction details available in ARM DDI 0406A, A8-570.
|
| // cond(31-28) | 11101 (27-23)| D=?(22) | 11 (21-20) | 0101 (19-16) |
|
| // Vd(15-12) | 101(11-9) | sz(8)=1 | E(7)=0 | 1(6) | M(5)=? | 0(4) | 0000(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| ASSERT(src2 == 0.0);
|
| emit(cond | 0xE*B24 |B23 | 0x3*B20 | B18 | B16 |
|
| src1.code()*B12 | 0x5*B9 | B8 | B6);
|
| @@ -2365,7 +2375,7 @@ void Assembler::vmsr(Register dst, Condition cond) {
|
| // Instruction details available in ARM DDI 0406A, A8-652.
|
| // cond(31-28) | 1110 (27-24) | 1110(23-20)| 0001 (19-16) |
|
| // Rt(15-12) | 1010 (11-8) | 0(7) | 00 (6-5) | 1(4) | 0000(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0xE*B20 | B16 |
|
| dst.code()*B12 | 0xA*B8 | B4);
|
| }
|
| @@ -2375,7 +2385,7 @@ void Assembler::vmrs(Register dst, Condition cond) {
|
| // Instruction details available in ARM DDI 0406A, A8-652.
|
| // cond(31-28) | 1110 (27-24) | 1111(23-20)| 0001 (19-16) |
|
| // Rt(15-12) | 1010 (11-8) | 0(7) | 00 (6-5) | 1(4) | 0000(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | 0xF*B20 | B16 |
|
| dst.code()*B12 | 0xA*B8 | B4);
|
| }
|
| @@ -2386,7 +2396,7 @@ void Assembler::vsqrt(const DwVfpRegister dst,
|
| const Condition cond) {
|
| // cond(31-28) | 11101 (27-23)| D=?(22) | 11 (21-20) | 0001 (19-16) |
|
| // Vd(15-12) | 101(11-9) | sz(8)=1 | 11 (7-6) | M(5)=? | 0(4) | Vm(3-0)
|
| - ASSERT(CpuFeatures::IsEnabled(VFP3));
|
| + ASSERT(CpuFeatures::IsEnabled(VFP2));
|
| emit(cond | 0xE*B24 | B23 | 0x3*B20 | B16 |
|
| dst.code()*B12 | 0x5*B9 | B8 | 3*B6 | src.code());
|
| }
|
|
|