diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-04-23 18:29:58 -0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-06-18 16:16:59 -0400 |
commit | 97ce1ba8673636c96d3cc002bb76221c60324d95 (patch) | |
tree | 86b32d82f7047afec8c26785ab35b87b75b37f27 /libavresample/x86/audio_convert.asm | |
parent | 5904f25b9f0bc5d79685b37c9befb8d12e430352 (diff) | |
download | ffmpeg-97ce1ba8673636c96d3cc002bb76221c60324d95.tar.gz |
lavr: Add x86-optimized functions for s32 to flt conversion
Diffstat (limited to 'libavresample/x86/audio_convert.asm')
-rw-r--r-- | libavresample/x86/audio_convert.asm | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/libavresample/x86/audio_convert.asm b/libavresample/x86/audio_convert.asm index 8435edefb0..53091acf99 100644 --- a/libavresample/x86/audio_convert.asm +++ b/libavresample/x86/audio_convert.asm @@ -26,6 +26,7 @@ SECTION_RODATA 32 +pf_s32_inv_scale: times 8 dd 0x30000000 pf_s16_inv_scale: times 4 dd 0x38000000 SECTION_TEXT @@ -121,6 +122,42 @@ CONV_S32_TO_S16 INIT_XMM sse2 CONV_S32_TO_S16 +;------------------------------------------------------------------------------ +; void ff_conv_s32_to_flt(float *dst, const int32_t *src, int len); +;------------------------------------------------------------------------------ + +%macro CONV_S32_TO_FLT 0 +cglobal conv_s32_to_flt, 3,3,3, dst, src, len + lea lenq, [4*lend] + add srcq, lenq + add dstq, lenq + neg lenq + mova m0, [pf_s32_inv_scale] + ALIGN 16 +.loop: + cvtdq2ps m1, [srcq+lenq ] + cvtdq2ps m2, [srcq+lenq+mmsize] + mulps m1, m1, m0 + mulps m2, m2, m0 + mova [dstq+lenq ], m1 + mova [dstq+lenq+mmsize], m2 + add lenq, mmsize*2 + jl .loop +%if mmsize == 32 + vzeroupper + RET +%else + REP_RET +%endif +%endmacro + +INIT_XMM sse2 +CONV_S32_TO_FLT +%if HAVE_AVX +INIT_YMM avx +CONV_S32_TO_FLT +%endif + ;----------------------------------------------------------------------------- ; void ff_conv_fltp_to_flt_6ch(float *dst, float *const *src, int len, ; int channels); |