]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
real.h (ieee_extended_intel_96_round_53_format): New.
authorRichard Henderson <rth@redhat.com>
Wed, 25 Jun 2003 00:11:33 +0000 (17:11 -0700)
committerLoren J. Rittle <ljrittle@gcc.gnu.org>
Wed, 25 Jun 2003 00:11:33 +0000 (00:11 +0000)
* real.h (ieee_extended_intel_96_round_53_format): New.
* real.c (ieee_extended_intel_96_round_53_format): New.
* config/i386/freebsd.h (SUBTARGET_OVERRIDE_OPTIONS): Use it
for XFmode and TFmode.

From-SVN: r68445

gcc/ChangeLog
gcc/config/i386/freebsd.h
gcc/real.c
gcc/real.h

index 65daaddbac92cc5234576161d790796df82e3a79..cd02e3fde5bfb49f484680810be436a7f28494c1 100644 (file)
@@ -1,3 +1,11 @@
+2003-06-24  Richard Henderson  <rth@redhat.com>
+           (blame to: Loren James Rittle  <ljrittle@acm.org>)
+
+       * real.h (ieee_extended_intel_96_round_53_format): New.
+       * real.c (ieee_extended_intel_96_round_53_format): New.
+       * config/i386/freebsd.h (SUBTARGET_OVERRIDE_OPTIONS): Use it
+       for XFmode and TFmode.
+
 2003-06-24  Kazu Hirata  <kazu@cs.umass.edu>
 
        * config/h8300/h8300.md (4 anonymous patterns): Give internal
index 64b152f0d49a77951ce3d998582cc6e3717b149e..52dcf1bc4c2e271a72b52cbdd64d06c8c0f951dd 100644 (file)
@@ -133,3 +133,13 @@ Boston, MA 02111-1307, USA.  */
 
 #undef  DEFAULT_PCC_STRUCT_RETURN
 #define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* FreeBSD sets the rounding precision of the FPU to 53 bits.  Let the
+   compiler get the contents of <float.h> and std::numeric_limits correct.  */
+#define SUBTARGET_OVERRIDE_OPTIONS                     \
+  do {                                                 \
+    real_format_for_mode[XFmode - QFmode]              \
+      = &ieee_extended_intel_96_round_53_format;       \
+    real_format_for_mode[TFmode - QFmode]              \
+      = &ieee_extended_intel_96_round_53_format;       \
+  } while (0)
index 4e1dc227f12e4eb7a6d2f782305c63d38a66e716..b491d885a9f11566562b2348b1c5701dd7c15c6a 100644 (file)
@@ -3326,6 +3326,25 @@ const struct real_format ieee_extended_intel_128_format =
     true
   };
 
+/* The following caters to i386 systems that set the rounding precision
+   to 53 bits instead of 64, e.g. FreeBSD.  */
+const struct real_format ieee_extended_intel_96_round_53_format = 
+  {
+    encode_ieee_extended,
+    decode_ieee_extended,
+    2,
+    1,
+    53,
+    53,
+    -16381,
+    16384,
+    79,
+    true,
+    true,
+    true,
+    true,
+    true
+  };
 \f
 /* IBM 128-bit extended precision format: a pair of IEEE double precision
    numbers whose sum is equal to the extended precision value.  The number
index 56afd0e518c7e47f2c45ca0498b469d3a766a492..71e3cc4b6b9f8222d6836dc72a278f871a9d5c06 100644 (file)
@@ -234,6 +234,7 @@ extern const struct real_format ieee_double_format;
 extern const struct real_format mips_double_format;
 extern const struct real_format ieee_extended_motorola_format;
 extern const struct real_format ieee_extended_intel_96_format;
+extern const struct real_format ieee_extended_intel_96_round_53_format;
 extern const struct real_format ieee_extended_intel_128_format;
 extern const struct real_format ibm_extended_format;
 extern const struct real_format mips_extended_format;