aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/mixer_neon.c
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2014-02-23 21:17:09 -0800
committerChris Robinson <[email protected]>2014-02-23 21:17:09 -0800
commit9a4ded249114007d07b8f96277a1fd50f2f48e6f (patch)
tree5321731ad58fd0ad00471532e25407dafab44515 /Alc/mixer_neon.c
parentc68ce288d06372ff5cfd4c060c1f7b00058ca4d9 (diff)
Revert "Apply HRTF coefficient stepping separately"
This reverts commit 25b9c3d0c15e959d544f5d0ac7ea507ea5f6d69f. Conflicts: Alc/mixer_neon.c Unfortunately this also undoes the Neon-enhanced ApplyCoeffsStep method.
Diffstat (limited to 'Alc/mixer_neon.c')
-rw-r--r--Alc/mixer_neon.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/Alc/mixer_neon.c b/Alc/mixer_neon.c
index 0aa450ad..65e702eb 100644
--- a/Alc/mixer_neon.c
+++ b/Alc/mixer_neon.c
@@ -10,19 +10,22 @@
#include "alu.h"
-static inline void ApplyCoeffsStep(const ALuint IrSize,
+static inline void ApplyCoeffsStep(ALuint Offset, ALfloat (*restrict Values)[2],
+ const ALuint IrSize,
ALfloat (*restrict Coeffs)[2],
- const ALfloat (*restrict CoeffStep)[2])
+ const ALfloat (*restrict CoeffStep)[2],
+ ALfloat left, ALfloat right)
{
float32x4_t coeffs, deltas;
ALuint c;
for(c = 0;c < IrSize;c += 2)
{
- coeffs = vld1q_f32(&Coeffs[c][0]);
- deltas = vld1q_f32(&CoeffStep[c][0]);
- coeffs = vaddq_f32(coeffs, deltas);
- vst1q_f32(&Coeffs[c][0], coeffs);
+ const ALuint off = (Offset+c)&HRIR_MASK;
+ Values[off][0] += Coeffs[c][0] * left;
+ Values[off][1] += Coeffs[c][1] * right;
+ Coeffs[c][0] += CoeffStep[c][0];
+ Coeffs[c][1] += CoeffStep[c][1];
}
}