OSDN Git Service

* real.h (ieee_extended_intel_96_round_53_format): New.
authorljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Jun 2003 00:11:33 +0000 (00:11 +0000)
committerljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Jun 2003 00:11:33 +0000 (00:11 +0000)
* real.c (ieee_extended_intel_96_round_53_format): New.
* config/i386/freebsd.h (SUBTARGET_OVERRIDE_OPTIONS): Use it
for XFmode and TFmode.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68445 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 65daadd..cd02e3f 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 64b152f..52dcf1b 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 4e1dc22..b491d88 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 56afd0e..71e3cc4 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;