From: Aurelien Jarno <aurelien@aurel32.net>
To: Thiemo Seufer <ths@networkno.de>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] Fix NaN handling in softfloat
Date: Sat, 10 Nov 2007 22:46:12 +0100 [thread overview]
Message-ID: <473626A4.9020802@aurel32.net> (raw)
In-Reply-To: <20071110211821.GA8363@networkno.de>
Thiemo Seufer a écrit :
> Aurelien Jarno wrote:
>> On Sat, Nov 03, 2007 at 02:06:04PM -0400, Daniel Jacobowitz wrote:
>>> On Sat, Nov 03, 2007 at 06:35:48PM +0100, Aurelien Jarno wrote:
>>>> Hi all,
>>>>
>>>> The current softfloat implementation changes qNaN into sNaN when
>>>> converting between formats, for no reason. The attached patch fixes
>>>> that. It also fixes an off-by-one in the extended double precision
>>>> format (aka floatx80), the mantissa is 64-bit long and not 63-bit
>>>> long.
>>>>
>>>> With this patch applied all the glibc 2.7 floating point tests
>>>> are successfull on MIPS and MIPSEL.
>>> FYI, I posted a similar patch and haven't had time to get back to it.
>>> Andreas reminded me that we need to make sure at least one mantissa
>>> bit is set. If we're confident that the common NaN format will
>>> already have some bit other than the qnan/snan bit set, this is fine;
>>> otherwise, we might want to forcibly set some other mantissa bit.
>>>
>> Please find an updated patch below. I have tried to match real x86, MIPS,
>> HPPA, PowerPC and SPARC hardware when all mantissa bits are cleared.
>
> The default NaN pattern for MIPS and HPPA were broken. (Fabrice spotted
> this.) I currently have the appended patch, it assumes HPPA is similiar
> to MIPS, which is probably incorrect.
HPPA only generates different NaN values, appart from that it behaves
the same as MIPS. On the other side, target-hppa is not yet implemented
(even if some patches could be found on the web).
>> Index: fpu/softfloat-specialize.h
>> ===================================================================
>> RCS file: /sources/qemu/qemu/fpu/softfloat-specialize.h,v
>> retrieving revision 1.3
>> diff -u -d -p -r1.3 softfloat-specialize.h
>> --- fpu/softfloat-specialize.h 11 May 2007 17:10:14 -0000 1.3
>> +++ fpu/softfloat-specialize.h 3 Nov 2007 21:17:57 -0000
>> @@ -120,9 +120,17 @@ static commonNaNT float32ToCommonNaN( fl
>>
>> static float32 commonNaNToFloat32( commonNaNT a )
>> {
>> -
>> - return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 );
>> -
>> + bits32 mantissa = a.high>>41;
>> + if (mantissa)
>> + return ( ( (bits32) a.sign )<<31 ) | 0x7F800000 | ( mantissa );
>> + else
>> +#if defined(TARGET_MIPS)
>> + return ( ( (bits32) a.sign )<<31 ) | 0x7FBFFFFF | ( mantissa );
>> +#elif defined(TARGET_HPPA)
>> + return ( ( (bits32) a.sign )<<31 ) | 0x7FA00000 | ( mantissa );
>> +#else
>> + return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000;
>> +#endif
>
> This looks odd. Do MIPS and HPPA really need a specialcase here but none
> for doubles? Could you re-check with my patch applied?
That's because there is no greater precision than double precision on
MIPS and HPPA (for the latter I am not 100% sure), so you can't loose
precision on the mantissa when converting to double precision.
I have looked quickly at your patch, it looks like the right approach to
define target specific things at only one place in the file. I will get
a closer tomorrow.
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
next prev parent reply other threads:[~2007-11-10 21:46 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-03 17:35 [Qemu-devel] [PATCH] Fix NaN handling in softfloat Aurelien Jarno
2007-11-03 18:06 ` Daniel Jacobowitz
2007-11-03 19:14 ` Aurelien Jarno
2007-11-03 21:28 ` Aurelien Jarno
2007-11-06 20:01 ` J. Mayer
2007-11-06 21:14 ` Thiemo Seufer
2007-11-07 23:05 ` Aurelien Jarno
2007-11-07 23:12 ` Daniel Jacobowitz
2007-11-08 0:41 ` Thiemo Seufer
2007-11-09 22:31 ` J. Mayer
2007-11-10 9:35 ` Aurelien Jarno
2007-11-10 13:31 ` J. Mayer
2007-11-10 16:15 ` Aurelien Jarno
2007-11-10 17:14 ` J. Mayer
2007-11-10 18:09 ` Aurelien Jarno
2007-11-10 22:44 ` J. Mayer
2007-11-10 21:18 ` Thiemo Seufer
2007-11-10 21:46 ` Aurelien Jarno [this message]
2007-11-21 15:49 ` Aurelien Jarno
2007-12-16 12:43 ` Aurelien Jarno
2007-11-03 18:30 ` Thiemo Seufer
2007-11-03 19:13 ` Aurelien Jarno
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=473626A4.9020802@aurel32.net \
--to=aurelien@aurel32.net \
--cc=qemu-devel@nongnu.org \
--cc=ths@networkno.de \
/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.