From: Thorsten Otto <admin@tho-otto.de>
To: linux-m68k@vger.kernel.org, Michael Schmitz <schmitzmic@gmail.com>
Subject: Re: Software FPU emulation in linux kernel
Date: Tue, 04 Mar 2025 06:47:40 +0100 [thread overview]
Message-ID: <6144250.UjTJXf6HLC@earendil> (raw)
In-Reply-To: <091d25fa-6a79-4685-a920-075611e79626@gmail.com>
>
> both operands are checked for infinity
> first.
Not really. The code reads
/* Handle infinities */
if (IS_INF(dest)) {
if (IS_ZERO(src))
fp_set_nan(dest);
return dest;
}
So the src argument is checked for ZERO first.
Similar in the implementation of fgetman:
if (IS_ZERO(dest))
return dest;
if (IS_INF(dest))
return dest;
> I cannot locate the specific assembly function you mention
> (fp_long_ext2ext). Can you post code or disassembly to illustrate the
> problem?
A sorry, i meant fp_conv_ext2ext. It is called by the fp_normalize_ext() macro
in fp_emu.h, which in turn is called by fp_monadic_check/fp_dyadic_check.
> That might be a genuine error in the sqrt algorithm there - can't see
> how it does arise though.
I think this is caused by
dest->exp += (exp - 0x3FFF) / 2;
`exp` here is the original exponent of the source, and if that is < 1.0, the
expression `exp - 0x3FFF` will become negative, but the division truncates it
towards zero. IMHO using `>> 1` should fix that.
> You may
> have to look elsewhere for a feature complete FPU emulation (does netbsd
> have that?).
Yes, NetBSD has something similar, and it seems to be almost complete,
including all the trigonometric functions. However they do everything in C,
including all the <ea> calculations. The linux version seems to be much better
in this regard.
next prev parent reply other threads:[~2025-03-04 5:47 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-03 16:22 Software FPU emulation in linux kernel Thorsten Otto
2025-03-03 22:10 ` Brad Boyer
2025-03-04 5:24 ` Thorsten Otto
2025-03-04 5:48 ` Brad Boyer
2025-03-03 23:38 ` Michael Schmitz
2025-03-04 4:44 ` Finn Thain
2025-03-04 5:47 ` Thorsten Otto [this message]
2025-03-06 15:24 ` Thorsten Otto
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=6144250.UjTJXf6HLC@earendil \
--to=admin@tho-otto.de \
--cc=linux-m68k@vger.kernel.org \
--cc=schmitzmic@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.