Use _mm* intrinsics.
This commit is contained in:
parent
1fc99c7123
commit
41cd6e21c3
|
@ -3,7 +3,8 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#ifdef __SSE2__
|
#if __SSE2__
|
||||||
|
#include <mmintrin.h>
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
#define audio_convert_s16_to_float audio_convert_s16_to_float_SSE2
|
#define audio_convert_s16_to_float audio_convert_s16_to_float_SSE2
|
||||||
#define audio_convert_float_to_s16 audio_convert_float_to_s16_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,
|
static inline void audio_convert_s16_to_float_SSE2(float *out,
|
||||||
const int16_t *in, unsigned samples)
|
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;
|
__m64 input = *(const __m64*)in;
|
||||||
__m128 reg = _mm_cvtpi16_ps(input);
|
__m128 reg = _mm_cvtpi16_ps(input);
|
||||||
__m128 res = _mm_mul_ps(reg, factor);
|
__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);
|
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;
|
unsigned i;
|
||||||
for (i = 0; i + 4 <= samples; i += 4, in += 4, out += 4)
|
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);
|
__m128 res = _mm_mul_ps(input, factor);
|
||||||
__m64 output = _mm_cvtps_pi16(res);
|
__m64 output = _mm_cvtps_pi16(res);
|
||||||
*(__m64*)out = output;
|
*(__m64*)out = output;
|
||||||
|
|
Loading…
Reference in New Issue