FFmpeg/libavcodec/x86
Mans Rullgard f2fd167835 x86: vc1: fix and enable optimised loop filter
The problem is that the ssse3 psign instruction does the wrong
thing here.  Commit ea60dfe incorrectly removed a macro emulating
this instruction for pre-ssse3 code.  However, the emulation is
incorrect, and the code relies on the behaviour of the macro.
Specifically, the psign sets destination elements to zero where
the corresponding source element is zero, whereas the emulation
only negates destination elements where the source is negative.

Furthermore, the PSIGNW_MMX macro in x86util.asm is totally bogus,
which is why the original VC-1 code had an additional right shift
when using it.  Since the psign instruction cannot be used here,
skip all the macro hell and use the working instruction sequence
directly.

None of this was noticed due a stray return statement in
ff_vc1dsp_init_mmx() which meant that only the mmx version of the
loop filter was ever used (before being removed in ea60dfe).

Signed-off-by: Mans Rullgard <mans@mansr.com>
2012-06-30 00:12:05 +01:00
..
ac3dsp.asm ac3dsp: simplify x86 versions of ac3_max_msb_abs_int16 2012-05-15 15:23:59 -04:00
ac3dsp_mmx.c ac3dsp: simplify x86 versions of ac3_max_msb_abs_int16 2012-05-15 15:23:59 -04:00
cabac.h x86: place some inline asm under #if HAVE_INLINE_ASM 2012-06-25 13:23:12 +01:00
cavsdsp_mmx.c x86: place some inline asm under #if HAVE_INLINE_ASM 2012-06-25 13:23:12 +01:00
dct32_sse.asm
deinterlace.asm
dnxhd_mmx.c x86: place some inline asm under #if HAVE_INLINE_ASM 2012-06-25 13:23:12 +01:00
dsputil_mmx.c x86: Only use optimizations with cmov if the CPU supports the instruction 2012-06-23 16:21:50 +02:00
dsputil_mmx.h x86: remove unused inline asm macros from dsputil_mmx.h 2012-06-23 14:14:06 +01:00
dsputil_mmx_avg_template.c
dsputil_mmx_qns_template.c
dsputil_mmx_rnd_template.c
dsputil_yasm.asm Add a float DSP framework to libavutil 2012-06-08 13:14:38 -04:00
dsputilenc_mmx.c
dsputilenc_yasm.asm
fdct_mmx.c
fft.c x86: use new schema for ASM macros 2012-05-29 14:49:45 +02:00
fft.h x86: use new schema for ASM macros 2012-05-29 14:49:45 +02:00
fft_3dn.c
fft_3dn2.c x86: use new schema for ASM macros 2012-05-29 14:49:45 +02:00
fft_mmx.asm x86: fft: replace call to memcpy by a loop 2012-06-27 12:49:33 +01:00
fmtconvert.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
fmtconvert_mmx.c
h264_chromamc.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
h264_chromamc_10bit.asm
h264_deblock.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
h264_deblock_10bit.asm
h264_i386.h x86: place some inline asm under #if HAVE_INLINE_ASM 2012-06-25 13:23:12 +01:00
h264_idct.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
h264_idct_10bit.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
h264_intrapred.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
h264_intrapred_10bit.asm
h264_intrapred_init.c x86: Only use optimizations with cmov if the CPU supports the instruction 2012-06-23 16:21:50 +02:00
h264_qpel_10bit.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
h264_qpel_mmx.c x86: Remove duplicated AVG_3DNOW_OP / AVG_MMX2_OP macros from h264_qpel_mmx.c. 2012-03-07 09:36:04 +01:00
h264_weight.asm x86inc improvements for 64-bit 2012-04-11 15:47:00 -04:00
h264_weight_10bit.asm h264: use proper PROLOGUE statement for a function using 8 registers. 2012-04-16 08:07:21 -07:00
h264dsp_mmx.c x86: Only use optimizations with cmov if the CPU supports the instruction 2012-06-23 16:21:50 +02:00
idct_mmx.c
idct_mmx_xvid.c
idct_sse2_xvid.c
idct_xvid.h
imdct36_sse.asm
lpc_mmx.c x86: place some inline asm under #if HAVE_INLINE_ASM 2012-06-25 13:23:12 +01:00
Makefile x86: fft: convert sse inline asm to yasm 2012-06-25 13:31:00 +01:00
mathops.h x86: place some inline asm under #if HAVE_INLINE_ASM 2012-06-25 13:23:12 +01:00
mlpdsp.c
motion_est_mmx.c
mpegaudiodec_mmx.c
mpegvideo_mmx.c
mpegvideo_mmx_template.c
pngdsp-init.c
pngdsp.asm
proresdsp-init.c
proresdsp.asm
rv34dsp.asm rv34dsp x86: implement MMX2 inverse transform 2012-04-28 10:58:47 -07:00
rv34dsp_init.c rv34dsp x86: implement MMX2 inverse transform 2012-04-28 10:58:47 -07:00
rv40dsp.asm x86: rv40: Mark rv40_weight functions as MMX2; they use MMX2 instructions. 2012-05-15 23:54:08 +02:00
rv40dsp_init.c cosmetics: do not use full path for local headers 2012-06-22 10:49:40 +02:00
sbrdsp.asm dsputil x86: use SSE float instruction instead of SSE2 integer equivalent 2012-04-04 11:24:27 -07:00
sbrdsp_init.c
simple_idct_mmx.c
snowdsp_mmx.c x86: place some inline asm under #if HAVE_INLINE_ASM 2012-06-25 13:23:12 +01:00
vc1dsp_mmx.c x86: vc1: fix and enable optimised loop filter 2012-06-30 00:12:05 +01:00
vc1dsp_yasm.asm x86: vc1: fix and enable optimised loop filter 2012-06-30 00:12:05 +01:00
vp3dsp.asm
vp8dsp-init.c
vp8dsp.asm vp8dsp x86: perform rounding shift with a single instruction 2012-04-04 11:23:36 -07:00
vp56_arith.h
vp56dsp.asm
vp56dsp_init.c
w64xmmtest.c