13 static __inline
void ApplyCoeffsStep(ALuint Offset
, ALfloat (*RESTRICT Values
)[2],
14 ALfloat (*RESTRICT Coeffs
)[2],
15 ALfloat (*RESTRICT CoeffStep
)[2],
16 ALfloat left
, ALfloat right
)
19 for(c
= 0;c
< HRIR_LENGTH
;c
++)
21 const ALuint off
= (Offset
+c
)&HRIR_MASK
;
22 Values
[off
][0] += Coeffs
[c
][0] * left
;
23 Values
[off
][1] += Coeffs
[c
][1] * right
;
24 Coeffs
[c
][0] += CoeffStep
[c
][0];
25 Coeffs
[c
][1] += CoeffStep
[c
][1];
29 static __inline
void ApplyCoeffs(ALuint Offset
, ALfloat (*RESTRICT Values
)[2],
30 ALfloat (*RESTRICT Coeffs
)[2],
31 ALfloat left
, ALfloat right
)
34 float32x4_t leftright4
;
36 float32x2_t leftright2
= vdup_n_f32(0.0);
37 leftright2
= vset_lane_f32(left
, leftright2
, 0);
38 leftright2
= vset_lane_f32(right
, leftright2
, 1);
39 leftright4
= vcombine_f32(leftright2
, leftright2
);
41 for(c
= 0;c
< HRIR_LENGTH
;c
+= 2)
43 const ALuint o0
= (Offset
+c
)&HRIR_MASK
;
44 const ALuint o1
= (o0
+1)&HRIR_MASK
;
45 float32x4_t vals
= vcombine_f32(vld1_f32((float32_t
*)&Values
[o0
][0]),
46 vld1_f32((float32_t
*)&Values
[o1
][0]));
47 float32x4_t coefs
= vld1q_f32((float32_t
*)&Coeffs
[c
][0]);
49 vals
= vmlaq_f32(vals
, coefs
, leftright4
);
51 vst1_f32((float32_t
*)&Values
[o0
][0], vget_low_f32(vals
));
52 vst1_f32((float32_t
*)&Values
[o1
][0], vget_high_f32(vals
));
57 static __inline
void ApplyValue(ALfloat
*RESTRICT Output
, ALfloat value
, const ALfloat
*DrySend
)
60 for(c
= 0;c
< MaxChannels
;c
++)
61 Output
[c
] += value
*DrySend
[c
];
66 #include "mixer_inc.c"