bug-gnulib
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]