From 87e07d4e28f0a98a61f8b947dba38aece13a57d2 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 22 Nov 2019 17:51:06 +0100 Subject: [PATCH] Reorganize the SIMD functions to "hide" part of it in a subnamespace --- sfizz/SIMDHelpers.h | 308 ++++++++++++++++++++++++-------------------- sfizz/SIMDSSE.cpp | 68 +++++----- 2 files changed, 201 insertions(+), 175 deletions(-) diff --git a/sfizz/SIMDHelpers.h b/sfizz/SIMDHelpers.h index dda5998f..84c7ceff 100644 --- a/sfizz/SIMDHelpers.h +++ b/sfizz/SIMDHelpers.h @@ -29,13 +29,14 @@ #include #include -namespace sfz -{ -template -inline void snippetRead(const T*& input, T*& outputLeft, T*& outputRight) -{ - *outputLeft++ = *input++; - *outputRight++ = *input++; +namespace sfz { +namespace _internals { + template + inline void snippetRead(const T*& input, T*& outputLeft, T*& outputRight) + { + *outputLeft++ = *input++; + *outputRight++ = *input++; + } } template @@ -49,14 +50,16 @@ void readInterleaved(absl::Span input, absl::Span outputLeft, absl:: auto* lOut = outputLeft.begin(); auto* rOut = outputRight.begin(); while (in < (input.end() - 1) && lOut < outputLeft.end() && rOut < outputRight.end()) - snippetRead(in, lOut, rOut); + _internals::snippetRead(in, lOut, rOut); } -template -inline void snippetWrite(T*& output, const T*& inputLeft, const T*& inputRight) -{ - *output++ = *inputLeft++; - *output++ = *inputRight++; +namespace _internals { + template + inline void snippetWrite(T*& output, const T*& inputLeft, const T*& inputRight) + { + *output++ = *inputLeft++; + *output++ = *inputRight++; + } } template @@ -69,7 +72,7 @@ void writeInterleaved(absl::Span inputLeft, absl::Span inputRi auto* rIn = inputRight.begin(); auto* out = output.begin(); while (lIn < inputLeft.end() && rIn < inputRight.end() && out < (output.end() - 1)) - snippetWrite(out, lIn, rIn); + _internals::snippetWrite(out, lIn, rIn); } // Specializations @@ -135,27 +138,26 @@ void cos(absl::Span input, absl::Span output) noexcept template <> void cos(absl::Span input, absl::Span output) noexcept; -template <> -void cos(absl::Span input, absl::Span output) noexcept; - -template -inline void snippetSaturatingIndex(const T*& jump, T*& leftCoeff, T*& rightCoeff, int*& index, T& floatIndex, T loopEnd) -{ - floatIndex += *jump; - if (floatIndex >= loopEnd) { - floatIndex = loopEnd; - *index = static_cast(floatIndex) - 1; - *rightCoeff = static_cast(1.0); - *leftCoeff = static_cast(0.0); - } else { - *index = static_cast(floatIndex); - *rightCoeff = floatIndex - *index; - *leftCoeff = static_cast(1.0) - *rightCoeff; +namespace _internals { + template + inline void snippetSaturatingIndex(const T*& jump, T*& leftCoeff, T*& rightCoeff, int*& index, T& floatIndex, T loopEnd) + { + floatIndex += *jump; + if (floatIndex >= loopEnd) { + floatIndex = loopEnd; + *index = static_cast(floatIndex) - 1; + *rightCoeff = static_cast(1.0); + *leftCoeff = static_cast(0.0); + } else { + *index = static_cast(floatIndex); + *rightCoeff = floatIndex - *index; + *leftCoeff = static_cast(1.0) - *rightCoeff; + } + index++; + leftCoeff++; + rightCoeff++; + jump++; } - index++; - leftCoeff++; - rightCoeff++; - jump++; } template @@ -173,26 +175,28 @@ float saturatingSFZIndex(absl::Span jumps, absl::Span leftCoeffs, ab auto* sentinel = jumps.begin() + size; while (jump < sentinel) - snippetSaturatingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd); + _internals::snippetSaturatingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd); return floatIndex; } template <> float saturatingSFZIndex(absl::Span jumps, absl::Span leftCoeffs, absl::Span rightCoeffs, absl::Span indices, float floatIndex, float loopEnd) noexcept; -template -inline void snippetLoopingIndex(const T*& jump, T*& leftCoeff, T*& rightCoeff, int*& index, T& floatIndex, T loopEnd, T loopStart) -{ - floatIndex += *jump; - if (floatIndex >= loopEnd) - floatIndex -= loopEnd - loopStart; - *index = static_cast(floatIndex); - *rightCoeff = floatIndex - *index; - *leftCoeff = 1.0f - *rightCoeff; - index++; - leftCoeff++; - rightCoeff++; - jump++; +namespace _internals { + template + inline void snippetLoopingIndex(const T*& jump, T*& leftCoeff, T*& rightCoeff, int*& index, T& floatIndex, T loopEnd, T loopStart) + { + floatIndex += *jump; + if (floatIndex >= loopEnd) + floatIndex -= loopEnd - loopStart; + *index = static_cast(floatIndex); + *rightCoeff = floatIndex - *index; + *leftCoeff = 1.0f - *rightCoeff; + index++; + leftCoeff++; + rightCoeff++; + jump++; + } } template @@ -210,17 +214,19 @@ float loopingSFZIndex(absl::Span jumps, absl::Span leftCoeffs, absl: auto* sentinel = jumps.begin() + size; while (jump < sentinel) - snippetLoopingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd, loopStart); + _internals::snippetLoopingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd, loopStart); return floatIndex; } template <> float loopingSFZIndex(absl::Span jumps, absl::Span leftCoeff, absl::Span rightCoeff, absl::Span indices, float floatIndex, float loopEnd, float loopStart) noexcept; -template -inline void snippetGain(T gain, const T*& input, T*& output) -{ - *output++ = gain * (*input++); +namespace _internals { + template + inline void snippetGain(T gain, const T*& input, T*& output) + { + *output++ = gain * (*input++); + } } template @@ -231,13 +237,15 @@ void applyGain(T gain, absl::Span input, absl::Span output) noexcept auto* out = output.begin(); auto* sentinel = out + std::min(output.size(), input.size()); while (out < sentinel) - snippetGain(gain, in, out); + _internals::snippetGain(gain, in, out); } -template -inline void snippetGainSpan(const T*& gain, const T*& input, T*& output) -{ - *output++ = (*gain++) * (*input++); +namespace _internals { + template + inline void snippetGainSpan(const T*& gain, const T*& input, T*& output) + { + *output++ = (*gain++) * (*input++); + } } template @@ -250,7 +258,7 @@ void applyGain(absl::Span gain, absl::Span input, absl::Span(g, in, out); + _internals::snippetGainSpan(g, in, out); } template @@ -271,10 +279,12 @@ void applyGain(float gain, absl::Span input, absl::Spa template <> void applyGain(absl::Span gain, absl::Span input, absl::Span output) noexcept; -template -inline void snippetMultiplyAdd(const T*& gain, const T*& input, T*& output) -{ - *output++ += (*gain++) * (*input++); +namespace _internals { + template + inline void snippetMultiplyAdd(const T*& gain, const T*& input, T*& output) + { + *output++ += (*gain++) * (*input++); + } } template @@ -287,17 +297,19 @@ void multiplyAdd(absl::Span gain, absl::Span input, absl::Span auto* out = output.begin(); auto* sentinel = out + std::min(gain.size(), std::min(output.size(), input.size())); while (out < sentinel) - snippetMultiplyAdd(g, in, out); + _internals::snippetMultiplyAdd(g, in, out); } template <> void multiplyAdd(absl::Span gain, absl::Span input, absl::Span output) noexcept; -template -inline void snippetRampLinear(T*& output, T& value, T step) -{ - value += step; - *output++ = value; +namespace _internals { + template + inline void snippetRampLinear(T*& output, T& value, T step) + { + value += step; + *output++ = value; + } } template @@ -305,15 +317,17 @@ T linearRamp(absl::Span output, T start, T step) noexcept { auto* out = output.begin(); while (out < output.end()) - snippetRampLinear(out, start, step); + _internals::snippetRampLinear(out, start, step); return start; } -template -inline void snippetRampMultiplicative(T*& output, T& value, T step) -{ - value *= step; - *output++ = value; +namespace _internals { + template + inline void snippetRampMultiplicative(T*& output, T& value, T step) + { + value *= step; + *output++ = value; + } } template @@ -321,7 +335,7 @@ T multiplicativeRamp(absl::Span output, T start, T step) noexcept { auto* out = output.begin(); while (out < output.end()) - snippetRampMultiplicative(out, start, step); + _internals::snippetRampMultiplicative(out, start, step); return start; } @@ -331,10 +345,17 @@ float linearRamp(absl::Span output, float start, float step) template <> float multiplicativeRamp(absl::Span output, float start, float step) noexcept; -template -inline void snippetAdd(const T*& input, T*& output) -{ - *output++ += *input++; +namespace _internals { + template + inline void snippetAdd(const T*& input, T*& output) + { + *output++ += *input++; + } + template + inline void snippetAdd(const T value, T*& output) + { + *output++ += value; + } } template @@ -345,41 +366,36 @@ void add(absl::Span input, absl::Span output) noexcept auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); while (out < sentinel) - snippetAdd(in, out); + _internals::snippetAdd(in, out); } template <> void add(absl::Span input, absl::Span output) noexcept; -template -inline void snippetAdd(const T value, T*& output) -{ - *output++ += value; -} - template void add(T value, absl::Span output) noexcept { auto* out = output.begin(); auto* sentinel = output.end(); while (out < sentinel) - snippetAdd(value, out); + _internals::snippetAdd(value, out); } template <> void add(float value, absl::Span output) noexcept; +namespace _internals { + template + inline void snippetSubtract(const T*& input, T*& output) + { + *output++ -= *input++; + } -template -inline void snippetSubtract(const T*& input, T*& output) -{ - *output++ -= *input++; -} - -template -inline void snippetSubtract(const T value, T*& output) -{ - *output++ -= value; + template + inline void snippetSubtract(const T value, T*& output) + { + *output++ -= value; + } } template @@ -388,7 +404,7 @@ void subtract(const T value, absl::Span output) noexcept auto* out = output.begin(); auto* sentinel = output.end(); while (out < sentinel) - snippetSubtract(value, out); + _internals::snippetSubtract(value, out); } template @@ -399,7 +415,7 @@ void subtract(absl::Span input, absl::Span output) noexcept auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); while (out < sentinel) - snippetSubtract(in, out); + _internals::snippetSubtract(in, out); } template <> @@ -408,10 +424,12 @@ void subtract(absl::Span input, absl::Span outp template <> void subtract(const float value, absl::Span output) noexcept; -template -void snippetCopy(const T*& input, T*& output) -{ - *output++ = *input++; +namespace _internals { + template + void snippetCopy(const T*& input, T*& output) + { + *output++ = *input++; + } } template @@ -422,18 +440,20 @@ void copy(absl::Span input, absl::Span output) noexcept auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); while (out < sentinel) - snippetCopy(in, out); + _internals::snippetCopy(in, out); } template <> void copy(absl::Span input, absl::Span output) noexcept; -template -inline void snippetPan(const T*& pan, T*& left, T*& right) -{ - const auto circlePan = piFour * (static_cast(1.0) + *pan++); - *left++ *= std::cos(circlePan); - *right++ *= std::sin(circlePan); +namespace _internals { + template + inline void snippetPan(const T*& pan, T*& left, T*& right) + { + const auto circlePan = piFour * (static_cast(1.0) + *pan++); + *left++ *= std::cos(circlePan); + *right++ *= std::sin(circlePan); + } } template @@ -446,7 +466,7 @@ void pan(absl::Span panEnvelope, absl::Span leftBuffer, absl::Span @@ -455,7 +475,7 @@ void pan(absl::Span panEnvelope, absl::Span lef template T mean(absl::Span vector) noexcept { - T result { 0.0 }; + T result{ 0.0 }; if (vector.size() == 0) return result; @@ -472,7 +492,7 @@ float mean(absl::Span vector) noexcept; template T meanSquared(absl::Span vector) noexcept { - T result { 0.0 }; + T result{ 0.0 }; if (vector.size() == 0) return result; @@ -488,11 +508,13 @@ T meanSquared(absl::Span vector) noexcept template <> float meanSquared(absl::Span vector) noexcept; -template -inline void snippetCumsum(const T*& input, T*& output) -{ - *output = *(output - 1) + *input++; - output++; +namespace _internals { + template + inline void snippetCumsum(const T*& input, T*& output) + { + *output = *(output - 1) + *input++; + output++; + } } template @@ -508,25 +530,27 @@ void cumsum(absl::Span input, absl::Span output) noexcept *out++ = *in++; while (in < sentinel) - snippetCumsum(in, out); + _internals::snippetCumsum(in, out); } template <> void cumsum(absl::Span input, absl::Span output) noexcept; -template -void snippetSFZInterpolationCast(const T*& floatJump, int*& jump, T*& leftCoeff, T*& rightCoeff) -{ - *jump = static_cast(*floatJump); - *rightCoeff = *floatJump - static_cast(*jump); - *leftCoeff = static_cast(1.0) - *rightCoeff; - leftCoeff++; - jump++; - rightCoeff++; - floatJump++; +namespace _internals { + template + void snippetSFZInterpolationCast(const T*& floatJump, int*& jump, T*& leftCoeff, T*& rightCoeff) + { + *jump = static_cast(*floatJump); + *rightCoeff = *floatJump - static_cast(*jump); + *leftCoeff = static_cast(1.0) - *rightCoeff; + leftCoeff++; + jump++; + rightCoeff++; + floatJump++; + } } -template +template void sfzInterpolationCast(absl::Span floatJumps, absl::Span jumps, absl::Span leftCoeffs, absl::Span rightCoeffs) noexcept { ASSERT(jumps.size() >= floatJumps.size()); @@ -540,18 +564,20 @@ void sfzInterpolationCast(absl::Span floatJumps, absl::Span jumps, const auto sentinel = floatJump + min(floatJumps.size(), jumps.size(), leftCoeffs.size(), rightCoeffs.size()); while (floatJump < sentinel) - snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); + _internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); } -template<> +template <> void sfzInterpolationCast(absl::Span floatJumps, absl::Span jumps, absl::Span leftCoeffs, absl::Span rightCoeffs) noexcept; -template -inline void snippetDiff(const T*& input, T*& output) -{ - *output = *input - *(input - 1); - output++; - input++; +namespace _internals { + template + inline void snippetDiff(const T*& input, T*& output) + { + *output = *input - *(input - 1); + output++; + input++; + } } template @@ -567,10 +593,10 @@ void diff(absl::Span input, absl::Span output) noexcept *out++ = *in++; while (in < sentinel) - snippetDiff(in, out); + _internals::snippetDiff(in, out); } template <> -void cumsum(absl::Span input, absl::Span output) noexcept; +void diff(absl::Span input, absl::Span output) noexcept; } // namespace sfz \ No newline at end of file diff --git a/sfizz/SIMDSSE.cpp b/sfizz/SIMDSSE.cpp index 57997627..253cde36 100644 --- a/sfizz/SIMDSSE.cpp +++ b/sfizz/SIMDSSE.cpp @@ -92,7 +92,7 @@ void sfz::readInterleaved(absl::Span input, absl::Span const auto* lastAligned = prevAligned(input.begin() + size - TypeAlignment); while (unaligned(in, lOut, rOut) && in < lastAligned) - snippetRead(in, lOut, rOut); + _internals::snippetRead(in, lOut, rOut); while (in < lastAligned) { auto register0 = _mm_load_ps(in); @@ -112,7 +112,7 @@ void sfz::readInterleaved(absl::Span input, absl::Span } while (in < input.end() - 1) - snippetRead(in, lOut, rOut); + _internals::snippetRead(in, lOut, rOut); } template <> @@ -130,7 +130,7 @@ void sfz::writeInterleaved(absl::Span inputLeft, absl: const auto* lastAligned = prevAligned(output.begin() + size - TypeAlignment); while (unaligned(out, rIn, lIn) && out < lastAligned) - snippetWrite(out, lIn, rIn); + _internals::snippetWrite(out, lIn, rIn); while (out < lastAligned) { const auto lInRegister = _mm_load_ps(lIn); @@ -149,7 +149,7 @@ void sfz::writeInterleaved(absl::Span inputLeft, absl: } while (out < output.end() - 1) - snippetWrite(out, lIn, rIn); + _internals::snippetWrite(out, lIn, rIn); } template <> @@ -292,7 +292,7 @@ void sfz::applyGain(absl::Span gain, absl::Span(g, in, out); + _internals::snippetGainSpan(g, in, out); while (out < lastAligned) { _mm_store_ps(out, _mm_mul_ps(_mm_load_ps(g), _mm_load_ps(in))); @@ -302,7 +302,7 @@ void sfz::applyGain(absl::Span gain, absl::Span(g, in, out); + _internals::snippetGainSpan(g, in, out); } template <> @@ -315,7 +315,7 @@ void sfz::multiplyAdd(absl::Span gain, absl::Span(g, in, out); + _internals::snippetMultiplyAdd(g, in, out); while (out < lastAligned) { auto mmOut = _mm_load_ps(out); @@ -327,7 +327,7 @@ void sfz::multiplyAdd(absl::Span gain, absl::Span(g, in, out); + _internals::snippetMultiplyAdd(g, in, out); } template <> @@ -352,7 +352,7 @@ float sfz::loopingSFZIndex(absl::Span jumps, const auto* alignedEnd = prevAligned(sentinel); while (unaligned(reinterpret_cast(index), leftCoeff, rightCoeff, jump) && jump < alignedEnd) - snippetLoopingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd, loopStart); + _internals::snippetLoopingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd, loopStart); auto mmFloatIndex = _mm_set_ps1(floatIndex); const auto mmJumpBack = _mm_set1_ps(loopEnd - loopStart); @@ -388,7 +388,7 @@ float sfz::loopingSFZIndex(absl::Span jumps, floatIndex = _mm_cvtss_f32(mmFloatIndex); while (jump < sentinel) - snippetLoopingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd, loopStart); + _internals::snippetLoopingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd, loopStart); return floatIndex; } @@ -413,7 +413,7 @@ float sfz::saturatingSFZIndex(absl::Span jumps, const auto* alignedEnd = prevAligned(sentinel); while (unaligned(reinterpret_cast(index), leftCoeff, rightCoeff, jump) && jump < alignedEnd) - snippetSaturatingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd); + _internals::snippetSaturatingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd); auto mmFloatIndex = _mm_set_ps1(floatIndex); const auto mmLoopEnd = _mm_set1_ps(loopEnd); @@ -446,7 +446,7 @@ float sfz::saturatingSFZIndex(absl::Span jumps, floatIndex = _mm_cvtss_f32(mmFloatIndex); while (jump < sentinel) - snippetSaturatingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd); + _internals::snippetSaturatingIndex(jump, leftCoeff, rightCoeff, index, floatIndex, loopEnd); return floatIndex; } @@ -457,7 +457,7 @@ float sfz::linearRamp(absl::Span output, float value, float const auto* lastAligned = prevAligned(output.end()); while (unaligned(out) && out < lastAligned) - snippetRampLinear(out, value, step); + _internals::snippetRampLinear(out, value, step); auto mmValue = _mm_set1_ps(value); auto mmStep = _mm_set_ps(step + step + step + step, step + step + step, step + step, step); @@ -471,7 +471,7 @@ float sfz::linearRamp(absl::Span output, float value, float value = _mm_cvtss_f32(mmValue); while (out < output.end()) - snippetRampLinear(out, value, step); + _internals::snippetRampLinear(out, value, step); return value; } @@ -482,7 +482,7 @@ float sfz::multiplicativeRamp(absl::Span output, float value const auto* lastAligned = prevAligned(output.end()); while (unaligned(out) && out < lastAligned) - snippetRampMultiplicative(out, value, step); + _internals::snippetRampMultiplicative(out, value, step); auto mmValue = _mm_set1_ps(value); auto mmStep = _mm_set_ps(step * step * step * step, step * step * step, step * step, step); @@ -496,7 +496,7 @@ float sfz::multiplicativeRamp(absl::Span output, float value value = _mm_cvtss_f32(mmValue); while (out < output.end()) - snippetRampMultiplicative(out, value, step); + _internals::snippetRampMultiplicative(out, value, step); return value; } @@ -510,7 +510,7 @@ void sfz::add(absl::Span input, absl::Span outp const auto* lastAligned = prevAligned(sentinel); while (unaligned(in, out) && out < lastAligned) - snippetAdd(in, out); + _internals::snippetAdd(in, out); while (out < lastAligned) { _mm_store_ps(out, _mm_add_ps(_mm_load_ps(in), _mm_load_ps(out))); @@ -519,7 +519,7 @@ void sfz::add(absl::Span input, absl::Span outp } while (out < sentinel) - snippetAdd(in, out); + _internals::snippetAdd(in, out); } template <> @@ -530,7 +530,7 @@ void sfz::add(float value, absl::Span output) noexcept const auto* lastAligned = prevAligned(sentinel); while (unaligned(out) && out < lastAligned) - snippetAdd(value, out); + _internals::snippetAdd(value, out); auto mmValue = _mm_set_ps1(value); while (out < lastAligned) { @@ -539,7 +539,7 @@ void sfz::add(float value, absl::Span output) noexcept } while (out < sentinel) - snippetAdd(value, out); + _internals::snippetAdd(value, out); } template <> @@ -552,7 +552,7 @@ void sfz::subtract(absl::Span input, absl::Span const auto* lastAligned = prevAligned(sentinel); while (unaligned(in, out) && out < lastAligned) - snippetSubtract(in, out); + _internals::snippetSubtract(in, out); while (out < lastAligned) { _mm_store_ps(out, _mm_sub_ps(_mm_load_ps(out), _mm_load_ps(in))); @@ -561,7 +561,7 @@ void sfz::subtract(absl::Span input, absl::Span } while (out < sentinel) - snippetSubtract(in, out); + _internals::snippetSubtract(in, out); } template <> @@ -572,7 +572,7 @@ void sfz::subtract(const float value, absl::Span output) noe const auto* lastAligned = prevAligned(sentinel); while (unaligned(out) && out < lastAligned) - snippetSubtract(value, out); + _internals::snippetSubtract(value, out); auto mmValue = _mm_set_ps1(value); while (out < lastAligned) { @@ -581,7 +581,7 @@ void sfz::subtract(const float value, absl::Span output) noe } while (out < sentinel) - snippetSubtract(value, out); + _internals::snippetSubtract(value, out); } template <> @@ -594,7 +594,7 @@ void sfz::copy(absl::Span input, absl::Span out const auto* lastAligned = prevAligned(sentinel); while (unaligned(in, out) && out < lastAligned) - snippetCopy(in, out); + _internals::snippetCopy(in, out); while (out < lastAligned) { _mm_store_ps(out, _mm_load_ps(in)); @@ -603,7 +603,7 @@ void sfz::copy(absl::Span input, absl::Span out } while (out < sentinel) - snippetCopy(in, out); + _internals::snippetCopy(in, out); } template <> @@ -618,7 +618,7 @@ void sfz::pan(absl::Span panEnvelope, absl::Span); @@ -639,7 +639,7 @@ void sfz::pan(absl::Span panEnvelope, absl::Span @@ -725,7 +725,7 @@ void sfz::cumsum(absl::Span input, absl::Span o *out++ = *in++; while (unaligned(in, out) && in < lastAligned) - snippetCumsum(in, out); + _internals::snippetCumsum(in, out); auto mmOutput = _mm_set_ps1(*(out - 1)); while (in < lastAligned) { @@ -740,7 +740,7 @@ void sfz::cumsum(absl::Span input, absl::Span o } while (in < sentinel) - snippetCumsum(in, out); + _internals::snippetCumsum(in, out); } template <> @@ -758,7 +758,7 @@ void sfz::sfzInterpolationCast(absl::Span floatJumps, const auto lastAligned = prevAligned(sentinel); while (unaligned(floatJump, reinterpret_cast(jump), leftCoeff, rightCoeff) && floatJump < lastAligned) - snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); + _internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); while (floatJump < lastAligned) { auto mmFloatJumps = _mm_load_ps(floatJump); @@ -776,7 +776,7 @@ void sfz::sfzInterpolationCast(absl::Span floatJumps, } while(floatJump < sentinel) - snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); + _internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); } template <> @@ -793,7 +793,7 @@ void sfz::diff(absl::Span input, absl::Span out *out++ = *in++; while (unaligned(in, out) && in < lastAligned) - snippetDiff(in, out); + _internals::snippetDiff(in, out); auto mmBase = _mm_set_ps1(*(in - 1)); while (in < lastAligned) { @@ -808,5 +808,5 @@ void sfz::diff(absl::Span input, absl::Span out } while (in < sentinel) - snippetDiff(in, out); + _internals::snippetDiff(in, out); } \ No newline at end of file