+2004-11-12 Richard Henderson <rth@redhat.com>
+
+ PR 17778
+ * config/i386/i386.h (TARGET_96_ROUND_53_LONG_DOUBLE): New.
+ * config/i386/freebsd.h (SUBTARGET_OVERRIDE_OPTIONS): Remove.
+ (TARGET_96_ROUND_53_LONG_DOUBLE): New.
+ * config/i386/i386-modes.def (XF): Use it.
+
2004-11-12 Ralf Corsepius <ralf.corsepius@rtems.org>
* config/rs6000/t-rtems (MULTILIB_NEW_EXCEPTIONS_ONLY):
2004-10-13 Richard Henderson <rth@redhat.com>
- PR debug/15860
- * dwarf2out.c (rtl_for_decl_location): Apply big-endian correction
- for DECL_INCOMING_RTL.
+ PR debug/15860
+ * dwarf2out.c (rtl_for_decl_location): Apply big-endian correction
+ for DECL_INCOMING_RTL.
2004-10-13 Richard Henderson <rth@redhat.com>
/* 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 { \
- if (!TARGET_64BIT) { \
- REAL_MODE_FORMAT (XFmode) \
- = &ieee_extended_intel_96_round_53_format; \
- REAL_MODE_FORMAT (TFmode) \
- = &ieee_extended_intel_96_round_53_format; \
- } \
- } while (0)
+#undef TARGET_96_ROUND_53_LONG_DOUBLE
+#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT)
FLOAT_MODE (XF, 12, ieee_extended_intel_96_format);
ADJUST_FLOAT_FORMAT (XF, (TARGET_128BIT_LONG_DOUBLE
? &ieee_extended_intel_128_format
+ : TARGET_96_ROUND_53_LONG_DOUBLE
+ ? &ieee_extended_intel_96_round_53_format
: &ieee_extended_intel_96_format));
ADJUST_BYTESIZE (XF, TARGET_128BIT_LONG_DOUBLE ? 16 : 12);
ADJUST_ALIGNMENT (XF, TARGET_128BIT_LONG_DOUBLE ? 16 : 4);
redefines this to 1. */
#define TARGET_MACHO 0
+/* Subtargets may reset this to 1 in order to enable 96-bit long double
+ with the rounding mode forced to 53 bits. */
+#define TARGET_96_ROUND_53_LONG_DOUBLE 0
+
/* This macro is similar to `TARGET_SWITCHES' but defines names of
command options that have values. Its definition is an
initializer with a subgrouping for each command option.