changeset 119:b2f0e40866b1 libavcodec

optimizations (+2% speedup)
author michael
date Tue, 23 Oct 2001 10:29:48 +0000
parents 3dd1950ac98d
children b0b89f5d0288
files libpostproc/postprocess.c libpostproc/postprocess_template.c
diffstat 2 files changed, 32 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/libpostproc/postprocess.c	Tue Oct 23 01:46:50 2001 +0000
+++ b/libpostproc/postprocess.c	Tue Oct 23 10:29:48 2001 +0000
@@ -214,54 +214,50 @@
 	int y;
 	src+= stride*4; // src points to begin of the 8x8 Block
 #ifdef HAVE_MMX
-	asm volatile(
-		"pushl %1\n\t"
+asm volatile(
+		"leal (%1, %2), %%eax				\n\t"
+		"leal (%%eax, %2, 4), %%ebx			\n\t"
+//	0	1	2	3	4	5	6	7	8	9
+//	%1	eax	eax+%2	eax+2%2	%1+4%2	ebx	ebx+%2	ebx+2%2	%1+8%2	ebx+4%2
 		"movq b7E, %%mm7					\n\t" // mm7 = 0x7F
 		"movq b7C, %%mm6					\n\t" // mm6 = 0x7D
 		"movq (%1), %%mm0				\n\t"
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%eax), %%mm1				\n\t"
 		"psubb %%mm1, %%mm0				\n\t" // mm0 = differnece
 		"paddb %%mm7, %%mm0				\n\t"
 		"pcmpgtb %%mm6, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm2				\n\t"
+		"movq (%%eax,%2), %%mm2				\n\t"
 		"psubb %%mm2, %%mm1				\n\t"
 		"paddb %%mm7, %%mm1				\n\t"
 		"pcmpgtb %%mm6, %%mm1				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%eax, %2, 2), %%mm1			\n\t"
 		"psubb %%mm1, %%mm2				\n\t"
 		"paddb %%mm7, %%mm2				\n\t"
 		"pcmpgtb %%mm6, %%mm2				\n\t"
 		"paddb %%mm2, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm2				\n\t"
+		"movq (%1, %2, 4), %%mm2			\n\t"
 		"psubb %%mm2, %%mm1				\n\t"
 		"paddb %%mm7, %%mm1				\n\t"
 		"pcmpgtb %%mm6, %%mm1				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%ebx), %%mm1				\n\t"
 		"psubb %%mm1, %%mm2				\n\t"
 		"paddb %%mm7, %%mm2				\n\t"
 		"pcmpgtb %%mm6, %%mm2				\n\t"
 		"paddb %%mm2, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm2				\n\t"
+		"movq (%%ebx, %2), %%mm2			\n\t"
 		"psubb %%mm2, %%mm1				\n\t"
 		"paddb %%mm7, %%mm1				\n\t"
 		"pcmpgtb %%mm6, %%mm1				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%ebx, %2, 2), %%mm1			\n\t"
 		"psubb %%mm1, %%mm2				\n\t"
 		"paddb %%mm7, %%mm2				\n\t"
 		"pcmpgtb %%mm6, %%mm2				\n\t"
@@ -277,17 +273,12 @@
 		"movq %%mm0, %%mm1				\n\t"
 		"psrlq $32, %%mm0				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
-		"popl %1\n\t"
 		"movd %%mm0, %0					\n\t"
 		: "=r" (numEq)
 		: "r" (src), "r" (stride)
 		);
-//	printf("%d\n", numEq);
-	numEq= (256 - (numEq & 0xFF)) &0xFF;
 
-//	int asmEq= numEq;
-//	numEq=0;
-//	uint8_t *temp= src;
+	numEq= (256 - numEq) &0xFF;
 
 #else
 	for(y=0; y<BLOCK_SIZE-1; y++)
