Mercurial > libavcodec.hg
comparison x86/h264dsp_mmx.c @ 10938:2a50b786b888 libavcodec
Fix h264_loop_filter_strength_mmx2() so it works with b frames.
author | michael |
---|---|
date | Tue, 19 Jan 2010 16:40:36 +0000 |
parents | afb9e56fbee9 |
children | 3a723e8dcd26 |
comparison
equal
deleted
inserted
replaced
10937:afb9e56fbee9 | 10938:2a50b786b888 |
---|---|
847 "m"(mv[l][b_idx][0]), | 847 "m"(mv[l][b_idx][0]), |
848 "m"(mv[l][b_idx+2][0]), | 848 "m"(mv[l][b_idx+2][0]), |
849 "m"(mv[l][b_idx+d_idx][0]), | 849 "m"(mv[l][b_idx+d_idx][0]), |
850 "m"(mv[l][b_idx+d_idx+2][0]) | 850 "m"(mv[l][b_idx+d_idx+2][0]) |
851 ); | 851 ); |
852 } | |
853 if(bidir==1){ | |
854 __asm__ volatile("pxor %%mm3, %%mm3 \n\t":); | |
855 for( l = bidir; l >= 0; l-- ) { | |
856 __asm__ volatile( | |
857 "movd %0, %%mm1 \n\t" | |
858 "punpckldq %1, %%mm1 \n\t" | |
859 "punpckldq %%mm1, %%mm2 \n\t" | |
860 "pcmpeqb %%mm2, %%mm1 \n\t" | |
861 "paddb %%mm6, %%mm1 \n\t" | |
862 "punpckhbw %%mm7, %%mm1 \n\t" // ref[b] != ref[bn] | |
863 "por %%mm1, %%mm3 \n\t" | |
864 | |
865 "movq %2, %%mm1 \n\t" | |
866 "movq %3, %%mm2 \n\t" | |
867 "psubw %4, %%mm1 \n\t" | |
868 "psubw %5, %%mm2 \n\t" | |
869 "packsswb %%mm2, %%mm1 \n\t" | |
870 "paddb %%mm5, %%mm1 \n\t" | |
871 "pminub %%mm4, %%mm1 \n\t" | |
872 "pcmpeqb %%mm4, %%mm1 \n\t" // abs(mv[b] - mv[bn]) >= limit | |
873 "por %%mm1, %%mm3 \n\t" | |
874 ::"m"(ref[l][b_idx]), | |
875 "m"(ref[1-l][b_idx+d_idx]), | |
876 "m"(mv[l][b_idx][0]), | |
877 "m"(mv[l][b_idx+2][0]), | |
878 "m"(mv[1-l][b_idx+d_idx][0]), | |
879 "m"(mv[1-l][b_idx+d_idx+2][0]) | |
880 ); | |
881 } | |
882 __asm__ volatile( | |
883 "pcmpeqw %%mm7, %%mm3 \n\t" | |
884 "psubusw %%mm3, %%mm0 \n\t" | |
885 :); | |
852 } | 886 } |
853 } | 887 } |
854 __asm__ volatile( | 888 __asm__ volatile( |
855 "movd %0, %%mm1 \n\t" | 889 "movd %0, %%mm1 \n\t" |
856 "por %1, %%mm1 \n\t" | 890 "por %1, %%mm1 \n\t" |