changeset 19396:8fe37c66d10a

-fPIC support for libswscale patch by Jason Tackaberry, tack /at/ urandom /dot/ ca
author diego
date Tue, 15 Aug 2006 08:47:03 +0000
parents fa53ace863b9
children 0074c9c77a0e
files libswscale/rgb2rgb_template.c libswscale/swscale_template.c
diffstat 2 files changed, 158 insertions(+), 112 deletions(-) [+]
line wrap: on
line diff
--- a/libswscale/rgb2rgb_template.c	Mon Aug 14 21:48:20 2006 +0000
+++ b/libswscale/rgb2rgb_template.c	Tue Aug 15 08:47:03 2006 +0000
@@ -2118,16 +2118,16 @@
 				"movq "MANGLE(bgr2YCoeff)", %%mm6		\n\t"
 				"movq "MANGLE(w1111)", %%mm5		\n\t"
 				"pxor %%mm7, %%mm7		\n\t"
-				"lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"\n\t"
+				"lea (%%"REG_a", %%"REG_a", 2), %%"REG_d"\n\t"
 				ASMALIGN(4)
 				"1:				\n\t"
-				PREFETCH" 64(%0, %%"REG_b")	\n\t"
-				"movd (%0, %%"REG_b"), %%mm0	\n\t"
-				"movd 3(%0, %%"REG_b"), %%mm1	\n\t"
+				PREFETCH" 64(%0, %%"REG_d")	\n\t"
+				"movd (%0, %%"REG_d"), %%mm0	\n\t"
+				"movd 3(%0, %%"REG_d"), %%mm1	\n\t"
 				"punpcklbw %%mm7, %%mm0		\n\t"
 				"punpcklbw %%mm7, %%mm1		\n\t"
-				"movd 6(%0, %%"REG_b"), %%mm2	\n\t"
-				"movd 9(%0, %%"REG_b"), %%mm3	\n\t"
+				"movd 6(%0, %%"REG_d"), %%mm2	\n\t"
+				"movd 9(%0, %%"REG_d"), %%mm3	\n\t"
 				"punpcklbw %%mm7, %%mm2		\n\t"
 				"punpcklbw %%mm7, %%mm3		\n\t"
 				"pmaddwd %%mm6, %%mm0		\n\t"
@@ -2147,12 +2147,12 @@
 				"packssdw %%mm2, %%mm0		\n\t"
 				"psraw $7, %%mm0		\n\t"
 
-				"movd 12(%0, %%"REG_b"), %%mm4	\n\t"
-				"movd 15(%0, %%"REG_b"), %%mm1	\n\t"
+				"movd 12(%0, %%"REG_d"), %%mm4	\n\t"
+				"movd 15(%0, %%"REG_d"), %%mm1	\n\t"
 				"punpcklbw %%mm7, %%mm4		\n\t"
 				"punpcklbw %%mm7, %%mm1		\n\t"
-				"movd 18(%0, %%"REG_b"), %%mm2	\n\t"
-				"movd 21(%0, %%"REG_b"), %%mm3	\n\t"
+				"movd 18(%0, %%"REG_d"), %%mm2	\n\t"
+				"movd 21(%0, %%"REG_d"), %%mm3	\n\t"
 				"punpcklbw %%mm7, %%mm2		\n\t"
 				"punpcklbw %%mm7, %%mm3		\n\t"
 				"pmaddwd %%mm6, %%mm4		\n\t"
@@ -2169,7 +2169,7 @@
 				"packssdw %%mm3, %%mm2		\n\t"
 				"pmaddwd %%mm5, %%mm4		\n\t"
 				"pmaddwd %%mm5, %%mm2		\n\t"
-				"add $24, %%"REG_b"		\n\t"
+				"add $24, %%"REG_d"		\n\t"
 				"packssdw %%mm2, %%mm4		\n\t"
 				"psraw $7, %%mm4		\n\t"
 
@@ -2180,7 +2180,7 @@
 				"add $8, %%"REG_a"		\n\t"
 				" js 1b				\n\t"
 				: : "r" (src+width*3), "r" (ydst+width), "g" (-width)
-				: "%"REG_a, "%"REG_b
+				: "%"REG_a, "%"REG_d
 			);
 			ydst += lumStride;
 			src  += srcStride;
@@ -2191,17 +2191,17 @@
 			"movq "MANGLE(w1111)", %%mm5		\n\t"
 			"movq "MANGLE(bgr2UCoeff)", %%mm6		\n\t"
 			"pxor %%mm7, %%mm7		\n\t"
