re PR target/17778 (regression in evaluating long double hexadecimal constants)

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.

From-SVN: r90543
This commit is contained in:
Richard Henderson 2004-11-12 13:15:23 -08:00 committed by Richard Henderson
parent 690e11b8f5
commit cc69336f16
4 changed files with 16 additions and 7 deletions

View File

@ -1,3 +1,11 @@
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-11 Geoffrey Keating <geoffk@apple.com>
* Makefile.in (macro_list): Use move-if-change to avoid spurious

View File

@ -138,10 +138,5 @@ Boston, MA 02111-1307, USA. */
/* 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; \
} \
} while (0)
#undef TARGET_96_ROUND_53_LONG_DOUBLE
#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT)

View File

@ -29,6 +29,8 @@ FLOAT_MODE (TF, 16, ieee_quad_format);
In LP64 mode, XFmode has size and alignment 16. */
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);

View File

@ -451,6 +451,10 @@ extern int x86_prefetch_sse;
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.