Hi everyone.
When compiling Andreas aa2 patch I got:
/usr/bin/kgcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes
-O4 -fomit-frame-pointer -fno-strict-aliasing -D__SMP__ -pipe
-fno-strength-reduce -march=i686 -malign-loops=2 -malign-jumps=2
-malign-functions=2 -DCPU=686 -c -o time.o time.c
time.c: In function `do_gettimeofday':
time.c:727: fixed or forbidden register 0 (ax) was spilled for class AREG.
This may be due to a compiler bug or to impossible asm
statements or clauses.
The only difference is the inclusion of timeval_normalize.
If I get time.c from 2.2.18-pre21 compiles fine.
But I don't see any strange asm round there...
--
Juan Antonio Magallon Lacarta #> cd /pub
mailto:[email protected] #> more beer
On Sat, Nov 18, 2000 at 03:36:09AM +0100, J . A . Magallon wrote:
> Hi everyone.
>
> When compiling Andreas aa2 patch I got:
>
> /usr/bin/kgcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes
> -O4 -fomit-frame-pointer -fno-strict-aliasing -D__SMP__ -pipe
> -fno-strength-reduce -march=i686 -malign-loops=2 -malign-jumps=2
> -malign-functions=2 -DCPU=686 -c -o time.o time.c
> time.c: In function `do_gettimeofday':
> time.c:727: fixed or forbidden register 0 (ax) was spilled for class AREG.
> This may be due to a compiler bug or to impossible asm
> statements or clauses.
That's compiler bug obviously.
Anyways I guess you're triggering compiler bugs because of the weird
optimizations (-O4). Note also that everything over -O2 is _wrongly_ used to
inline everything and that will trash away all your icache (I remeber
also Linus complained about that bad behaviour of >-O2 in the past and
it's also trivial to fix [shouldn't be more than a one liner], but nobody on
the gcc side seems to care to fix it since it's still impling the
inline-functions in gcc CVS of a few weeks ago).
I triggered various compiler bugs both in 2.7.2.3 and egcs in the past but
they're should be sorted out in 18pre21aa2 patchkit. If you can still trigger
compiler bugs with the _default_ compiler options please let me know and I'll
work around them. 2.95.2 compiles it fine for me.
Andrea
On Sat, 18 Nov 2000 18:19:37 Andrea Arcangeli wrote:
> On Sat, Nov 18, 2000 at 03:36:09AM +0100, J . A . Magallon wrote:
> > /usr/bin/kgcc -D__KERNEL__ -I/usr/src/linux/include -Wall
> -Wstrict-prototypes
> > -O4 -fomit-frame-pointer -fno-strict-aliasing -D__SMP__ -pipe
> > -fno-strength-reduce -march=i686 -malign-loops=2 -malign-jumps=2
> > -malign-functions=2 -DCPU=686 -c -o time.o time.c
> > time.c: In function `do_gettimeofday':
> > time.c:727: fixed or forbidden register 0 (ax) was spilled for class AREG.
> > This may be due to a compiler bug or to impossible asm
> > statements or clauses.
>
> That's compiler bug obviously.
>
> Anyways I guess you're triggering compiler bugs because of the weird
> optimizations (-O4). Note also that everything over -O2 is _wrongly_ used to
> inline everything and that will trash away all your icache (I remeber
> also Linus complained about that bad behaviour of >-O2 in the past and
> it's also trivial to fix [shouldn't be more than a one liner], but nobody on
> the gcc side seems to care to fix it since it's still impling the
> inline-functions in gcc CVS of a few weeks ago).
>
Thanks. I tried to do "by hand" the inlining (just cut and paste, the proc
seemed
not to be used anywhere but time.c), but the result was the same. So looked at
the
gcc info and saw that the function was being inlined from opt level 3.
Also realized that the 'O4' level does not exist in gcc ( I think i 'ported' it
from
use of IRIX cc), so just O2 is right.
Anyway, you can compile somehing with -O9751, and gcc says nothing. If max opt
level
is 3, any higher level should trig a warning at least...
--
Juan Antonio Magallon Lacarta #> cd /pub
mailto:[email protected] #> more beer