mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
resample-peaks: unroll loop a little
This commit is contained in:
parent
187006f30e
commit
c9ee142b78
1 changed files with 9 additions and 6 deletions
|
|
@ -39,7 +39,7 @@ static inline float hmax_ps(__m128 val)
|
||||||
|
|
||||||
static inline float find_abs_max_sse(const float *s, uint32_t n_samples, float m)
|
static inline float find_abs_max_sse(const float *s, uint32_t n_samples, float m)
|
||||||
{
|
{
|
||||||
__m128 in, max;
|
__m128 in[2], max;
|
||||||
uint32_t n, unrolled;
|
uint32_t n, unrolled;
|
||||||
const __m128 mask = _mm_andnot_ps(
|
const __m128 mask = _mm_andnot_ps(
|
||||||
_mm_set_ps1(-0.0f),
|
_mm_set_ps1(-0.0f),
|
||||||
|
|
@ -47,12 +47,15 @@ static inline float find_abs_max_sse(const float *s, uint32_t n_samples, float m
|
||||||
|
|
||||||
max = _mm_set1_ps(m);
|
max = _mm_set1_ps(m);
|
||||||
|
|
||||||
unrolled = n_samples & ~3;
|
unrolled = n_samples & ~7;
|
||||||
|
|
||||||
for (n = 0; n < unrolled; n+=4) {
|
for (n = 0; n < unrolled; n += 8) {
|
||||||
in = _mm_loadu_ps(&s[n]);
|
in[0] = _mm_loadu_ps(&s[n + 0]);
|
||||||
in = _mm_and_ps(mask, in);
|
in[1] = _mm_loadu_ps(&s[n + 4]);
|
||||||
max = _mm_max_ps(in, max);
|
in[0] = _mm_and_ps(mask, in[0]);
|
||||||
|
in[1] = _mm_and_ps(mask, in[1]);
|
||||||
|
max = _mm_max_ps(in[0], max);
|
||||||
|
max = _mm_max_ps(in[1], max);
|
||||||
}
|
}
|
||||||
for (; n < n_samples; n++)
|
for (; n < n_samples; n++)
|
||||||
m = fmaxf(fabsf(s[n]), m);
|
m = fmaxf(fabsf(s[n]), m);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue