Use _mm* intrinsics.

This commit is contained in:
Themaister 2011-10-22 23:32:51 +02:00
parent 1fc99c7123
commit 41cd6e21c3

View File

@ -3,7 +3,8 @@
#include <stdint.h>
#ifdef __SSE2__
#if __SSE2__
#include <mmintrin.h>
#include <emmintrin.h>
#define audio_convert_s16_to_float audio_convert_s16_to_float_SSE2
#define audio_convert_float_to_s16 audio_convert_float_to_s16_SSE2
@ -29,7 +30,7 @@ static inline void audio_convert_float_to_s16_C(int16_t *out,
}
}
#ifdef __SSE2__
#if __SSE2__
static inline void audio_convert_s16_to_float_SSE2(float *out,
const int16_t *in, unsigned samples)
{
@ -47,7 +48,7 @@ static inline void audio_convert_s16_to_float_SSE2(float *out,
__m64 input = *(const __m64*)in;
__m128 reg = _mm_cvtpi16_ps(input);
__m128 res = _mm_mul_ps(reg, factor);
*(__m128*)out = res;
_mm_store_ps(out, res);
}
audio_convert_s16_to_float_C(out, in, samples - i);
@ -67,7 +68,7 @@ static inline void audio_convert_float_to_s16_SSE2(int16_t *out,
unsigned i;
for (i = 0; i + 4 <= samples; i += 4, in += 4, out += 4)
{
__m128 input = *(const __m128*)in;
__m128 input = _mm_load_ps(in);
__m128 res = _mm_mul_ps(input, factor);
__m64 output = _mm_cvtps_pi16(res);
*(__m64*)out = output;