3 #ifdef HAVE_XMMINTRIN_H
13 static __inline
void ApplyCoeffs(ALuint Offset
, ALfloat (*RESTRICT Values
)[2],
14 ALfloat (*RESTRICT Coeffs
)[2],
15 ALfloat left
, ALfloat right
)
17 const __m128 lrlr
= { left
, right
, left
, right
};
19 for(c
= 0;c
< HRIR_LENGTH
;c
+= 2)
21 const ALuint o0
= (Offset
++)&HRIR_MASK
;
22 const ALuint o1
= (Offset
++)&HRIR_MASK
;
23 __m128 vals
= { 0.0f
, 0.0f
, 0.0f
, 0.0f
};
24 __m128 coeffs
= { 0.0f
, 0.0f
, 0.0f
, 0.0f
};
26 vals
= _mm_loadl_pi(vals
, (__m64
*)&Values
[o0
][0]);
27 vals
= _mm_loadh_pi(vals
, (__m64
*)&Values
[o1
][0]);
28 coeffs
= _mm_loadl_pi(coeffs
, (__m64
*)&Coeffs
[c
][0]);
29 coeffs
= _mm_loadh_pi(coeffs
, (__m64
*)&Coeffs
[c
+1][0]);
31 vals
= _mm_add_ps(vals
, _mm_mul_ps(coeffs
, lrlr
));
33 _mm_storel_pi((__m64
*)&Values
[o0
][0], vals
);
34 _mm_storeh_pi((__m64
*)&Values
[o1
][0], vals
);
39 #define SAMPLER point32
40 #include "mixer_inc.c"
42 #define SAMPLER lerp32
43 #include "mixer_inc.c"
45 #define SAMPLER cubic32
46 #include "mixer_inc.c"