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 <>
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());
ASSERT(jumps.size() == leftCoeffs.size());
ASSERT(jumps.size() == rightCoeffs.size());
sfz::sfzInterpolationCast<float, false>(floatJumps, jumps, leftCoeffs, rightCoeffs);
// ASSERT(jumps.size() >= floatJumps.size());
// ASSERT(jumps.size() == leftCoeffs.size());
// ASSERT(jumps.size() == rightCoeffs.size());
auto floatJump = floatJumps.data();
auto jump = jumps.data();
auto leftCoeff = leftCoeffs.data();
auto rightCoeff = rightCoeffs.data();
const auto sentinel = floatJump + min(floatJumps.size(), jumps.size(), leftCoeffs.size(), rightCoeffs.size());
const auto lastAligned = prevAligned(sentinel);
// auto floatJump = floatJumps.data();
// auto jump = jumps.data();
// auto leftCoeff = leftCoeffs.data();
// auto rightCoeff = rightCoeffs.data();
// const auto sentinel = floatJump + min(floatJumps.size(), jumps.size(), leftCoeffs.size(), rightCoeffs.size());
// const auto lastAligned = prevAligned(sentinel);
while (unaligned(floatJump, reinterpret_cast<float*>(jump), leftCoeff, rightCoeff) && floatJump < lastAligned)
_internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff);
// while (unaligned(floatJump, reinterpret_cast<float*>(jump), leftCoeff, rightCoeff) && floatJump < lastAligned)
// _internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff);
while (floatJump < lastAligned) {
auto mmFloatJumps = _mm_load_ps(floatJump);
auto mmIndices = _mm_cvtps_epi32(_mm_sub_ps(mmFloatJumps, _mm_set_ps1(0.4999999552965164184570312f)));
_mm_store_si128(reinterpret_cast<__m128i*>(jump), mmIndices);
// while (floatJump < lastAligned) {
// auto mmFloatJumps = _mm_load_ps(floatJump);
// auto mmIndices = _mm_cvtps_epi32(_mm_sub_ps(mmFloatJumps, _mm_set_ps1(0.4999999552965164184570312f)));
// _mm_store_si128(reinterpret_cast<__m128i*>(jump), mmIndices);
auto mmRight = _mm_sub_ps(mmFloatJumps, _mm_cvtepi32_ps(mmIndices));
auto mmLeft = _mm_sub_ps(_mm_set_ps1(1.0f), mmRight);
_mm_store_ps(leftCoeff, mmLeft);
_mm_store_ps(rightCoeff, mmRight);
incrementAll<TypeAlignment>(floatJump, jump, leftCoeff, rightCoeff);
}
// auto mmRight = _mm_sub_ps(mmFloatJumps, _mm_cvtepi32_ps(mmIndices));
// auto mmLeft = _mm_sub_ps(_mm_set_ps1(1.0f), mmRight);
// _mm_store_ps(leftCoeff, mmLeft);
// _mm_store_ps(rightCoeff, mmRight);
// incrementAll<TypeAlignment>(floatJump, jump, leftCoeff, rightCoeff);
// }
while(floatJump < sentinel)
_internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff);
// while(floatJump < sentinel)
// _internals::snippetSFZInterpolationCast(floatJump, jump, leftCoeff, rightCoeff);
}
template <>