aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/mixer_sse.c
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2012-08-29 01:56:04 -0700
committerChris Robinson <[email protected]>2012-08-29 01:56:04 -0700
commit3c042a054d3cf714959ec58d81e77fc6d8cbb650 (patch)
tree54d059752660607c040f8c62e082a979a1959857 /Alc/mixer_sse.c
parent332d66c18301b913d46e22fd24c3d4782bea1568 (diff)
Add an SSE-enhanced path for applying the mixer matrix
Diffstat (limited to 'Alc/mixer_sse.c')
-rw-r--r--Alc/mixer_sse.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/Alc/mixer_sse.c b/Alc/mixer_sse.c
index bbca54ec..270817fb 100644
--- a/Alc/mixer_sse.c
+++ b/Alc/mixer_sse.c
@@ -61,6 +61,21 @@ static __inline void ApplyCoeffs(ALuint Offset, ALfloat (*RESTRICT Values)[2],
}
}
+
+static __inline void ApplyValue(ALfloat *RESTRICT Output, ALfloat value, const ALfloat *DrySend)
+{
+ const __m128 val4 = _mm_set1_ps(value);
+ ALuint c;
+ for(c = 0;c < MaxChannels;c += 4)
+ {
+ const __m128 gains = _mm_load_ps(&DrySend[c]);
+ __m128 out = _mm_load_ps(&Output[c]);
+ out = _mm_add_ps(out, _mm_mul_ps(val4, gains));
+ _mm_store_ps(&Output[c], out);
+ }
+}
+
+
#define SUFFIX SSE
#define SAMPLER point32
#include "mixer_inc.c"