# HG changeset patch # User michael # Date 1127337429 0 # Node ID 41315d0120b300594e17e6764358f02793bb8d77 # Parent 4c6eb826e9cb7d17ebee3c74afbad362abeac480 replace a few mov + psrlq with pshufw, there are more cases which could benefit from this but they would require us to duplicate some functions ... the trick is from various places (my own code in libpostproc, a patch on the x264 list, ...) diff -r 4c6eb826e9cb -r 41315d0120b3 i386/dsputil_mmx.c --- a/i386/dsputil_mmx.c Wed Sep 21 08:14:17 2005 +0000 +++ b/i386/dsputil_mmx.c Wed Sep 21 21:17:09 2005 +0000 @@ -1621,11 +1621,9 @@ "movq 64(%1), %%mm1 \n\t" MMABS_SUM_MMX2(%%mm1, %%mm7, %%mm0) - "movq %%mm0, %%mm1 \n\t" - "psrlq $32, %%mm0 \n\t" + "pshufw $0x0E, %%mm0, %%mm1 \n\t" "paddusw %%mm1, %%mm0 \n\t" - "movq %%mm0, %%mm1 \n\t" - "psrlq $16, %%mm0 \n\t" + "pshufw $0x01, %%mm0, %%mm1 \n\t" "paddusw %%mm1, %%mm0 \n\t" "movd %%mm0, %0 \n\t" diff -r 4c6eb826e9cb -r 41315d0120b3 i386/mpegvideo_mmx_template.c --- a/i386/mpegvideo_mmx_template.c Wed Sep 21 08:14:17 2005 +0000 +++ b/i386/mpegvideo_mmx_template.c Wed Sep 21 21:17:09 2005 +0000 @@ -22,7 +22,11 @@ #ifdef HAVE_MMX2 #define SPREADW(a) "pshufw $0, " #a ", " #a " \n\t" #define PMAXW(a,b) "pmaxsw " #a ", " #b " \n\t" - +#define PMAX(a,b) \ + "pshufw $0x0E," #a ", " #b " \n\t"\ + PMAXW(b, a)\ + "pshufw $0x01," #a ", " #b " \n\t"\ + PMAXW(b, a) #else #define SPREADW(a) \ "punpcklwd " #a ", " #a " \n\t"\ @@ -30,6 +34,14 @@ #define PMAXW(a,b) \ "psubusw " #a ", " #b " \n\t"\ "paddw " #a ", " #b " \n\t" +#define PMAX(a,b) \ + "movq " #a ", " #b " \n\t"\ + "psrlq $32, " #a " \n\t"\ + PMAXW(b, a)\ + "movq " #a ", " #b " \n\t"\ + "psrlq $16, " #a " \n\t"\ + PMAXW(b, a) + #endif static int RENAME(dct_quantize)(MpegEncContext *s, @@ -119,12 +131,7 @@ PMAXW(%%mm0, %%mm3) "add $8, %%"REG_a" \n\t" " js 1b \n\t" - "movq %%mm3, %%mm0 \n\t" - "psrlq $32, %%mm3 \n\t" - PMAXW(%%mm0, %%mm3) - "movq %%mm3, %%mm0 \n\t" - "psrlq $16, %%mm3 \n\t" - PMAXW(%%mm0, %%mm3) + PMAX(%%mm3, %%mm0) "movd %%mm3, %%"REG_a" \n\t" "movzb %%al, %%"REG_a" \n\t" // last_non_zero_p1 : "+a" (last_non_zero_p1) @@ -170,12 +177,7 @@ PMAXW(%%mm0, %%mm3) "add $8, %%"REG_a" \n\t" " js 1b \n\t" - "movq %%mm3, %%mm0 \n\t" - "psrlq $32, %%mm3 \n\t" - PMAXW(%%mm0, %%mm3) - "movq %%mm3, %%mm0 \n\t" - "psrlq $16, %%mm3 \n\t" - PMAXW(%%mm0, %%mm3) + PMAX(%%mm3, %%mm0) "movd %%mm3, %%"REG_a" \n\t" "movzb %%al, %%"REG_a" \n\t" // last_non_zero_p1 : "+a" (last_non_zero_p1)