[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MiNT] GCC Fast Math



060 has no hardware sqrt and trigonometrical functions. It has to be done in software with a library provided by Motorola. So a library call should be actually faster then trapping through f-line.

On 08/02/2011 23:24, Vincent Rivière wrote:
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.