-			"lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"\n\t"
-			"add %%"REG_b", %%"REG_b"	\n\t"
+			"lea (%%"REG_a", %%"REG_a", 2), %%"REG_d"\n\t"
+			"add %%"REG_d", %%"REG_d"	\n\t"
 			ASMALIGN(4)
 			"1:				\n\t"
-			PREFETCH" 64(%0, %%"REG_b")	\n\t"
-			PREFETCH" 64(%1, %%"REG_b")	\n\t"
+			PREFETCH" 64(%0, %%"REG_d")	\n\t"
+			PREFETCH" 64(%1, %%"REG_d")	\n\t"
 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
-			"movq (%0, %%"REG_b"), %%mm0	\n\t"
-			"movq (%1, %%"REG_b"), %%mm1	\n\t"
-			"movq 6(%0, %%"REG_b"), %%mm2	\n\t"
-			"movq 6(%1, %%"REG_b"), %%mm3	\n\t"
+			"movq (%0, %%"REG_d"), %%mm0	\n\t"
+			"movq (%1, %%"REG_d"), %%mm1	\n\t"
+			"movq 6(%0, %%"REG_d"), %%mm2	\n\t"
+			"movq 6(%1, %%"REG_d"), %%mm3	\n\t"
 			PAVGB" %%mm1, %%mm0		\n\t"
 			PAVGB" %%mm3, %%mm2		\n\t"
 			"movq %%mm0, %%mm1		\n\t"
@@ -2213,10 +2213,10 @@
 			"punpcklbw %%mm7, %%mm0		\n\t"
 			"punpcklbw %%mm7, %%mm2		\n\t"
 #else
-			"movd (%0, %%"REG_b"), %%mm0	\n\t"
-			"movd (%1, %%"REG_b"), %%mm1	\n\t"
-			"movd 3(%0, %%"REG_b"), %%mm2	\n\t"
-			"movd 3(%1, %%"REG_b"), %%mm3	\n\t"
+			"movd (%0, %%"REG_d"), %%mm0	\n\t"
+			"movd (%1, %%"REG_d"), %%mm1	\n\t"
+			"movd 3(%0, %%"REG_d"), %%mm2	\n\t"
+			"movd 3(%1, %%"REG_d"), %%mm3	\n\t"
 			"punpcklbw %%mm7, %%mm0		\n\t"
 			"punpcklbw %%mm7, %%mm1		\n\t"
 			"punpcklbw %%mm7, %%mm2		\n\t"
@@ -2224,10 +2224,10 @@
 			"paddw %%mm1, %%mm0		\n\t"
 			"paddw %%mm3, %%mm2		\n\t"
 			"paddw %%mm2, %%mm0		\n\t"
-			"movd 6(%0, %%"REG_b"), %%mm4	\n\t"
-			"movd 6(%1, %%"REG_b"), %%mm1	\n\t"
-			"movd 9(%0, %%"REG_b"), %%mm2	\n\t"
-			"movd 9(%1, %%"REG_b"), %%mm3	\n\t"
+			"movd 6(%0, %%"REG_d"), %%mm4	\n\t"
+			"movd 6(%1, %%"REG_d"), %%mm1	\n\t"
+			"movd 9(%0, %%"REG_d"), %%mm2	\n\t"
+			"movd 9(%1, %%"REG_d"), %%mm3	\n\t"
 			"punpcklbw %%mm7, %%mm4		\n\t"
 			"punpcklbw %%mm7, %%mm1		\n\t"
 			"punpcklbw %%mm7, %%mm2		\n\t"
@@ -2259,10 +2259,10 @@
 			"psraw $7, %%mm0		\n\t"
 
 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
-			"movq 12(%0, %%"REG_b"), %%mm4	\n\t"
-			"movq 12(%1, %%"REG_b"), %%mm1	\n\t"
-			"movq 18(%0, %%"REG_b"), %%mm2	\n\t"
-			"movq 18(%1, %%"REG_b"), %%mm3	\n\t"
+			"movq 12(%0, %%"REG_d"), %%mm4	\n\t"
+			"movq 12(%1, %%"REG_d"), %%mm1	\n\t"
+			"movq 18(%0, %%"REG_d"), %%mm2	\n\t"
+			"movq 18(%1, %%"REG_d"), %%mm3	\n\t"
 			PAVGB" %%mm1, %%mm4		\n\t"
 			PAVGB" %%mm3, %%mm2		\n\t"
 			"movq %%mm4, %%mm1		\n\t"
@@ -2274,10 +2274,10 @@
 			"punpcklbw %%mm7, %%mm4		\n\t"
 			"punpcklbw %%mm7, %%mm2		\n\t"
 #else
