summaryrefslogtreecommitdiff
path: root/libavcodec/x86/fmtconvert.asm
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-10-31 14:26:11 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-10-31 14:27:11 +0100
commit84833b028bf3fa08d09939330989df8d8820cd59 (patch)
tree532812ffae1097453064a82f86b10931fb55cc25 /libavcodec/x86/fmtconvert.asm
parent28c0678eb764b8d10faf1a988d2f0e2dc79c96a5 (diff)
parent5707af8d0b9c5a7e8a742a11798e406f99d78cea (diff)
Merge remote-tracking branch 'qatar/master'
* qatar/master: aacdec: Drop some unused function arguments x86: Fix assembly with NASM x86: fmtconvert: Refactor cvtps2pi emulation through cpuflags Conflicts: libavcodec/aacdec.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/x86/fmtconvert.asm')
-rw-r--r--libavcodec/x86/fmtconvert.asm52
1 files changed, 26 insertions, 26 deletions
diff --git a/libavcodec/x86/fmtconvert.asm b/libavcodec/x86/fmtconvert.asm
index f6b2c943e1..8313d261d9 100644
--- a/libavcodec/x86/fmtconvert.asm
+++ b/libavcodec/x86/fmtconvert.asm
@@ -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);