Skip to content

Commit 61b5bee

Browse files
committed
Restored fixed to floatconversions
1 parent f5d66f6 commit 61b5bee

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

modules/yup_audio_basics/buffers/yup_FloatVectorOperations.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
18051834
intptr_t YUP_CALLTYPE FloatVectorOperations::getFpStatusRegister() noexcept
18061835
{
18071836
intptr_t fpsr = 0;

modules/yup_audio_basics/buffers/yup_FloatVectorOperations.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,12 @@ struct NameForwarder : public Bases...
220220
class YUP_API FloatVectorOperations : public detail::NameForwarder<FloatVectorOperationsBase<float, int>, FloatVectorOperationsBase<float, size_t>, FloatVectorOperationsBase<double, int>, FloatVectorOperationsBase<double, size_t>>
221221
{
222222
public:
223+
/** */
224+
static void JUCE_CALLTYPE convertFixedToFloat (float* dest, const int* src, float multiplier, int num) noexcept;
225+
226+
/** */
227+
static void JUCE_CALLTYPE convertFixedToFloat (float* dest, const int* src, float multiplier, size_t num) noexcept;
228+
223229
/** This method enables or disables the SSE/NEON flush-to-zero mode. */
224230
static void YUP_CALLTYPE enableFlushToZeroMode (bool shouldEnable) noexcept;
225231

0 commit comments

Comments
 (0)