> On Wed, 7 Feb 2001, Jun Sun wrote:
>
> > I favor the libc approach as it is faster.
>
> No difference in speed, actually. In both cases you switch to the kernel
> mode when an FPU-related exception happens and then back to the user mode,
> either after or before invoking the handler. The libc approach has the
> advantage of running unprivileged.
Do you have some numbers to support this? A proper library
implementation does *not* trap to the kernel on each FPU
instruction, and as such is considerably faster (and considerably
larger - a factor for embedded apps!) than a kernel emulation.
The Algorithmics emulator does have the virtue of being smart
enough to check if there is a sequence of consecutive FP
instructions, and to emulate the whole sequence without
returning to user mode, but such "runs" are not all that
common in real code - there are almost always loads,
stores, and address computations interspersed, because
the compiler is "clever" about hiding FP latencies!
> > Unfortunately I don't think glibc for MIPS can be configured with
> > --without-fp. I modified a patch to get glibc 2.0.6 working for no-fp
config,
> > but it is not a clean one. Is anybody working on that for the latest
glibc
> > 2.2?
>
> You never want to configure glibc with the --without-fp option.
That's certainly what we had to do for OpenBSD without FP
emulation! What is the alternative?
> > Ironically for MIPS you MUST have the FPU emulater when the CPU actually
has a
> > FPU. :-)
>
> The same for Alpha. You don't need a full emulator anyway -- most of it
> can be left out for FPU-equipped systems.
That may be true for Alpha, but not for MIPS. The only
instructions that can *never* generate an unimplented
operation trap on a denormalized operand are the
loads, stores, and moves. That's why we didn't bother
breaking up the Algorithmics emulator into with-FPU
and without-FPU modules - there was surprisingly little
that could really be left out.
Regards,
Kevin K.
|