-			"movd 12(%0, %%"REG_b"), %%mm4	\n\t"
-			"movd 12(%1, %%"REG_b"), %%mm1	\n\t"
-			"movd 15(%0, %%"REG_b"), %%mm2	\n\t"
-			"movd 15(%1, %%"REG_b"), %%mm3	\n\t"
+			"movd 12(%0, %%"REG_d"), %%mm4	\n\t"
+			"movd 12(%1, %%"REG_d"), %%mm1	\n\t"
+			"movd 15(%0, %%"REG_d"), %%mm2	\n\t"
+			"movd 15(%1, %%"REG_d"), %%mm3	\n\t"
 			"punpcklbw %%mm7, %%mm4		\n\t"
 			"punpcklbw %%mm7, %%mm1		\n\t"
 			"punpcklbw %%mm7, %%mm2		\n\t"
@@ -2285,10 +2285,10 @@
 			"paddw %%mm1, %%mm4		\n\t"
 			"paddw %%mm3, %%mm2		\n\t"
 			"paddw %%mm2, %%mm4		\n\t"
-			"movd 18(%0, %%"REG_b"), %%mm5	\n\t"
-			"movd 18(%1, %%"REG_b"), %%mm1	\n\t"
-			"movd 21(%0, %%"REG_b"), %%mm2	\n\t"
-			"movd 21(%1, %%"REG_b"), %%mm3	\n\t"
+			"movd 18(%0, %%"REG_d"), %%mm5	\n\t"
+			"movd 18(%1, %%"REG_d"), %%mm1	\n\t"
+			"movd 21(%0, %%"REG_d"), %%mm2	\n\t"
+			"movd 21(%1, %%"REG_d"), %%mm3	\n\t"
 			"punpcklbw %%mm7, %%mm5		\n\t"
 			"punpcklbw %%mm7, %%mm1		\n\t"
 			"punpcklbw %%mm7, %%mm2		\n\t"
@@ -2317,7 +2317,7 @@
 			"packssdw %%mm3, %%mm1		\n\t"
 			"pmaddwd %%mm5, %%mm4		\n\t"
 			"pmaddwd %%mm5, %%mm1		\n\t"
-			"add $24, %%"REG_b"		\n\t"
+			"add $24, %%"REG_d"		\n\t"
 			"packssdw %%mm1, %%mm4		\n\t" // V3 V2 U3 U2
 			"psraw $7, %%mm4		\n\t"
 
@@ -2332,7 +2332,7 @@
 			"add $4, %%"REG_a"		\n\t"
 			" js 1b				\n\t"
 			: : "r" (src+chromWidth*6), "r" (src+srcStride+chromWidth*6), "r" (udst+chromWidth), "r" (vdst+chromWidth), "g" (-chromWidth)
-			: "%"REG_a, "%"REG_b
+			: "%"REG_a, "%"REG_d
 		);
 
 		udst += chromStride;
--- a/libswscale/swscale_template.c	Mon Aug 14 21:48:20 2006 +0000
+++ b/libswscale/swscale_template.c	Tue Aug 15 08:47:03 2006 +0000
@@ -1046,15 +1046,15 @@
                 case IMGFMT_BGR24:
                                 YSCALEYUV2PACKEDX_ACCURATE
 				YSCALEYUV2RGBX
-				"lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"\n\t" //FIXME optimize
-				"add %4, %%"REG_b"			\n\t"
-				WRITEBGR24(%%REGb, %5, %%REGa)
+				"lea (%%"REG_a", %%"REG_a", 2), %%"REG_c"\n\t" //FIXME optimize
+				"add %4, %%"REG_c"			\n\t"
+				WRITEBGR24(%%REGc, %5, %%REGa)
 
 
 			:: "r" (&c->redDither), 
 			   "m" (dummy), "m" (dummy), "m" (dummy),
 			   "r" (dest), "m" (dstW)
-			: "%"REG_a, "%"REG_b, "%"REG_d, "%"REG_S //FIXME ebx
+			: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S
 			);
                         return;
                 case IMGFMT_BGR15:
@@ -1107,14 +1107,14 @@
 	case IMGFMT_BGR24:
                                 YSCALEYUV2PACKEDX
 				YSCALEYUV2RGBX
-				"lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"\n\t" //FIXME optimize
-				"add %4, %%"REG_b"			\n\t"
-				WRITEBGR24(%%REGb, %5, %%REGa)
+				"lea (%%"REG_a", %%"REG_a", 2), %%"REG_c"\n\t" //FIXME optimize
+				"add %4, %%"REG_c"			\n\t"
+				WRITEBGR24(%%REGc, %5, %%REGa)
 
 			:: "r" (&c->redDither), 
 			   "m" (dummy), "m" (dummy), "m" (dummy),
 			   "r" (dest), "m" (dstW)
