Hello.
I have discovered a "new" GCC compilation option: -ffast-math
The documentation is here:
http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/Optimize-Options.html#index-ffast_002dmath-811
Normally, the math functions like sqrt(), sin()... are implemented
inside libm.a. They do their job and handle correctly the error cases
by setting errno, etc.
The -ffast-math option inlines for example sqrt() to a single FPU
instruction, without any library call. The drawback is that errno is
not set, so it is a violation of the C standard. However most programs
are OK with that, including POV-Ray.
The job is math-68881.h was similar. But instead of relying on GCC's
internals (like -ffast-math), magic is done through inline assembler.
GCC is not optimal on register usage when transferring data from C to
inline assembler. As a result, the code produced by -ffast-math is a
bit better.
So I have totally disabled the usage of math-68881.h in math.h. Using
explicitly -ffast-math should do a better job.
I have built several versions of POV-Ray using -m68020-60, and thanks
to Jean-François Lemaire and Guillaume Tello, I got some bench results
from a CT60/100 MHz. Surprisingly, the performance is almost the same
on all versions. Maybe the overhead of a function call is
insignificant compared to the execution time of an FPU instruction ?
Well, now gprof is fixed, we could do some profiling to understand
things better :-)
Anyway, those math options don't seem to affect the speed
significantly, so don't bother with them.
NB: I'm going to send my math-68881.h patch for C99 to GCC people, and
I will also ask them if that file can really be useful for someone
nowadays.