From 01dbbb86c333c9a96f1a779ba88468317bc794fc Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 11 Aug 2020 15:12:50 +0200 Subject: [PATCH] AVX/SSE compatibility This fixes symbol mangle for window builds, and offers backwards compatibility with older systems where the inline _mm256_cvtss_f32 is not defined in avxintrin.h --- libs/ardour/ardour/mix.h | 7 ++++++- libs/ardour/sse_functions_avx_linux.cc | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libs/ardour/ardour/mix.h b/libs/ardour/ardour/mix.h index a22d9587fb..a394a64ce2 100644 --- a/libs/ardour/ardour/mix.h +++ b/libs/ardour/ardour/mix.h @@ -40,10 +40,15 @@ extern "C" { LIBARDOUR_API void x86_sse_avx_mix_buffers_with_gain(float * dst, const float * src, uint32_t nframes, float gain); LIBARDOUR_API void x86_sse_avx_mix_buffers_no_gain (float * dst, const float * src, uint32_t nframes); LIBARDOUR_API void x86_sse_avx_copy_vector (float * dst, const float * src, uint32_t nframes); +#ifndef PLATFORM_WINDOWS LIBARDOUR_API void x86_sse_avx_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max); +#endif } -LIBARDOUR_API void x86_sse_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max); +LIBARDOUR_API void x86_sse_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max); +#ifdef PLATFORM_WINDOWS +LIBARDOUR_API void x86_sse_avx_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max); +#endif /* debug wrappers for SSE functions */ diff --git a/libs/ardour/sse_functions_avx_linux.cc b/libs/ardour/sse_functions_avx_linux.cc index 6d49e46a78..6ab2f1731f 100644 --- a/libs/ardour/sse_functions_avx_linux.cc +++ b/libs/ardour/sse_functions_avx_linux.cc @@ -137,7 +137,7 @@ x86_sse_avx_compute_peak(const float *src, uint32_t nframes, float current) // zero upper 128 bit of 256 bit ymm register to avoid penalties using non-AVX instructions _mm256_zeroupper(); - return _mm256_cvtss_f32(vcurrent); + return vcurrent[0]; // _mm256_cvtss_f32 } /**