From: Aurelien Jarno <aurelien@aurel32.net>
To: Joey Ye <joey.ye.cc@gmail.com>
Cc: gcc-patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH, PR61219]: Fix sNaN handling in ARM float to double conversion
Date: Mon, 19 May 2014 06:48:00 -0000 [thread overview]
Message-ID: <20140519064809.GC31004@hall.aurel32.net> (raw)
In-Reply-To: <CAL0py24WDQ9GkaayCszgJb-MZi4qExZPJm2Fov7p9Ai4zNy74Q@mail.gmail.com>
On Mon, May 19, 2014 at 02:08:06PM +0800, Joey Ye wrote:
> If f2d need fix, then please fix d2f too as current implementation for
> both behave similarly.
I have done some tests with double to float conversion, and the NaN
behaviour is correct. This is due to specific code handling that in
d2f:
3: @ chech for NAN
mvns r3, r2, asr #21
bne 5f @ simple overflow
orrs r3, xl, xh, lsl #12
do_it ne, tt
movne r0, #0x7f000000
orrne r0, r0, #0x00c00000
RETc(ne) @ return NAN
Aurelien
> On Mon, May 19, 2014 at 5:23 AM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> > On ARM soft-float, the float to double conversion doesn't convert a sNaN
> > to qNaN as the IEEE Std 754 standard mandates:
> >
> > "Under default exception handling, any operation signaling an invalid
> > operation exception and for which a floating-point result is to be
> > delivered shall deliver a quiet NaN."
> >
> > Given the soft float ARM code ignores exceptions and always provides a
> > result, a float to double conversion of a signaling NaN should return a
> > quiet NaN. Fix this in extendsfdf2.
> >
> >
> > 2014-05-18 Aurelien Jarno <aurelien@aurel32.net>
> >
> > PR target/61219
> > * config/arm/ieee754-df.S (extendsfdf2): Convert sNaN to qNaN.
> >
> >
> > Index: libgcc/config/arm/ieee754-df.S
> > ===================================================================
> > --- libgcc/config/arm/ieee754-df.S (revision 210588)
> > +++ libgcc/config/arm/ieee754-df.S (working copy)
> > @@ -473,11 +473,15 @@
> > eorne xh, xh, #0x38000000 @ fixup exponent otherwise.
> > RETc(ne) @ and return it.
> >
> > - teq r2, #0 @ if actually 0
> > - do_it ne, e
> > - teqne r3, #0xff000000 @ or INF or NAN
> > + bics r2, r2, #0xff000000 @ isolate mantissa
> > + do_it eq @ if 0, that is ZERO or INF,
> > RETc(eq) @ we are done already.
> >
> > + teq r3, #0xff000000 @ check for NAN
> > + do_it eq, t
> > + orreq xh, xh, #0x00080000 @ change to quiet NAN
> > + RETc(eq) @ and return it.
> > +
> > @ value was denormalized. We can normalize it now.
> > do_push {r4, r5, lr}
> > mov r4, #0x380 @ setup corresponding exponent
> >
> > --
> > Aurelien Jarno GPG: 4096R/1DDD8C9B
> > aurelien@aurel32.net http://www.aurel32.net
>
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net
next prev parent reply other threads:[~2014-05-19 6:48 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-18 21:23 Aurelien Jarno
2014-05-19 6:08 ` Joey Ye
2014-05-19 6:48 ` Aurelien Jarno [this message]
2014-06-07 10:54 ` Aurelien Jarno
2014-06-17 22:29 ` Ramana Radhakrishnan
2014-06-20 22:17 ` Aurelien Jarno
2014-06-20 22:58 ` Joseph S. Myers
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=20140519064809.GC31004@hall.aurel32.net \
--to=aurelien@aurel32.net \
--cc=gcc-patches@gcc.gnu.org \
--cc=joey.ye.cc@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).