diff --git a/src/sfizz/effects/impl/ResonantStringAVX.cpp b/src/sfizz/effects/impl/ResonantStringAVX.cpp index e1819b52..e3f0275c 100644 --- a/src/sfizz/effects/impl/ResonantStringAVX.cpp +++ b/src/sfizz/effects/impl/ResonantStringAVX.cpp @@ -19,7 +19,8 @@ Compilation options: -lang cpp -inpl -os -scal -ftz 0 #if SFIZZ_CPU_FAMILY_X86_64 || SFIZZ_CPU_FAMILY_I386 #include #include -#include +#include +#include namespace sfz { namespace fx { @@ -46,6 +47,9 @@ static void store_nth_v(__m256 &x, unsigned i, float v) void ResonantStringAVX::init(float sample_rate) { + if (reinterpret_cast(this) & 31) + throw std::runtime_error("The resonant string is misaligned for AVX"); + fConst0 = _mm256_set1_ps(sample_rate); fConst1 = _mm256_div_ps(_mm256_set1_ps(6.28318548f), fConst0); fConst2 = _mm256_div_ps(_mm256_set1_ps(2.0f), fConst0); diff --git a/src/sfizz/effects/impl/ResonantStringSSE.cpp b/src/sfizz/effects/impl/ResonantStringSSE.cpp index df802d48..95109cc2 100644 --- a/src/sfizz/effects/impl/ResonantStringSSE.cpp +++ b/src/sfizz/effects/impl/ResonantStringSSE.cpp @@ -19,7 +19,8 @@ Compilation options: -lang cpp -inpl -os -scal -ftz 0 #if SFIZZ_CPU_FAMILY_X86_64 || SFIZZ_CPU_FAMILY_I386 #include #include -#include +#include +#include namespace sfz { namespace fx { @@ -46,6 +47,9 @@ static void store_nth_v(__m128 &x, unsigned i, float v) void ResonantStringSSE::init(float sample_rate) { + if (reinterpret_cast(this) & 31) + throw std::runtime_error("The resonant string is misaligned for SSE"); + fConst0 = _mm_set1_ps(sample_rate); fConst1 = _mm_div_ps(_mm_set1_ps(6.28318548f), fConst0); fConst2 = _mm_div_ps(_mm_set1_ps(2.0f), fConst0);