@@ -1501,6 +1501,23 @@ double findMaximum (const double* src, Size num) noexcept
15011501#endif
15021502}
15031503
1504+ template <typename Size>
1505+ void convertFixedToFloat (float * dest, const int * src, float multiplier, Size num) noexcept
1506+ {
1507+ #if YUP_USE_ARM_NEON
1508+ YUP_PERFORM_VEC_OP_SRC_DEST (dest[i] = (float ) src[i] * multiplier,
1509+ vmulq_n_f32 (vcvtq_f32_s32 (vld1q_s32 (src)), multiplier),
1510+ YUP_LOAD_NONE,
1511+ YUP_INCREMENT_SRC_DEST, )
1512+ #else
1513+ YUP_PERFORM_VEC_OP_SRC_DEST (dest[i] = (float ) src[i] * multiplier,
1514+ Mode::mul (mult, _mm_cvtepi32_ps (_mm_loadu_si128 (reinterpret_cast <const __m128i*> (src)))),
1515+ YUP_LOAD_NONE,
1516+ YUP_INCREMENT_SRC_DEST,
1517+ const Mode::ParallelType mult = Mode::load1 (multiplier);)
1518+ #endif
1519+ }
1520+
15041521} // namespace
15051522} // namespace FloatVectorHelpers
15061523
@@ -1802,6 +1819,18 @@ template struct FloatVectorOperationsBase<double, size_t>;
18021819
18031820// ==============================================================================
18041821
1822+ void YUP_CALLTYPE FloatVectorOperations::convertFixedToFloat (float * dest, const int * src, float multiplier, size_t num) noexcept
1823+ {
1824+ FloatVectorHelpers::convertFixedToFloat (dest, src, multiplier, num);
1825+ }
1826+
1827+ void YUP_CALLTYPE FloatVectorOperations::convertFixedToFloat (float * dest, const int * src, float multiplier, int num) noexcept
1828+ {
1829+ FloatVectorHelpers::convertFixedToFloat (dest, src, multiplier, num);
1830+ }
1831+
1832+ // ==============================================================================
1833+
18051834intptr_t YUP_CALLTYPE FloatVectorOperations::getFpStatusRegister () noexcept
18061835{
18071836 intptr_t fpsr = 0 ;
0 commit comments