13 static inline void ApplyCoeffsStep(ALuint Offset
, ALfloat (*restrict Values
)[2],
15 ALfloat (*restrict Coeffs
)[2],
16 const ALfloat (*restrict CoeffStep
)[2],
17 ALfloat left
, ALfloat right
)
20 for(c
= 0;c
< IrSize
;c
++)
22 const ALuint off
= (Offset
+c
)&HRIR_MASK
;
23 Values
[off
][0] += Coeffs
[c
][0] * left
;
24 Values
[off
][1] += Coeffs
[c
][1] * right
;
25 Coeffs
[c
][0] += CoeffStep
[c
][0];
26 Coeffs
[c
][1] += CoeffStep
[c
][1];
30 static inline void ApplyCoeffs(ALuint Offset
, ALfloat (*restrict Values
)[2],
32 ALfloat (*restrict Coeffs
)[2],
33 ALfloat left
, ALfloat right
)
36 float32x4_t leftright4
;
38 float32x2_t leftright2
= vdup_n_f32(0.0);
39 leftright2
= vset_lane_f32(left
, leftright2
, 0);
40 leftright2
= vset_lane_f32(right
, leftright2
, 1);
41 leftright4
= vcombine_f32(leftright2
, leftright2
);
43 for(c
= 0;c
< IrSize
;c
+= 2)
45 const ALuint o0
= (Offset
+c
)&HRIR_MASK
;
46 const ALuint o1
= (o0
+1)&HRIR_MASK
;
47 float32x4_t vals
= vcombine_f32(vld1_f32((float32_t
*)&Values
[o0
][0]),
48 vld1_f32((float32_t
*)&Values
[o1
][0]));
49 float32x4_t coefs
= vld1q_f32((float32_t
*)&Coeffs
[c
][0]);
51 vals
= vmlaq_f32(vals
, coefs
, leftright4
);
53 vst1_f32((float32_t
*)&Values
[o0
][0], vget_low_f32(vals
));
54 vst1_f32((float32_t
*)&Values
[o1
][0], vget_high_f32(vals
));
60 #include "mixer_inc.c"