-			: "%"REG_a, "%"REG_b, "%"REG_d, "%"REG_S //FIXME ebx
+			: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S
 			);
 		return;
 	case IMGFMT_BGR15:
@@ -1865,16 +1865,16 @@
 		"movq "MANGLE(bgr2YCoeff)", %%mm6		\n\t"
 		"movq "MANGLE(w1111)", %%mm5		\n\t"
 		"pxor %%mm7, %%mm7		\n\t"
-		"lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"\n\t"
+		"lea (%%"REG_a", %%"REG_a", 2), %%"REG_d"\n\t"
 		ASMALIGN(4)
 		"1:				\n\t"
-		PREFETCH" 64(%0, %%"REG_b")	\n\t"
-		"movd (%0, %%"REG_b"), %%mm0	\n\t"
-		"movd 3(%0, %%"REG_b"), %%mm1	\n\t"
+		PREFETCH" 64(%0, %%"REG_d")	\n\t"
+		"movd (%0, %%"REG_d"), %%mm0	\n\t"
+		"movd 3(%0, %%"REG_d"), %%mm1	\n\t"
 		"punpcklbw %%mm7, %%mm0		\n\t"
 		"punpcklbw %%mm7, %%mm1		\n\t"
-		"movd 6(%0, %%"REG_b"), %%mm2	\n\t"
-		"movd 9(%0, %%"REG_b"), %%mm3	\n\t"
+		"movd 6(%0, %%"REG_d"), %%mm2	\n\t"
+		"movd 9(%0, %%"REG_d"), %%mm3	\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
 		"punpcklbw %%mm7, %%mm3		\n\t"
 		"pmaddwd %%mm6, %%mm0		\n\t"
@@ -1894,12 +1894,12 @@
 		"packssdw %%mm2, %%mm0		\n\t"
 		"psraw $7, %%mm0		\n\t"
 
-		"movd 12(%0, %%"REG_b"), %%mm4	\n\t"
-		"movd 15(%0, %%"REG_b"), %%mm1	\n\t"
+		"movd 12(%0, %%"REG_d"), %%mm4	\n\t"
+		"movd 15(%0, %%"REG_d"), %%mm1	\n\t"
 		"punpcklbw %%mm7, %%mm4		\n\t"
 		"punpcklbw %%mm7, %%mm1		\n\t"
-		"movd 18(%0, %%"REG_b"), %%mm2	\n\t"
-		"movd 21(%0, %%"REG_b"), %%mm3	\n\t"
+		"movd 18(%0, %%"REG_d"), %%mm2	\n\t"
+		"movd 21(%0, %%"REG_d"), %%mm3	\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
 		"punpcklbw %%mm7, %%mm3		\n\t"
 		"pmaddwd %%mm6, %%mm4		\n\t"
@@ -1916,7 +1916,7 @@
 		"packssdw %%mm3, %%mm2		\n\t"
 		"pmaddwd %%mm5, %%mm4		\n\t"
 		"pmaddwd %%mm5, %%mm2		\n\t"
-		"add $24, %%"REG_b"		\n\t"
+		"add $24, %%"REG_d"		\n\t"
 		"packssdw %%mm2, %%mm4		\n\t"
 		"psraw $7, %%mm4		\n\t"
 
@@ -1927,7 +1927,7 @@
 		"add $8, %%"REG_a"		\n\t"
 		" js 1b				\n\t"
 		: : "r" (src+width*3), "r" (dst+width), "g" (-width)
-		: "%"REG_a, "%"REG_b
+		: "%"REG_a, "%"REG_d
 	);
 #else
 	int i;
@@ -1950,17 +1950,17 @@
 		"movq "MANGLE(w1111)", %%mm5		\n\t"
 		"movq "MANGLE(bgr2UCoeff)", %%mm6		\n\t"
 		"pxor %%mm7, %%mm7		\n\t"
-		"lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"	\n\t"
-		"add %%"REG_b", %%"REG_b"	\n\t"
+		"lea (%%"REG_a", %%"REG_a", 2), %%"REG_d"	\n\t"
+		"add %%"REG_d", %%"REG_d"	\n\t"
 		ASMALIGN(4)
 		"1:				\n\t"
-		PREFETCH" 64(%0, %%"REG_b")	\n\t"
-		PREFETCH" 64(%1, %%"REG_b")	\n\t"
+		PREFETCH" 64(%0, %%"REG_d")	\n\t"
+		PREFETCH" 64(%1, %%"REG_d")	\n\t"
 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
