X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsse_functions_avx.cc;h=19bca8041c89c7a43da8d84e4272769a038e8067;hb=d92686afb4105b84b014372b6feb0ccc454a5171;hp=8c076aacb5fd5a61707a4083d74f7267c8f018e9;hpb=07c07501428f2bc3409c89d5e7e2413d560feefe;p=ardour.git diff --git a/libs/ardour/sse_functions_avx.cc b/libs/ardour/sse_functions_avx.cc index 8c076aacb5..19bca8041c 100644 --- a/libs/ardour/sse_functions_avx.cc +++ b/libs/ardour/sse_functions_avx.cc @@ -20,21 +20,21 @@ #include #include -#include "ardour/types.h" +#include void -x86_sse_avx_find_peaks(const ARDOUR::Sample* buf, ARDOUR::pframes_t nframes, float *min, float *max) +x86_sse_avx_find_peaks(const float* buf, uint32_t nframes, float *min, float *max) { __m256 current_max, current_min, work; - // Load max and min values into all four slots of the XMM registers + // Load max and min values into all eight slots of the YMM registers current_min = _mm256_set1_ps(*min); current_max = _mm256_set1_ps(*max); // Work input until "buf" reaches 16 byte alignment while ( ((intptr_t)buf) % 32 != 0 && nframes > 0) { - + // Load the next float into the work buffer work = _mm256_set1_ps(*buf); @@ -48,9 +48,9 @@ x86_sse_avx_find_peaks(const ARDOUR::Sample* buf, ARDOUR::pframes_t nframes, flo // use 64 byte prefetch for quadruple quads: // load each 64 bytes into cash before processing while (nframes >= 16) { -#if defined(COMPILER_MSVC) || defined(COMPILER_MINGW) - _mm_prefetch(((char*)buf+64), _mm_hint(0) ); // A total guess! Assumed to be eqivalent to -#else // the line below but waiting to be tested !! +#if defined(COMPILER_MSVC) || defined(COMPILER_MINGW) + _mm_prefetch(((char*)buf+64), _mm_hint(0) ); +#else __builtin_prefetch(buf+64,0,0); #endif work = _mm256_load_ps(buf); @@ -112,9 +112,8 @@ x86_sse_avx_find_peaks(const ARDOUR::Sample* buf, ARDOUR::pframes_t nframes, flo *max = current_max[0]; - // zero upper 128 bit of 256 bit ymm register to avoid penalties using non AVX instructions + // zero upper 128 bit of 256 bit ymm register to avoid penalties using non-AVX instructions _mm256_zeroupper (); } -