* 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
+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
#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)
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
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;