-		"movq (%0, %%"REG_b"), %%mm0	\n\t"
-		"movq (%1, %%"REG_b"), %%mm1	\n\t"
-		"movq 6(%0, %%"REG_b"), %%mm2	\n\t"
-		"movq 6(%1, %%"REG_b"), %%mm3	\n\t"
+		"movq (%0, %%"REG_d"), %%mm0	\n\t"
+		"movq (%1, %%"REG_d"), %%mm1	\n\t"
+		"movq 6(%0, %%"REG_d"), %%mm2	\n\t"
+		"movq 6(%1, %%"REG_d"), %%mm3	\n\t"
 		PAVGB(%%mm1, %%mm0)
 		PAVGB(%%mm3, %%mm2)
 		"movq %%mm0, %%mm1		\n\t"
@@ -1972,10 +1972,10 @@
 		"punpcklbw %%mm7, %%mm0		\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
 #else
-		"movd (%0, %%"REG_b"), %%mm0	\n\t"
-		"movd (%1, %%"REG_b"), %%mm1	\n\t"
-		"movd 3(%0, %%"REG_b"), %%mm2	\n\t"
-		"movd 3(%1, %%"REG_b"), %%mm3	\n\t"
+		"movd (%0, %%"REG_d"), %%mm0	\n\t"
+		"movd (%1, %%"REG_d"), %%mm1	\n\t"
+		"movd 3(%0, %%"REG_d"), %%mm2	\n\t"
+		"movd 3(%1, %%"REG_d"), %%mm3	\n\t"
 		"punpcklbw %%mm7, %%mm0		\n\t"
 		"punpcklbw %%mm7, %%mm1		\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
@@ -1983,10 +1983,10 @@
 		"paddw %%mm1, %%mm0		\n\t"
 		"paddw %%mm3, %%mm2		\n\t"
 		"paddw %%mm2, %%mm0		\n\t"
-		"movd 6(%0, %%"REG_b"), %%mm4	\n\t"
-		"movd 6(%1, %%"REG_b"), %%mm1	\n\t"
-		"movd 9(%0, %%"REG_b"), %%mm2	\n\t"
-		"movd 9(%1, %%"REG_b"), %%mm3	\n\t"
+		"movd 6(%0, %%"REG_d"), %%mm4	\n\t"
+		"movd 6(%1, %%"REG_d"), %%mm1	\n\t"
+		"movd 9(%0, %%"REG_d"), %%mm2	\n\t"
+		"movd 9(%1, %%"REG_d"), %%mm3	\n\t"
 		"punpcklbw %%mm7, %%mm4		\n\t"
 		"punpcklbw %%mm7, %%mm1		\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
@@ -2018,10 +2018,10 @@
 		"psraw $7, %%mm0		\n\t"
 
 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
-		"movq 12(%0, %%"REG_b"), %%mm4	\n\t"
-		"movq 12(%1, %%"REG_b"), %%mm1	\n\t"
-		"movq 18(%0, %%"REG_b"), %%mm2	\n\t"
-		"movq 18(%1, %%"REG_b"), %%mm3	\n\t"
+		"movq 12(%0, %%"REG_d"), %%mm4	\n\t"
+		"movq 12(%1, %%"REG_d"), %%mm1	\n\t"
+		"movq 18(%0, %%"REG_d"), %%mm2	\n\t"
+		"movq 18(%1, %%"REG_d"), %%mm3	\n\t"
 		PAVGB(%%mm1, %%mm4)
 		PAVGB(%%mm3, %%mm2)
 		"movq %%mm4, %%mm1		\n\t"
@@ -2033,10 +2033,10 @@
 		"punpcklbw %%mm7, %%mm4		\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
 #else
-		"movd 12(%0, %%"REG_b"), %%mm4	\n\t"
-		"movd 12(%1, %%"REG_b"), %%mm1	\n\t"
-		"movd 15(%0, %%"REG_b"), %%mm2	\n\t"
-		"movd 15(%1, %%"REG_b"), %%mm3	\n\t"
+		"movd 12(%0, %%"REG_d"), %%mm4	\n\t"
+		"movd 12(%1, %%"REG_d"), %%mm1	\n\t"
+		"movd 15(%0, %%"REG_d"), %%mm2	\n\t"
+		"movd 15(%1, %%"REG_d"), %%mm3	\n\t"
 		"punpcklbw %%mm7, %%mm4		\n\t"
 		"punpcklbw %%mm7, %%mm1		\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
@@ -2044,10 +2044,10 @@
 		"paddw %%mm1, %%mm4		\n\t"
 		"paddw %%mm3, %%mm2		\n\t"
 		"paddw %%mm2, %%mm4		\n\t"
