changeset 15617:130dd060f723

one bugfix and a few gcc4 bug workaorunds by (Gianluigi Tiesi: mplayer, netfarm it)
author michael
date Thu, 02 Jun 2005 20:54:03 +0000
parents 633017bc16ef
children 1965072518be
files liba52/imdct.c mmx.h postproc/swscale_template.c
diffstat 3 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/liba52/imdct.c	Thu Jun 02 20:28:43 2005 +0000
+++ b/liba52/imdct.c	Thu Jun 02 20:54:03 2005 +0000
@@ -770,6 +770,8 @@
     int m;
     int two_m;
     int two_m_plus_one;
+    int two_m_plus_one_shl3;
+    complex_t *buf_offset;
 
 /*  sample_t tmp_a_i;
     sample_t tmp_a_r;
@@ -938,6 +940,8 @@
     for (m=3; m < 7; m++) {
 	two_m = (1 << m);
 	two_m_plus_one = two_m<<1;
+	two_m_plus_one_shl3 = (two_m_plus_one<<3);
+	buf_offset = buf+128;
 	asm volatile(
 		"movl %0, %%esi				\n\t"
 		".balign 16				\n\t"
@@ -963,7 +967,7 @@
 		"addl %2, %%esi				\n\t"
 		"cmpl %1, %%esi				\n\t"
 		" jb 1b					\n\t"
-		:: "g" (buf), "m" (buf+128), "m" (two_m_plus_one<<3), "r" (two_m<<3),
+		:: "g" (buf), "m" (buf_offset), "m" (two_m_plus_one_shl3), "r" (two_m<<3),
 		   "r" (sseW[m])
 		: "%esi", "%edi", "%edx"
 	);
--- a/mmx.h	Thu Jun 02 20:28:43 2005 +0000
+++ b/mmx.h	Thu Jun 02 20:54:03 2005 +0000
@@ -353,7 +353,7 @@
 #define	mmx_m2r(op, mem, reg) \
 	__asm__ __volatile__ (#op " %0, %%" #reg \
 			      : /* nothing */ \
-			      : "X" (mem))
+			      : "m" (mem))
 
 #define	mmx_r2m(op, reg, mem) \
 	__asm__ __volatile__ (#op " %%" #reg ", %0" \
--- a/postproc/swscale_template.c	Thu Jun 02 20:28:43 2005 +0000
+++ b/postproc/swscale_template.c	Thu Jun 02 20:54:03 2005 +0000
@@ -2129,6 +2129,7 @@
 	}
 	else
 	{
+		uint8_t *offset = src+filterSize;
 		long counter= -2*dstW;
 //		filter-= counter*filterSize/2;
 		filterPos-= counter/2;
@@ -2171,7 +2172,7 @@
 			" jnc 1b			\n\t"
 
 			: "+r" (counter), "+r" (filter)
-			: "m" (filterPos), "m" (dst), "m"(src+filterSize),
+			: "m" (filterPos), "m" (dst), "m"(offset),
 			  "m" (src), "r" ((long)filterSize*2)
 			: "%"REG_b, "%"REG_a, "%"REG_c
 		);
@@ -2313,6 +2314,8 @@
 	else
 	{
 #endif
+	int xInc_shr16 = xInc >> 16;
+	int xInc_mask = xInc & 0xffff;
 	//NO MMX just normal asm ...
 	asm volatile(
 		"xor %%"REG_a", %%"REG_a"	\n\t" // i
@@ -2350,7 +2353,7 @@
 		" jb 1b				\n\t"
 
 
-		:: "r" (src), "m" (dst), "m" (dstWidth), "m" (xInc>>16), "m" (xInc&0xFFFF)
+		:: "r" (src), "m" (dst), "m" (dstWidth), "m" (xInc_shr16), "m" (xInc_mask)
 		: "%"REG_a, "%"REG_b, "%ecx", "%"REG_D, "%esi"
 		);
 #ifdef HAVE_MMX2
@@ -2509,6 +2512,8 @@
 	else
 	{
 #endif
+	long xInc_shr16 = (long) (xInc >> 16);
+	int xInc_mask = xInc & 0xffff; 
 	asm volatile(
 		"xor %%"REG_a", %%"REG_a"	\n\t" // i
 		"xor %%"REG_b", %%"REG_b"		\n\t" // xx
@@ -2542,7 +2547,7 @@
 		"cmp %2, %%"REG_a"		\n\t"
 		" jb 1b				\n\t"
 
-		:: "m" (src1), "m" (dst), "m" ((long)dstWidth), "m" ((long)(xInc>>16)), "m" ((xInc&0xFFFF)),
+		:: "m" (src1), "m" (dst), "m" ((long)dstWidth), "m" (xInc_shr16), "m" (xInc_mask),
 		"r" (src2)
 		: "%"REG_a, "%"REG_b, "%ecx", "%"REG_D, "%esi"
 		);