# HG changeset patch # User michael # Date 1188090662 0 # Node ID 384629ebcb934d8d7d2eedbb7f7379d96250f56f # Parent bd015f9ea964c7bdd337f9a154c81f665f29570b avoid overflow in the 3rd lifting step, this now needs mmx2 at minimum (patch for plain mmx support is welcome ...) diff -r bd015f9ea964 -r 384629ebcb93 i386/dsputil_mmx.c --- a/i386/dsputil_mmx.c Sat Aug 25 19:04:33 2007 +0000 +++ b/i386/dsputil_mmx.c Sun Aug 26 01:11:02 2007 +0000 @@ -3627,8 +3627,10 @@ c->inner_add_yblock = ff_snow_inner_add_yblock_sse2; } else{ + if(mm_flags & MM_MMXEXT){ c->horizontal_compose97i = ff_snow_horizontal_compose97i_mmx; c->vertical_compose97i = ff_snow_vertical_compose97i_mmx; + } c->inner_add_yblock = ff_snow_inner_add_yblock_mmx; } #endif diff -r bd015f9ea964 -r 384629ebcb93 i386/snowdsp_mmx.c --- a/i386/snowdsp_mmx.c Sat Aug 25 19:04:33 2007 +0000 +++ b/i386/snowdsp_mmx.c Sun Aug 26 01:11:02 2007 +0000 @@ -111,22 +111,29 @@ i = 0; asm volatile( - "psllw $2, %%xmm7 \n\t" + "psllw $13, %%xmm7 \n\t" + "pcmpeqw %%xmm6, %%xmm6 \n\t" + "psrlw $13, %%xmm6 \n\t" + "paddw %%xmm7, %%xmm6 \n\t" ::); for(; i> W_BS); asm volatile( - "psllw $2, %%mm7 \n\t" + "psllw $13, %%mm7 \n\t" + "pcmpeqw %%mm6, %%mm6 \n\t" + "psrlw $13, %%mm6 \n\t" + "paddw %%mm7, %%mm6 \n\t" ::); for(; i