diff options
-rw-r--r-- | src/3rdparty/masm/assembler/ARMv7Assembler.h | 6 | ||||
-rw-r--r-- | src/3rdparty/masm/assembler/MacroAssemblerARMv7.h | 6 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_masm.cpp | 4 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_masm_p.h | 18 |
4 files changed, 12 insertions, 22 deletions
diff --git a/src/3rdparty/masm/assembler/ARMv7Assembler.h b/src/3rdparty/masm/assembler/ARMv7Assembler.h index 3a0a435ab9..236d55883d 100644 --- a/src/3rdparty/masm/assembler/ARMv7Assembler.h +++ b/src/3rdparty/masm/assembler/ARMv7Assembler.h @@ -1795,6 +1795,12 @@ public: m_formatter.vfpOp(OP_VCVT_FPIVFP, OP_VCVT_FPIVFPb, true, vcvtOp(true, false, true), rd, rm); } + void vcvt_unsignedToFloatingPoint(FPDoubleRegisterID rd, FPSingleRegisterID rm) + { + // boolean values are 64bit (toInt, unsigned, roundZero) + m_formatter.vfpOp(OP_VCVT_FPIVFP, OP_VCVT_FPIVFPb, true, vcvtOp(false, true, false), rd, rm); + } + void vcvt_floatingPointToUnsigned(FPSingleRegisterID rd, FPDoubleRegisterID rm) { // boolean values are 64bit (toInt, unsigned, roundZero) diff --git a/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h b/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h index 0c5a5fb3ce..61c13acd35 100644 --- a/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h +++ b/src/3rdparty/masm/assembler/MacroAssemblerARMv7.h @@ -1015,6 +1015,12 @@ public: m_assembler.vmov(fpTempRegister, dataTempRegister, dataTempRegister); m_assembler.vcvt_signedToFloatingPoint(dest, fpTempRegisterAsSingle()); } + + void convertUInt32ToDouble(RegisterID src, FPRegisterID dest, RegisterID /*scratch*/) + { + m_assembler.vmov(fpTempRegister, src, src); + m_assembler.vcvt_unsignedToFloatingPoint(dest, fpTempRegisterAsSingle()); + } void convertFloatToDouble(FPRegisterID src, FPRegisterID dst) { diff --git a/src/qml/compiler/qv4isel_masm.cpp b/src/qml/compiler/qv4isel_masm.cpp index 5ee539648e..020bdb3777 100644 --- a/src/qml/compiler/qv4isel_masm.cpp +++ b/src/qml/compiler/qv4isel_masm.cpp @@ -1935,12 +1935,8 @@ Assembler::Jump InstructionSelection::genTryDoubleConversion(V4IR::Expr *src, dest); return Assembler::Jump(); case V4IR::UInt32Type: -#if CPU(X86_64) || CPU(X86) _as->convertUInt32ToDouble(_as->toUInt32Register(src, Assembler::ScratchRegister), dest, Assembler::ReturnValueRegister); -#else - Q_ASSERT(!"Not supported on this platform!"); -#endif return Assembler::Jump(); case V4IR::BoolType: // TODO? diff --git a/src/qml/compiler/qv4isel_masm_p.h b/src/qml/compiler/qv4isel_masm_p.h index 8235e6e62c..0ee363ff02 100644 --- a/src/qml/compiler/qv4isel_masm_p.h +++ b/src/qml/compiler/qv4isel_masm_p.h @@ -1200,7 +1200,6 @@ public: void storeUInt32(RegisterID reg, Pointer addr) { // The UInt32 representation in QV4::Value is really convoluted. See also toUInt32Register. -#if CPU(X86_64) | CPU(X86) Jump intRange = branch32(GreaterThanOrEqual, reg, TrustedImm32(0)); convertUInt32ToDouble(reg, FPGpr0, ReturnValueRegister); storeDouble(FPGpr0, addr); @@ -1208,11 +1207,6 @@ public: intRange.link(this); storeInt32(reg, addr); done.link(this); -#else - Q_ASSERT(!"Not tested on this platform!"); - Q_UNUSED(reg) - Q_UNUSED(addr) -#endif } void storeUInt32(RegisterID reg, V4IR::Temp *target) @@ -1472,25 +1466,13 @@ private: void convertUIntToDouble(V4IR::Temp *source, V4IR::Temp *target) { if (target->kind == V4IR::Temp::PhysicalRegister) { -#if CPU(X86_64) || CPU(X86) _as->convertUInt32ToDouble(_as->toInt32Register(source, Assembler::ScratchRegister), (Assembler::FPRegisterID) target->index, Assembler::ScratchRegister); -#else - Q_ASSERT(!"Not supported on this platform!"); - Q_UNUSED(source) - Q_UNUSED(target) -#endif } else if (target->kind == V4IR::Temp::StackSlot) { -#if CPU(X86_64) || CPU(X86) _as->convertUInt32ToDouble(_as->toUInt32Register(source, Assembler::ScratchRegister), Assembler::FPGpr0, Assembler::ScratchRegister); _as->storeDouble(Assembler::FPGpr0, _as->stackSlotPointer(target)); -#else - Q_ASSERT(!"Not supported on this platform!"); - Q_UNUSED(source) - Q_UNUSED(target) -#endif } else { Q_UNIMPLEMENTED(); } |