diff options
author | Chris Robinson <[email protected]> | 2017-08-16 02:45:25 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2017-08-16 02:45:25 -0700 |
commit | f9c09cc845b786705b43b39300d8706db7ab0054 (patch) | |
tree | 7cbc0b883b916c971390cf48fe2a76199267a1c9 /Alc/mixer_sse.c | |
parent | 520dd5c77972cad13d1a97e228903b3c5bdc384f (diff) |
Simplify bsinc filter storage in the filter state
Rather than storing individual pointers to filter, scale delta, phase delta,
and scale phase delta entries, per phase index, the new table layout makes it
trivial to access the per-phase filter and delta entries given the base offset
and coefficient count.
Diffstat (limited to 'Alc/mixer_sse.c')
-rw-r--r-- | Alc/mixer_sse.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/Alc/mixer_sse.c b/Alc/mixer_sse.c index 68786573..bd7928e4 100644 --- a/Alc/mixer_sse.c +++ b/Alc/mixer_sse.c @@ -16,6 +16,7 @@ const ALfloat *Resample_bsinc32_SSE(const InterpState *state, const ALfloat *res ALsizei frac, ALint increment, ALfloat *restrict dst, ALsizei dstlen) { + const ALfloat *filter = state->bsinc.filter; const __m128 sf4 = _mm_set1_ps(state->bsinc.sf); const ALsizei m = state->bsinc.m; const ALfloat *fil, *scd, *phd, *spd; @@ -32,10 +33,10 @@ const ALfloat *Resample_bsinc32_SSE(const InterpState *state, const ALfloat *res pf = (frac & ((1<<FRAC_PHASE_BITDIFF)-1)) * (1.0f/(1<<FRAC_PHASE_BITDIFF)); #undef FRAC_PHASE_BITDIFF - fil = ASSUME_ALIGNED(state->bsinc.coeffs[pi].filter, 16); - scd = ASSUME_ALIGNED(state->bsinc.coeffs[pi].scDelta, 16); - phd = ASSUME_ALIGNED(state->bsinc.coeffs[pi].phDelta, 16); - spd = ASSUME_ALIGNED(state->bsinc.coeffs[pi].spDelta, 16); + fil = ASSUME_ALIGNED(filter + m*pi*4, 16); + scd = ASSUME_ALIGNED(fil + m, 16); + phd = ASSUME_ALIGNED(scd + m, 16); + spd = ASSUME_ALIGNED(phd + m, 16); // Apply the scale and phase interpolated filter. r4 = _mm_setzero_ps(); |