@@ -2491,8 +2482,6 @@
 	{
 #ifdef HAVE_MMX
 					asm volatile(
-						"pushl %0 \n\t"
-						"pushl %1 \n\t"
 						"leal (%2,%2), %%eax	\n\t"
 						"leal (%3,%3), %%ebx	\n\t"
 						"movq packedYOffset, %%mm2	\n\t"
@@ -2534,11 +2523,9 @@
 						"addl %%ebx, %1		\n\t"
 SCALED_CPY
 
-						"popl %1 \n\t"
-						"popl %0 \n\t"
-						: : "r" (src),
-						"r" (dst),
-						"r" (srcStride),
+						: "+r"(src),
+						"+r"(dst)
+						:"r" (srcStride),
 						"r" (dstStride)
 						: "%eax", "%ebx"
 					);
--- a/libpostproc/postprocess_template.c	Tue Oct 23 01:46:50 2001 +0000
+++ b/libpostproc/postprocess_template.c	Tue Oct 23 10:29:48 2001 +0000
@@ -214,54 +214,50 @@
 	int y;
 	src+= stride*4; // src points to begin of the 8x8 Block
 #ifdef HAVE_MMX
-	asm volatile(
-		"pushl %1\n\t"
+asm volatile(
+		"leal (%1, %2), %%eax				\n\t"
+		"leal (%%eax, %2, 4), %%ebx			\n\t"
+//	0	1	2	3	4	5	6	7	8	9
+//	%1	eax	eax+%2	eax+2%2	%1+4%2	ebx	ebx+%2	ebx+2%2	%1+8%2	ebx+4%2
 		"movq b7E, %%mm7					\n\t" // mm7 = 0x7F
 		"movq b7C, %%mm6					\n\t" // mm6 = 0x7D
 		"movq (%1), %%mm0				\n\t"
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%eax), %%mm1				\n\t"
 		"psubb %%mm1, %%mm0				\n\t" // mm0 = differnece
 		"paddb %%mm7, %%mm0				\n\t"
 		"pcmpgtb %%mm6, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm2				\n\t"
+		"movq (%%eax,%2), %%mm2				\n\t"
 		"psubb %%mm2, %%mm1				\n\t"
 		"paddb %%mm7, %%mm1				\n\t"
 		"pcmpgtb %%mm6, %%mm1				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%eax, %2, 2), %%mm1			\n\t"
 		"psubb %%mm1, %%mm2				\n\t"
 		"paddb %%mm7, %%mm2				\n\t"
 		"pcmpgtb %%mm6, %%mm2				\n\t"
 		"paddb %%mm2, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm2				\n\t"
+		"movq (%1, %2, 4), %%mm2			\n\t"
 		"psubb %%mm2, %%mm1				\n\t"
 		"paddb %%mm7, %%mm1				\n\t"
 		"pcmpgtb %%mm6, %%mm1				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%ebx), %%mm1				\n\t"
 		"psubb %%mm1, %%mm2				\n\t"
 		"paddb %%mm7, %%mm2				\n\t"
 		"pcmpgtb %%mm6, %%mm2				\n\t"
 		"paddb %%mm2, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm2				\n\t"
+		"movq (%%ebx, %2), %%mm2			\n\t"
 		"psubb %%mm2, %%mm1				\n\t"
 		"paddb %%mm7, %%mm1				\n\t"
 		"pcmpgtb %%mm6, %%mm1				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
 
-		"addl %2, %1					\n\t"
-		"movq (%1), %%mm1				\n\t"
+		"movq (%%ebx, %2, 2), %%mm1			\n\t"
 		"psubb %%mm1, %%mm2				\n\t"
 		"paddb %%mm7, %%mm2				\n\t"
 		"pcmpgtb %%mm6, %%mm2				\n\t"
@@ -277,17 +273,12 @@
 		"movq %%mm0, %%mm1				\n\t"
 		"psrlq $32, %%mm0				\n\t"
 		"paddb %%mm1, %%mm0				\n\t"
-		"popl %1\n\t"
 		"movd %%mm0, %0					\n\t"
 		: "=r" (numEq)
 		: "r" (src), "r" (stride)
 		);
-//	printf("%d\n", numEq);
-	numEq= (256 - (numEq & 0xFF)) &0xFF;
 
-//	int asmEq= numEq;
-//	numEq=0;
-//	uint8_t *temp= src;
+	numEq= (256 - numEq) &0xFF;
 
 #else
 	for(y=0; y<BLOCK_SIZE-1; y++)
@@ -2491,8 +2482,6 @@
 	{
 #ifdef HAVE_MMX
 					asm volatile(
-						"pushl %0 \n\t"
-						"pushl %1 \n\t"
 						"leal (%2,%2), %%eax	\n\t"
 						"leal (%3,%3), %%ebx	\n\t"
 						"movq packedYOffset, %%mm2	\n\t"
@@ -2534,11 +2523,9 @@
 						"addl %%ebx, %1		\n\t"
 SCALED_CPY
 
-						"popl %1 \n\t"
-						"popl %0 \n\t"
-						: : "r" (src),
-						"r" (dst),
-						"r" (srcStride),
+						: "+r"(src),
+						"+r"(dst)
+						:"r" (srcStride),
 						"r" (dstStride)
 						: "%eax", "%ebx"
 					);