[FFmpeg-devel] Remove some optimizations from Makefile

ami_stuff ami_stuff
Sun Aug 2 14:35:04 CEST 2009


Hi,

I would like to propose remove of some optimalizations from makefile.

1. GCC 4.4.1

-O3 flag activates these optimizations:

-O2
-finline-functions
-funswitch-loops
-fpredictive-commoning
-fgcse-after-reload
-ftree-vectorize

The problematic optimization is "-funswitch-loops". When I compile FFmpeg with this flag enabled
as a result:

a) I get monstruary/slow binary generated for m68k.

* libavcodec/dsputil.o + -03 flag -> 1,18MB
* libavcodec/dsputil.o + -O2 flag -> 306KB
  + -finline-functions
  + -fpredictive-commoning
  + -fgcse-after-reload
  + -ftree-vectorize options

b) GCC 4.4.1 ICEs on "libavcodec/mpegvideo.o" because of "-funswitch-loops". Without this flag there
is no ICE at all.

2. GCC 3.4.0

-O3 flag activates -fweb optimization. This optimization produces bad result from belowe inline:

static inline int64_t MAC64(int64_t d, int a, int b)
{
    union { int64_t x; int hl[2]; } x = { d };
    int h, l;
    __asm__ ("muls.l %5, %2:%3   \n\t"
             "add.l  %3, %1      \n\t"
             "addx.l %2, %0      \n\t"
             : "+dm"(x.hl[0]), "+dm"(x.hl[1]),
               "=d"(h), "=&d"(l)
             : "3"(a), "dmi"(b));
    return x.x;
}

When I use "-fno-web" switch, inline works correctly.

First I thought this inline is supposed to work with GCC 4.x+ only, but it looks like -fweb
optimization destroyes it. Maybe Mans have GCC 3.x m68k cross-compiler installed and can test
if the same happens with GCC 3.4.1 and up to 3.4.6.

Regards




More information about the ffmpeg-devel mailing list