Mercurial > libavcodec.hg
changeset 118:3dd1950ac98d libavcodec
brightness / contrast fix/copy optimizations +2% speedup
author | michael |
---|---|
date | Tue, 23 Oct 2001 01:46:50 +0000 |
parents | a02f3088b0cf |
children | b2f0e40866b1 |
files | libpostproc/postprocess.c libpostproc/postprocess_template.c |
diffstat | 2 files changed, 30 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/libpostproc/postprocess.c Tue Oct 23 00:03:19 2001 +0000 +++ b/libpostproc/postprocess.c Tue Oct 23 01:46:50 2001 +0000 @@ -2478,8 +2478,6 @@ return modes[quality]; } -//} // extern "C" - /** * Copies a block from src to dst and fixes the blacklevel * numLines must be a multiple of 4 @@ -2493,8 +2491,6 @@ { #ifdef HAVE_MMX asm volatile( - "movl %4, %%eax \n\t" - "movl %%eax, temp0\n\t" "pushl %0 \n\t" "pushl %1 \n\t" "leal (%2,%2), %%eax \n\t" @@ -2505,47 +2501,45 @@ #define SCALED_CPY \ "movq (%0), %%mm0 \n\t"\ - "movq (%0,%2), %%mm1 \n\t"\ - "movq %%mm0, %%mm5 \n\t"\ + "movq (%0), %%mm5 \n\t"\ "punpcklbw %%mm4, %%mm0 \n\t"\ "punpckhbw %%mm4, %%mm5 \n\t"\ "psubw %%mm2, %%mm0 \n\t"\ "psubw %%mm2, %%mm5 \n\t"\ + "movq (%0,%2), %%mm1 \n\t"\ "psllw $6, %%mm0 \n\t"\ "psllw $6, %%mm5 \n\t"\ "pmulhw %%mm3, %%mm0 \n\t"\ + "movq (%0,%2), %%mm6 \n\t"\ "pmulhw %%mm3, %%mm5 \n\t"\ - "packuswb %%mm5, %%mm0 \n\t"\ - "movq %%mm0, (%1) \n\t"\ - "movq %%mm1, %%mm5 \n\t"\ "punpcklbw %%mm4, %%mm1 \n\t"\ - "punpckhbw %%mm4, %%mm5 \n\t"\ + "punpckhbw %%mm4, %%mm6 \n\t"\ "psubw %%mm2, %%mm1 \n\t"\ - "psubw %%mm2, %%mm5 \n\t"\ + "psubw %%mm2, %%mm6 \n\t"\ "psllw $6, %%mm1 \n\t"\ - "psllw $6, %%mm5 \n\t"\ + "psllw $6, %%mm6 \n\t"\ "pmulhw %%mm3, %%mm1 \n\t"\ - "pmulhw %%mm3, %%mm5 \n\t"\ - "packuswb %%mm5, %%mm1 \n\t"\ + "pmulhw %%mm3, %%mm6 \n\t"\ + "addl %%eax, %0 \n\t"\ + "packuswb %%mm5, %%mm0 \n\t"\ + "packuswb %%mm6, %%mm1 \n\t"\ + "movq %%mm0, (%1) \n\t"\ "movq %%mm1, (%1, %3) \n\t"\ - "1: \n\t" SCALED_CPY - "addl %%eax, %0 \n\t" "addl %%ebx, %1 \n\t" SCALED_CPY - "addl %%eax, %0 \n\t" "addl %%ebx, %1 \n\t" - "decl temp0 \n\t" - "jnz 1b \n\t" +SCALED_CPY + "addl %%ebx, %1 \n\t" +SCALED_CPY "popl %1 \n\t" "popl %0 \n\t" : : "r" (src), "r" (dst), "r" (srcStride), - "r" (dstStride), - "m" (numLines>>2) + "r" (dstStride) : "%eax", "%ebx" ); #else
--- a/libpostproc/postprocess_template.c Tue Oct 23 00:03:19 2001 +0000 +++ b/libpostproc/postprocess_template.c Tue Oct 23 01:46:50 2001 +0000 @@ -2478,8 +2478,6 @@ return modes[quality]; } -//} // extern "C" - /** * Copies a block from src to dst and fixes the blacklevel * numLines must be a multiple of 4 @@ -2493,8 +2491,6 @@ { #ifdef HAVE_MMX asm volatile( - "movl %4, %%eax \n\t" - "movl %%eax, temp0\n\t" "pushl %0 \n\t" "pushl %1 \n\t" "leal (%2,%2), %%eax \n\t" @@ -2505,47 +2501,45 @@ #define SCALED_CPY \ "movq (%0), %%mm0 \n\t"\ - "movq (%0,%2), %%mm1 \n\t"\ - "movq %%mm0, %%mm5 \n\t"\ + "movq (%0), %%mm5 \n\t"\ "punpcklbw %%mm4, %%mm0 \n\t"\ "punpckhbw %%mm4, %%mm5 \n\t"\ "psubw %%mm2, %%mm0 \n\t"\ "psubw %%mm2, %%mm5 \n\t"\ + "movq (%0,%2), %%mm1 \n\t"\ "psllw $6, %%mm0 \n\t"\ "psllw $6, %%mm5 \n\t"\ "pmulhw %%mm3, %%mm0 \n\t"\ + "movq (%0,%2), %%mm6 \n\t"\ "pmulhw %%mm3, %%mm5 \n\t"\ - "packuswb %%mm5, %%mm0 \n\t"\ - "movq %%mm0, (%1) \n\t"\ - "movq %%mm1, %%mm5 \n\t"\ "punpcklbw %%mm4, %%mm1 \n\t"\ - "punpckhbw %%mm4, %%mm5 \n\t"\ + "punpckhbw %%mm4, %%mm6 \n\t"\ "psubw %%mm2, %%mm1 \n\t"\ - "psubw %%mm2, %%mm5 \n\t"\ + "psubw %%mm2, %%mm6 \n\t"\ "psllw $6, %%mm1 \n\t"\ - "psllw $6, %%mm5 \n\t"\ + "psllw $6, %%mm6 \n\t"\ "pmulhw %%mm3, %%mm1 \n\t"\ - "pmulhw %%mm3, %%mm5 \n\t"\ - "packuswb %%mm5, %%mm1 \n\t"\ + "pmulhw %%mm3, %%mm6 \n\t"\ + "addl %%eax, %0 \n\t"\ + "packuswb %%mm5, %%mm0 \n\t"\ + "packuswb %%mm6, %%mm1 \n\t"\ + "movq %%mm0, (%1) \n\t"\ "movq %%mm1, (%1, %3) \n\t"\ - "1: \n\t" SCALED_CPY - "addl %%eax, %0 \n\t" "addl %%ebx, %1 \n\t" SCALED_CPY - "addl %%eax, %0 \n\t" "addl %%ebx, %1 \n\t" - "decl temp0 \n\t" - "jnz 1b \n\t" +SCALED_CPY + "addl %%ebx, %1 \n\t" +SCALED_CPY "popl %1 \n\t" "popl %0 \n\t" : : "r" (src), "r" (dst), "r" (srcStride), - "r" (dstStride), - "m" (numLines>>2) + "r" (dstStride) : "%eax", "%ebx" ); #else