-		"movd 18(%0, %%"REG_b"), %%mm5	\n\t"
-		"movd 18(%1, %%"REG_b"), %%mm1	\n\t"
-		"movd 21(%0, %%"REG_b"), %%mm2	\n\t"
-		"movd 21(%1, %%"REG_b"), %%mm3	\n\t"
+		"movd 18(%0, %%"REG_d"), %%mm5	\n\t"
+		"movd 18(%1, %%"REG_d"), %%mm1	\n\t"
+		"movd 21(%0, %%"REG_d"), %%mm2	\n\t"
+		"movd 21(%1, %%"REG_d"), %%mm3	\n\t"
 		"punpcklbw %%mm7, %%mm5		\n\t"
 		"punpcklbw %%mm7, %%mm1		\n\t"
 		"punpcklbw %%mm7, %%mm2		\n\t"
@@ -2076,7 +2076,7 @@
 		"packssdw %%mm3, %%mm1		\n\t"
 		"pmaddwd %%mm5, %%mm4		\n\t"
 		"pmaddwd %%mm5, %%mm1		\n\t"
-		"add $24, %%"REG_b"		\n\t"
+		"add $24, %%"REG_d"		\n\t"
 		"packssdw %%mm1, %%mm4		\n\t" // V3 V2 U3 U2
 		"psraw $7, %%mm4		\n\t"
 		
@@ -2092,7 +2092,7 @@
 		"add $4, %%"REG_a"		\n\t"
 		" js 1b				\n\t"
 		: : "r" (src1+width*6), "r" (src2+width*6), "r" (dstU+width), "r" (dstV+width), "g" (-width)
-		: "%"REG_a, "%"REG_b
+		: "%"REG_a, "%"REG_d
 	);
 #else
 	int i;
@@ -2255,6 +2255,9 @@
 		filterPos-= counter/2;
 		dst-= counter/2;
 		asm volatile(
+#if defined(PIC)
+			"push %%"REG_b"   		\n\t"
+#endif
 			"pxor %%mm7, %%mm7		\n\t"
 			"movq "MANGLE(w02)", %%mm6	\n\t"
 			"push %%"REG_BP"		\n\t" // we use 7 regs here ...
@@ -2281,9 +2284,14 @@
 			" jnc 1b			\n\t"
 
 			"pop %%"REG_BP"			\n\t"
+#if defined(PIC)
+			"pop %%"REG_b"   		\n\t"
+#endif
 			: "+a" (counter)
 			: "c" (filter), "d" (filterPos), "S" (src), "D" (dst)
+#if !defined(PIC)
 			: "%"REG_b
+#endif
 		);
 	}
 	else if(filterSize==8)
@@ -2293,6 +2301,9 @@
 		filterPos-= counter/2;
 		dst-= counter/2;
 		asm volatile(
+#if defined(PIC)
+			"push %%"REG_b"   		\n\t"
+#endif
 			"pxor %%mm7, %%mm7		\n\t"
 			"movq "MANGLE(w02)", %%mm6	\n\t"
 			"push %%"REG_BP"		\n\t" // we use 7 regs here ...
@@ -2331,9 +2342,14 @@
 			" jnc 1b			\n\t"
 
 			"pop %%"REG_BP"			\n\t"
+#if defined(PIC)
+			"pop %%"REG_b"   		\n\t"
+#endif
 			: "+a" (counter)
 			: "c" (filter), "d" (filterPos), "S" (src), "D" (dst)
+#if !defined(PIC)
 			: "%"REG_b
+#endif
 		);
 	}
 	else
@@ -2350,7 +2366,7 @@
 			"1:				\n\t"
 			"mov %2, %%"REG_c"		\n\t"
 			"movzwl (%%"REG_c", %0), %%eax	\n\t"
-			"movzwl 2(%%"REG_c", %0), %%ebx	\n\t"
+			"movzwl 2(%%"REG_c", %0), %%edx	\n\t"
 			"mov %5, %%"REG_c"		\n\t"
 			"pxor %%mm4, %%mm4		\n\t"
 			"pxor %%mm5, %%mm5		\n\t"
@@ -2358,7 +2374,7 @@
 			"movq (%1), %%mm1		\n\t"
 			"movq (%1, %6), %%mm3		\n\t"
 			"movd (%%"REG_c", %%"REG_a"), %%mm0\n\t"
-			"movd (%%"REG_c", %%"REG_b"), %%mm2\n\t"
+			"movd (%%"REG_c", %%"REG_d"), %%mm2\n\t"
 			"punpcklbw %%mm7, %%mm0		\n\t"
 			"punpcklbw %%mm7, %%mm2		\n\t"
 			"pmaddwd %%mm1, %%mm0		\n\t"
