From: ndiamond@despammed.com
To: linux-kernel@vger.kernel.org
Subject: Re: How to use floating point in a module?
Date: Sun, 30 May 2004 21:50:53 -0500 (CDT) [thread overview]
Message-ID: <200405310250.i4V2ork05673@mailout.despammed.com> (raw)
Mans Rullgard replied to me:
>> A driver, implemented as a module, must do some floating-point
>> computations including trig functions.
>
>Sorry, floating point in the Linux kernel isn't allowed.
No. Use of floating point HARDWARE, and/or emulation which emulates
troublesome features such as traps, isn't allowed. Guess why I posted
in the first place, asking whether a certain combination of techniques
might be feasible.
>> Recompile GNU's libc with option "--without-fp".
>
>Probably, but it doesn't matter, since the kernel doesn't link with
>libc.
This unfortunate answer probably does answer my question, thank you.
>> Compile the module's .c files with gcc's "-msoft-float" option and
>> "-D__NO_MATH_INLINES". (Actually I think "-D__NO_MATH_INLINES" is
>> probably unnecessary here.)
>
>Using floating point emulation will be VERY slow.
No kidding. And if I write my own code to do floating point emulation,
it will be even slower. But if we do none of the above, then we should
say the result will be even slower because we will wait an infinite amount
of time without getting results.
>> Link the module's .o files with the version of libc produced above,
>> and try to get a loadable .ko from this... or a loadable .o since the
>> target is still kernel 2.4.something.
>
>As I said, the kernel doesn't link with libc.
Right, but is there a way to get a customized libc.a to link with a
module's .o and produce a loadable .o without damaging the rest of the
kernel. I don't quite know a way.
>Floating point is forbidden in kernel code since the floating point
>registers (and other floating point context) is not saved/restored
No kidding, that's why use of floating point HARDWARE is prohibited.
>might be possible to manually save the floating point context while
>doing some floating point operations.
Yes, my searching found a few people saying they had found tricks like
this, but my impression is that it's very unreliable and they didn't
reveal their entire trickery (probably unteachable as mentioned).
I do think it is better to avoid the floating point hardware entirely.
>What you should do is think again about why you need all this floating
>point in the kernel.
To control a device.
>Could it be moved to userspace somehow?
Yes, if we use a real-time Linux and make a daemon cooperate very closely
with the driver.
>Maybe you could use lookup tables instead of doing floating point
>arithmetic.
You might be right, if the device can only be controlled to position itself
in say 1,000 different ways, then we could have lookup tables for 1,000
different intervals of (emulations of) floating-point numbers, that yield
1,000 different values of sin. Another table for cos, another for log10,
etc. But I'd still have to write my own emulations for binary operators
such as +, /, etc., since a 1,000*1,000 lookup table would be too big.
next reply other threads:[~2004-05-31 3:04 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-31 2:50 ndiamond [this message]
2004-05-31 4:02 ` Chris Friesen
2004-05-31 5:44 ` Ian Kent
2004-05-31 6:13 ` Peter Williams
2004-05-31 13:39 ` Horst von Brand
2004-05-31 20:12 ` Michal Jaegermann
2004-05-31 20:23 ` Hugo Mills
2004-05-31 22:43 ` Peter Williams
-- strict thread matches above, loose matches on Subject: below --
2004-06-02 5:52 ndiamond
2004-06-02 19:31 ` Valdis.Kletnieks
2004-06-01 2:27 ndiamond
2004-06-01 0:38 ndiamond
2004-06-01 20:52 ` H. Peter Anvin
2004-05-31 20:38 Manfred Spraul
2004-05-31 21:11 ` Horst von Brand
2004-05-31 1:52 ndiamond
2004-05-31 2:18 ` Måns Rullgård
2004-05-30 22:39 ` Calvin Spealman
2004-05-31 4:28 ` Linus Torvalds
2004-05-31 3:57 ` Calvin Spealman
2004-05-31 3:59 ` Matt Mackall
2004-05-31 4:11 ` Stephen Smoogen
2004-05-31 14:55 ` Scott Robert Ladd
2004-06-01 2:11 ` Richard B. Johnson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200405310250.i4V2ork05673@mailout.despammed.com \
--to=ndiamond@despammed.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®