Hacker News new | ask | show | jobs
by actionfromafar 411 days ago
I think GCC didn't have the emulating library, but the operating system had. (Such as Debian.) So you could compile and link your programs against a soft-float library. ( Something like this https://github.com/ant6n/ieeelib )

What this NetBSD project does is not exactly like that though, it lets programs use regular 487 float instructions, which are trapped by the kernel, which steps in and emulates what the hardware float instruction would have done.

It worked very well for regular program, because most programs would not use float instructions to any significant degree.

If you however were going to use floats a lot for long calculations, a soft-float library would be much faster.

1 comments

Funny enough, I've been compiling a lot of stuff for 386 Linux lately. You can build a kernel with built in software floating point, at which point it doesn't matter what your library/compiler do. If your kernel isn't built to handle that, you can build glibc with floating point emulation.

At least this is my impression, working with 2.2.x/2.4.x kernels, gcc 2.7~3.3, and glibc ~2.2

Yap. But as hinted by the comments before you, if you have CPUs without FPUs, you probably want to enable userspace (e.g. glibc) soft math support anyway, since it doesn’t have the overhead of trapping the instructions and context switching into the kernel and back.

The benefit of OP’s solution in the kernel is that it works for everything out of the box, including pre-compiled binaries, and those that you can’t rebuild for whatever reason to begin with.