@@ -2383,7 +2399,7 @@
 			: "+r" (counter), "+r" (filter)
 			: "m" (filterPos), "m" (dst), "m"(offset),
 			  "m" (src), "r" (filterSize*2)
-			: "%"REG_b, "%"REG_a, "%"REG_c
+			: "%"REG_a, "%"REG_c, "%"REG_d
 		);
 	}
 #else
@@ -2471,9 +2487,15 @@
 #if defined(ARCH_X86) || defined(ARCH_X86_64)
 #ifdef HAVE_MMX2
 	int i;
+#if defined(PIC)
+	uint64_t ebxsave __attribute__((aligned(8)));
+#endif
 	if(canMMX2BeUsed)
 	{
 		asm volatile(
+#if defined(PIC)
+			"mov %%"REG_b", %5    \n\t"
+#endif
 			"pxor %%mm7, %%mm7		\n\t"
 			"mov %0, %%"REG_c"		\n\t"
 			"mov %1, %%"REG_D"		\n\t"
@@ -2514,9 +2536,18 @@
 FUNNY_Y_CODE
 FUNNY_Y_CODE
 
+#if defined(PIC)
+			"mov %5, %%"REG_b"    \n\t"
+#endif
 			:: "m" (src), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos),
 			"m" (funnyYCode)
-			: "%"REG_a, "%"REG_b, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
+#if defined(PIC)
+			,"m" (ebxsave)
+#endif
+			: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
+#if !defined(PIC)
+			,"%"REG_b
+#endif
 		);
 		for(i=dstWidth-1; (i*xInc)>>16 >=srcW-1; i--) dst[i] = src[srcW-1]*128;
 	}
@@ -2528,12 +2559,12 @@
 	//NO MMX just normal asm ...
 	asm volatile(
 		"xor %%"REG_a", %%"REG_a"	\n\t" // i
-		"xor %%"REG_b", %%"REG_b"	\n\t" // xx
+		"xor %%"REG_d", %%"REG_d"	\n\t" // xx
 		"xorl %%ecx, %%ecx		\n\t" // 2*xalpha
 		ASMALIGN(4)
 		"1:				\n\t"
-		"movzbl  (%0, %%"REG_b"), %%edi	\n\t" //src[xx]
-		"movzbl 1(%0, %%"REG_b"), %%esi	\n\t" //src[xx+1]
+		"movzbl  (%0, %%"REG_d"), %%edi	\n\t" //src[xx]
+		"movzbl 1(%0, %%"REG_d"), %%esi	\n\t" //src[xx+1]
 		"subl %%edi, %%esi		\n\t" //src[xx+1] - src[xx]
 		"imull %%ecx, %%esi		\n\t" //(src[xx+1] - src[xx])*2*xalpha
 		"shll $16, %%edi		\n\t"
@@ -2542,10 +2573,10 @@
 		"shrl $9, %%esi			\n\t"
 		"movw %%si, (%%"REG_D", %%"REG_a", 2)\n\t"
 		"addw %4, %%cx			\n\t" //2*xalpha += xInc&0xFF
-		"adc %3, %%"REG_b"		\n\t" //xx+= xInc>>8 + carry
+		"adc %3, %%"REG_d"		\n\t" //xx+= xInc>>8 + carry
 
-		"movzbl (%0, %%"REG_b"), %%edi	\n\t" //src[xx]
-		"movzbl 1(%0, %%"REG_b"), %%esi	\n\t" //src[xx+1]
+		"movzbl (%0, %%"REG_d"), %%edi	\n\t" //src[xx]
+		"movzbl 1(%0, %%"REG_d"), %%esi	\n\t" //src[xx+1]
 		"subl %%edi, %%esi		\n\t" //src[xx+1] - src[xx]
 		"imull %%ecx, %%esi		\n\t" //(src[xx+1] - src[xx])*2*xalpha
 		"shll $16, %%edi		\n\t"
@@ -2554,7 +2585,7 @@
 		"shrl $9, %%esi			\n\t"
 		"movw %%si, 2(%%"REG_D", %%"REG_a", 2)\n\t"
 		"addw %4, %%cx			\n\t" //2*xalpha += xInc&0xFF
-		"adc %3, %%"REG_b"		\n\t" //xx+= xInc>>8 + carry
+		"adc %3, %%"REG_d"		\n\t" //xx+= xInc>>8 + carry
 
 
 		"add $2, %%"REG_a"		\n\t"
@@ -2563,7 +2594,7 @@
 
 
 		:: "r" (src), "m" (dst), "m" (dstWidth), "m" (xInc_shr16), "m" (xInc_mask)
-		: "%"REG_a, "%"REG_b, "%ecx", "%"REG_D, "%esi"
+		: "%"REG_a, "%"REG_d, "%ecx", "%"REG_D, "%esi"
 		);
 #ifdef HAVE_MMX2
 	} //if MMX2 can't be used
