[FFmpeg-devel] [gcc-trunk] swscale_template.c:1358:1: error: bp cannot be used in asm here

Reimar Döffinger Reimar.Doeffinger
Wed Oct 21 08:48:08 CEST 2009


On Wed, Oct 21, 2009 at 08:34:38AM +0200, Reimar D?ffinger wrote:
> On Tue, Oct 20, 2009 at 11:22:35PM -0200, Ramiro Polla wrote:
> >  #if ARCH_X86_64
> >                  __asm__ volatile(
> > -                    YSCALEYUV2RGB(%%REGBP, %5)
> > -                    YSCALEYUV2RGB_YA(%%REGBP, %5, %6, %7)
> > +                    YSCALEYUV2RGB(%%REGb, %5)
> > +                    YSCALEYUV2RGB_YA(%%REGb, %5, %6, %7)
> >                      "psraw                  $3, %%mm1       \n\t" /* abuf0[eax] - abuf1[eax] >>7*/
> >                      "psraw                  $3, %%mm7       \n\t" /* abuf0[eax] - abuf1[eax] >>7*/
> >                      "packuswb            %%mm7, %%mm1       \n\t"
> > -                    WRITEBGR32(%4, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm1, %%mm0, %%mm7, %%mm3, %%mm6)
> > +                    WRITEBGR32(%4, 8280(%5), %%REGb, %%mm2, %%mm4, %%mm5, %%mm1, %%mm0, %%mm7, %%mm3, %%mm6)
> >  
> >                      :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "r" (dest),
> >                      "a" (&c->redDither)
> >                      ,"r" (abuf0), "r" (abuf1)
> > -                    : "%"REG_BP
> > +                    : "%"REG_b
> 
> This is 64-bit specific so there are enough registers available, and the REG_ indirection
> is not really necessary.
> But most importantly, switching from the second-most problematic register (BP) to the most
> problematic (BX) sure is not an improvement, particularly if the code does not check it
> is available.
> Try using r8 or something like that.

Actually, while it means the patch gets larger due to all the numbers changing, just
using
x86_reg dummy;
and
:"&=r"(dummy) : "c" ...
should be better.



More information about the ffmpeg-devel mailing list