# HG changeset patch # User michael # Date 1117745643 0 # Node ID 130dd060f7231316782fa95aa464effe971cca03 # Parent 633017bc16ef449e1d573720912ddc7d7437d01b one bugfix and a few gcc4 bug workaorunds by (Gianluigi Tiesi: mplayer, netfarm it) diff -r 633017bc16ef -r 130dd060f723 liba52/imdct.c --- 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" ); diff -r 633017bc16ef -r 130dd060f723 mmx.h --- 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" \ diff -r 633017bc16ef -r 130dd060f723 postproc/swscale_template.c --- 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" );