From: erik quanstrom <quanstro@quanstro.net>
To: 9fans@9fans.net
Subject: [9fans] emulated fp on arm
Date: Mon, 28 Jan 2013 12:08:14 -0500 [thread overview]
Message-ID: <dbf8e3dd5e1d18583b76ebf37642c1b4@ladd.quanstro.net> (raw)
speaking of arm issues ...
this problem was causing a script of mine to fail.
kw; awk 'BEGIN {print -1 + 1; if ((-1 + 1) == 0) print "yes"; else print "no"}'
-0
no
i'm not a fp expert, but i think there are two problems here. first
it is bad form to generate -0 in the emulator, even if it is technically
correct, and second, -0 is defined to be equal to 0 by the spec, so
-0 == 0 should always be true.
here's a fix for the first issue. it is sufficient to catch the case above.
; diffy -c fpi.h
/n/dump/2013/0125/sys/src/9/omap/fpi.h:37,43 - fpi.h:37,43
#define SetQNaN(n) ((n)->s = 0, (n)->e = ExpInfinity, \
(n)->h = HiddenBit|(LsBit<<1), (n)->l = 0)
#define IsZero(n) ((n)->e == 1 && (n)->h == 0 && (n)->l == 0)
- #define SetZero(n) ((n)->e = 1, (n)->h = 0, (n)->l = 0)
+ #define SetZero(n) ((n)->s = 0, (n)->e = 1, (n)->h = 0, (n)->l = 0)
/*
* fpi.c
for maximum completeness, fpicmp could be corrected as follows.
i haven't done this yet since atof(2) doesn't generate them.
int
fpicmp(Internal *x, Internal *y)
{
if(IsNaN(x) && IsNaN(y))
return 0;
if(IsInfinity(x) && IsInfinity(y))
return y->s - x->s;
if(x->e == y->e && x->h == y->h && x->l == y->l){
>> if(IsZero(y))
>> return 0;
return y->s - x->s;
}
if(x->e < y->e
|| (x->e == y->e && (x->h < y->h || (x->h == y->h && x->l < y->l))))
return y->s ? 1: -1;
return x->s ? -1: 1;
}
- erik
next reply other threads:[~2013-01-28 17:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-28 17:08 erik quanstrom [this message]
2013-01-28 17:10 ` erik quanstrom
2013-01-29 22:10 ` Richard Miller
2013-01-29 22:44 ` erik quanstrom
2013-01-30 10:35 ` Richard Miller
2013-01-30 22:18 ` Bakul Shah
2013-01-31 3:50 ` erik quanstrom
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=dbf8e3dd5e1d18583b76ebf37642c1b4@ladd.quanstro.net \
--to=quanstro@quanstro.net \
--cc=9fans@9fans.net \
/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 NNTP newsgroup(s).