@@ -2656,9 +2687,15 @@
 #if defined(ARCH_X86) || defined(ARCH_X86_64)
 #ifdef HAVE_MMX2
 	int i;
+#if defined(PIC)
+	uint64_t ebxsave __attribute__((aligned(8)));
+#endif
 	if(canMMX2BeUsed)
 	{
 		asm volatile(
+#if defined(PIC)
+			"mov %%"REG_b", %6    \n\t"
+#endif
 			"pxor %%mm7, %%mm7		\n\t"
 			"mov %0, %%"REG_c"		\n\t"
 			"mov %1, %%"REG_D"		\n\t"
@@ -2707,9 +2744,18 @@
 FUNNY_UV_CODE
 FUNNY_UV_CODE
 
+#if defined(PIC)
+			"mov %6, %%"REG_b"    \n\t"
+#endif
 			:: "m" (src1), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos),
 			"m" (funnyUVCode), "m" (src2)
-			: "%"REG_a, "%"REG_b, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
+#if defined(PIC)
+			,"m" (ebxsave)
+#endif
+			: "%"REG_a, "%"REG_BP, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
+#if !defined(PIC)
+			 ,"%"REG_b
+#endif
 		);
 		for(i=dstWidth-1; (i*xInc)>>16 >=srcW-1; i--)
 		{
@@ -2725,13 +2771,13 @@
 	uint16_t xInc_mask = xInc & 0xffff; 
 	asm volatile(
 		"xor %%"REG_a", %%"REG_a"	\n\t" // i
-		"xor %%"REG_b", %%"REG_b"		\n\t" // xx
+		"xor %%"REG_d", %%"REG_d"		\n\t" // xx
 		"xorl %%ecx, %%ecx		\n\t" // 2*xalpha
 		ASMALIGN(4)
 		"1:				\n\t"
 		"mov %0, %%"REG_S"		\n\t"
-		"movzbl  (%%"REG_S", %%"REG_b"), %%edi	\n\t" //src[xx]
-		"movzbl 1(%%"REG_S", %%"REG_b"), %%esi	\n\t" //src[xx+1]
+		"movzbl  (%%"REG_S", %%"REG_d"), %%edi	\n\t" //src[xx]
+		"movzbl 1(%%"REG_S", %%"REG_d"), %%esi	\n\t" //src[xx+1]
 		"subl %%edi, %%esi		\n\t" //src[xx+1] - src[xx]
 		"imull %%ecx, %%esi		\n\t" //(src[xx+1] - src[xx])*2*xalpha
 		"shll $16, %%edi		\n\t"
@@ -2740,8 +2786,8 @@
 		"shrl $9, %%esi			\n\t"
 		"movw %%si, (%%"REG_D", %%"REG_a", 2)\n\t"
 
-		"movzbl  (%5, %%"REG_b"), %%edi	\n\t" //src[xx]
-		"movzbl 1(%5, %%"REG_b"), %%esi	\n\t" //src[xx+1]
+		"movzbl  (%5, %%"REG_d"), %%edi	\n\t" //src[xx]
+		"movzbl 1(%5, %%"REG_d"), %%esi	\n\t" //src[xx+1]
 		"subl %%edi, %%esi		\n\t" //src[xx+1] - src[xx]
 		"imull %%ecx, %%esi		\n\t" //(src[xx+1] - src[xx])*2*xalpha
 		"shll $16, %%edi		\n\t"
@@ -2751,7 +2797,7 @@
 		"movw %%si, 4096(%%"REG_D", %%"REG_a", 2)\n\t"
 
 		"addw %4, %%cx			\n\t" //2*xalpha += xInc&0xFF
-		"adc %3, %%"REG_b"		\n\t" //xx+= xInc>>8 + carry
+		"adc %3, %%"REG_d"		\n\t" //xx+= xInc>>8 + carry
 		"add $1, %%"REG_a"		\n\t"
 		"cmp %2, %%"REG_a"		\n\t"
 		" jb 1b				\n\t"
@@ -2764,7 +2810,7 @@
 		:: "m" (src1), "m" (dst), "m" ((long)dstWidth), "m" (xInc_shr16), "m" (xInc_mask),
 #endif
 		"r" (src2)
-		: "%"REG_a, "%"REG_b, "%ecx", "%"REG_D, "%esi"
+		: "%"REG_a, "%"REG_d, "%ecx", "%"REG_D, "%esi"
 		);
 #ifdef HAVE_MMX2
 	} //if MMX2 can't be used