| @@ -23,6 +23,14 @@ | |||
| SECTION_TEXT | |||
| %macro CVTPS2PI 2 | |||
| %if cpuflag(sse) | |||
| cvtps2pi %1, %2 | |||
| %elif cpuflag(3dnow) | |||
| pf2id %1, %2 | |||
| %endif | |||
| %endmacro | |||
| ;--------------------------------------------------------------------------------- | |||
| ; void int32_to_float_fmul_scalar(float *dst, const int *src, float mul, int len); | |||
| ;--------------------------------------------------------------------------------- | |||
| @@ -88,10 +96,10 @@ cglobal float_to_int16, 3, 3, %1, dst, src, len | |||
| packssdw m0, m1 | |||
| mova [dstq+lenq], m0 | |||
| %else | |||
| cvtps2pi m0, [srcq+2*lenq ] | |||
| cvtps2pi m1, [srcq+2*lenq+ 8] | |||
| cvtps2pi m2, [srcq+2*lenq+16] | |||
| cvtps2pi m3, [srcq+2*lenq+24] | |||
| CVTPS2PI m0, [srcq+2*lenq ] | |||
| CVTPS2PI m1, [srcq+2*lenq+ 8] | |||
| CVTPS2PI m2, [srcq+2*lenq+16] | |||
| CVTPS2PI m3, [srcq+2*lenq+24] | |||
| packssdw m0, m1 | |||
| packssdw m2, m3 | |||
| mova [dstq+lenq ], m0 | |||
| @@ -109,10 +117,8 @@ INIT_XMM sse2 | |||
| FLOAT_TO_INT16 2 | |||
| INIT_MMX sse | |||
| FLOAT_TO_INT16 0 | |||
| %define cvtps2pi pf2id | |||
| INIT_MMX 3dnow | |||
| FLOAT_TO_INT16 0 | |||
| %undef cvtps2pi | |||
| ;------------------------------------------------------------------------------ | |||
| ; void ff_float_to_int16_step(int16_t *dst, const float *src, long len, long step); | |||
| @@ -150,10 +156,10 @@ cglobal float_to_int16_step, 4, 7, %1, dst, src, len, step, step3, v1, v2 | |||
| mov [dstq+step3q*2], v2w | |||
| lea dstq, [dstq+stepq*8] | |||
| %else | |||
| cvtps2pi m0, [srcq+2*lenq ] | |||
| cvtps2pi m1, [srcq+2*lenq+ 8] | |||
| cvtps2pi m2, [srcq+2*lenq+16] | |||
| cvtps2pi m3, [srcq+2*lenq+24] | |||
| CVTPS2PI m0, [srcq+2*lenq ] | |||
| CVTPS2PI m1, [srcq+2*lenq+ 8] | |||
| CVTPS2PI m2, [srcq+2*lenq+16] | |||
| CVTPS2PI m3, [srcq+2*lenq+24] | |||
| packssdw m0, m1 | |||
| packssdw m2, m3 | |||
| movd v1d, m0 | |||
| @@ -189,10 +195,8 @@ INIT_XMM sse2 | |||
| FLOAT_TO_INT16_STEP 2 | |||
| INIT_MMX sse | |||
| FLOAT_TO_INT16_STEP 0 | |||
| %define cvtps2pi pf2id | |||
| INIT_MMX 3dnow | |||
| FLOAT_TO_INT16_STEP 0 | |||
| %undef cvtps2pi | |||
| ;------------------------------------------------------------------------------- | |||
| ; void ff_float_to_int16_interleave2(int16_t *dst, const float **src, long len); | |||
| @@ -215,10 +219,10 @@ cglobal float_to_int16_interleave2, 3, 4, 2, dst, src0, src1, len | |||
| punpcklwd m0, m1 | |||
| mova [dstq+lenq], m0 | |||
| %else | |||
| cvtps2pi m0, [src0q+lenq ] | |||
| cvtps2pi m1, [src0q+lenq+8] | |||
| cvtps2pi m2, [src1q+lenq ] | |||
| cvtps2pi m3, [src1q+lenq+8] | |||
| CVTPS2PI m0, [src0q+lenq ] | |||
| CVTPS2PI m1, [src0q+lenq+8] | |||
| CVTPS2PI m2, [src1q+lenq ] | |||
| CVTPS2PI m3, [src1q+lenq+8] | |||
| packssdw m0, m1 | |||
| packssdw m2, m3 | |||
| mova m1, m0 | |||
| @@ -236,9 +240,7 @@ cglobal float_to_int16_interleave2, 3, 4, 2, dst, src0, src1, len | |||
| %endmacro | |||
| INIT_MMX 3dnow | |||
| %define cvtps2pi pf2id | |||
| FLOAT_TO_INT16_INTERLEAVE2 | |||
| %undef cvtps2pi | |||
| INIT_MMX sse | |||
| FLOAT_TO_INT16_INTERLEAVE2 | |||
| INIT_XMM sse2 | |||
| @@ -274,12 +276,12 @@ cglobal float_to_int16_interleave6, 2, 8, 0, dst, src, src1, src2, src3, src4, s | |||
| sub src4q, srcq | |||
| sub src5q, srcq | |||
| .loop: | |||
| cvtps2pi mm0, [srcq] | |||
| cvtps2pi mm1, [srcq+src1q] | |||
| cvtps2pi mm2, [srcq+src2q] | |||
| cvtps2pi mm3, [srcq+src3q] | |||
| cvtps2pi mm4, [srcq+src4q] | |||
| cvtps2pi mm5, [srcq+src5q] | |||
| CVTPS2PI mm0, [srcq] | |||
| CVTPS2PI mm1, [srcq+src1q] | |||
| CVTPS2PI mm2, [srcq+src2q] | |||
| CVTPS2PI mm3, [srcq+src3q] | |||
| CVTPS2PI mm4, [srcq+src4q] | |||
| CVTPS2PI mm5, [srcq+src5q] | |||
| packssdw mm0, mm3 | |||
| packssdw mm1, mm4 | |||
| packssdw mm2, mm5 | |||
| @@ -306,13 +308,11 @@ INIT_MMX sse | |||
| %define pswapd PSWAPD_SSE | |||
| FLOAT_TO_INT16_INTERLEAVE6 | |||
| INIT_MMX 3dnow | |||
| %define cvtps2pi pf2id | |||
| %define pswapd PSWAPD_3DNOW | |||
| FLOAT_TO_INT16_INTERLEAVE6 | |||
| %undef pswapd | |||
| INIT_MMX 3dnowext | |||
| FLOAT_TO_INT16_INTERLEAVE6 | |||
| %undef cvtps2pi | |||
| ;----------------------------------------------------------------------------- | |||
| ; void ff_float_interleave6(float *dst, const float **src, unsigned int len); | |||