[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fix for compiling m4 on VAX
From: |
Paul Eggert |
Subject: |
Re: Fix for compiling m4 on VAX |
Date: |
Wed, 30 Oct 2013 21:18:32 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.0 |
John Klos wrote:
> And yes, VAXen have no NaNs
That's barely true, alas. Two IEEE floating-point
accelerators were built for the VAX-11/780. See:
Taylor GS, Patterson DA.
VAX hardware for the proposed IEEE floating-point standard.
Proc 5th IEEE Symposium on Computer Arithmetic (1981)
http://dx.doi.org/10.1109/ARITH.1981.6159294
Unfortunately David Cary, the Berkeley student in charge of
installing these accelerators, was killed in a swimming
accident before he could finish the job. See Kahan's interview in:
http://www.eecs.berkeley.edu/~wkahan/ieee754status/754story.html
Dave Patterson will be visiting next week; maybe I should
ask him whether it actually worked, just to give him a tweak.
> isnan would never possibly return true on VAX.
OK, thanks, I pushed this into gnulib. Does it work for you?
>From 493c4ddbc6260aa7806632a768410dd80bdbade7 Mon Sep 17 00:00:00 2001
From: Paul Eggert <address@hidden>
Date: Wed, 30 Oct 2013 20:51:39 -0700
Subject: [PATCH] isnan: port to VAX
Reported by John Klos for NetBSD-5/VAX in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00133.html>.
* lib/isnan.c (IEEE_FLOATING_POINT): New macro, stolen from Emacs.
(FUNC): Use it.
---
ChangeLog | 8 ++++++++
lib/isnan.c | 18 +++++++++++++++---
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0c564db..3e96abc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2013-10-30 Paul Eggert <address@hidden>
+
+ isnan: port to VAX
+ Reported by John Klos for NetBSD-5/VAX in
+ <http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00133.html>.
+ * lib/isnan.c (IEEE_FLOATING_POINT): New macro, stolen from Emacs.
+ (FUNC): Use it.
+
2013-10-28 Jim Meyering <address@hidden>
gnulib-tool: protect against CDPATH
diff --git a/lib/isnan.c b/lib/isnan.c
index d95e4ba..10596a9 100644
--- a/lib/isnan.c
+++ b/lib/isnan.c
@@ -79,10 +79,21 @@ extern int rpl_isnanf (float x);
((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double;
+/* Most hosts nowadays use IEEE floating point, so they use IEC 60559
+ representations, have infinities and NaNs, and do not trap on
+ exceptions. Define IEEE_FLOATING_POINT if this host is one of the
+ typical ones. The C11 macro __STDC_IEC_559__ is close to what is
+ wanted here, but is not quite right because this file does not require
+ all the features of C11 Annex F (and does not require C11 at all,
+ for that matter). */
+
+#define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \
+ && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128)
+
int
FUNC (DOUBLE x)
{
-#ifdef KNOWN_EXPBIT0_LOCATION
+#if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT
# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) ||
(defined __x86_64__ || defined __amd64__) || (defined __i386 || defined
__i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) &&
!HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
/* Special CPU dependent code is needed to treat bit patterns outside the
IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities,
@@ -153,8 +164,9 @@ FUNC (DOUBLE x)
}
# endif
#else
- /* The configuration did not find sufficient information. Give up about
- the signaling NaNs, handle only the quiet NaNs. */
+ /* The configuration did not find sufficient information, or does
+ not use IEEE floating point. Give up about the signaling NaNs;
+ handle only the quiet NaNs. */
if (x == x)
{
# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) ||
(defined __x86_64__ || defined __amd64__) || (defined __i386 || defined
__i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) &&
!HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
--
1.8.3.1