Disable the SSE interpolation routine

This commit is contained in:
Paul Ferrand 2020-01-27 09:43:30 +01:00
parent bb5ee8ac00
commit 97870c2989

View file

@ -722,34 +722,35 @@ void sfz::cumsum<float, true>(absl::Span<const float> input, absl::Span<float> o
template <> template <>
void sfz::sfzInterpolationCast<float, true>(absl::Span<const float> floatJumps, absl::Span<int> jumps, absl::Span<float> leftCoeffs, absl::Span<float> rightCoeffs) noexcept void sfz::sfzInterpolationCast<float, true>(absl::Span<const float> floatJumps, absl::Span<int> jumps, absl::Span<float> leftCoeffs, absl::Span<float> rightCoeffs) noexcept
{ {
ASSERT(jumps.size() >= floatJumps.size()); sfz::sfzInterpolationCast<float, false>(floatJumps, jumps, leftCoeffs, rightCoeffs);
ASSERT(jumps.size() == leftCoeffs.size()); // ASSERT(jumps.size() >= floatJumps.size());
ASSERT(jumps.size() == rightCoeffs.size()); // ASSERT(jumps.size() == leftCoeffs.size());
// ASSERT(jumps.size() == rightCoeffs.size());
auto floatJump = floatJumps.data(); // auto floatJump = floatJumps.data();
auto jump = jumps.data(); // auto jump = jumps.data();
auto leftCoeff = leftCoeffs.data(); // auto leftCoeff = leftCoeffs.data();
auto rightCoeff = rightCoeffs.data(); // auto rightCoeff = rightCoeffs.data();
const auto sentinel = floatJump + min(floatJumps.size(), jumps.size(), leftCoeffs.size(), rightCoeffs.size()); // const auto sentinel = floatJump + min(floatJumps.size(), jumps.size(), leftCoeffs.size(), rightCoeffs.size());
const auto lastAligned = prevAligned(sentinel); // const auto lastAligned = prevAligned(sentinel);
while (unaligned(floatJump, reinterpret_cast<float*>(jump), leftCoeff, rightCoeff) && floatJump < lastAligned) // while (unaligned(floatJump, reinterpret_cast<float*>(jump), leftCoeff, rightCoeff) && floatJump < lastAligned)
_internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); // _internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff);
while (floatJump < lastAligned) { // while (floatJump < lastAligned) {
auto mmFloatJumps = _mm_load_ps(floatJump); // auto mmFloatJumps = _mm_load_ps(floatJump);
auto mmIndices = _mm_cvtps_epi32(_mm_sub_ps(mmFloatJumps, _mm_set_ps1(0.4999999552965164184570312f))); // auto mmIndices = _mm_cvtps_epi32(_mm_sub_ps(mmFloatJumps, _mm_set_ps1(0.4999999552965164184570312f)));
_mm_store_si128(reinterpret_cast<__m128i*>(jump), mmIndices); // _mm_store_si128(reinterpret_cast<__m128i*>(jump), mmIndices);
auto mmRight = _mm_sub_ps(mmFloatJumps, _mm_cvtepi32_ps(mmIndices)); // auto mmRight = _mm_sub_ps(mmFloatJumps, _mm_cvtepi32_ps(mmIndices));
auto mmLeft = _mm_sub_ps(_mm_set_ps1(1.0f), mmRight); // auto mmLeft = _mm_sub_ps(_mm_set_ps1(1.0f), mmRight);
_mm_store_ps(leftCoeff, mmLeft); // _mm_store_ps(leftCoeff, mmLeft);
_mm_store_ps(rightCoeff, mmRight); // _mm_store_ps(rightCoeff, mmRight);
incrementAll<TypeAlignment>(floatJump, jump, leftCoeff, rightCoeff); // incrementAll<TypeAlignment>(floatJump, jump, leftCoeff, rightCoeff);
} // }
while(floatJump < sentinel) // while(floatJump < sentinel)
_internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff); // _internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff);
} }
template <> template <>