|
|
|
@@ -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 @@ static int RENAME(dct_quantize)(MpegEncContext *s, |
|
|
|
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 @@ static int RENAME(dct_quantize)(MpegEncContext *s, |
|
|
|
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) |
|
|
|
|