From cc69336f16a0c9c099d3c155c0e382e667d30938 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 12 Nov 2004 13:15:23 -0800 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/freebsd.h | 9 ++------- gcc/config/i386/i386-modes.def | 2 ++ gcc/config/i386/i386.h | 4 ++++ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2b339876c7ec..747d9b34faab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-11-12 Richard Henderson + + 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 * Makefile.in (macro_list): Use move-if-change to avoid spurious diff --git a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h index 04374003398e..08984a342cdd 100644 --- a/gcc/config/i386/freebsd.h +++ b/gcc/config/i386/freebsd.h @@ -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 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) diff --git a/gcc/config/i386/i386-modes.def b/gcc/config/i386/i386-modes.def index 091c2266fd1b..ea35a2a1768e 100644 --- a/gcc/config/i386/i386-modes.def +++ b/gcc/config/i386/i386-modes.def @@ -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); diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index e3c6d1b8b22a..7da8f511884d 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -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. -- 2.43.5