From: Richard Henderson Date: Wed, 25 Jun 2003 00:11:33 +0000 (-0700) Subject: real.h (ieee_extended_intel_96_round_53_format): New. X-Git-Tag: releases/gcc-3.4.0~5505 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bfa0c519308cee548a7cf55df731826a38a96f95;p=thirdparty%2Fgcc.git real.h (ieee_extended_intel_96_round_53_format): New. * 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. From-SVN: r68445 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 65daaddbac92..cd02e3fde5bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-06-24 Richard Henderson + (blame to: Loren James Rittle ) + + * 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 * config/h8300/h8300.md (4 anonymous patterns): Give internal diff --git a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h index 64b152f0d49a..52dcf1bc4c2e 100644 --- a/gcc/config/i386/freebsd.h +++ b/gcc/config/i386/freebsd.h @@ -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 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) diff --git a/gcc/real.c b/gcc/real.c index 4e1dc227f12e..b491d885a9f1 100644 --- a/gcc/real.c +++ b/gcc/real.c @@ -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 + }; /* IBM 128-bit extended precision format: a pair of IEEE double precision numbers whose sum is equal to the extended precision value. The number diff --git a/gcc/real.h b/gcc/real.h index 56afd0e518c7..71e3cc4b6b9f 100644 --- a/gcc/real.h +++ b/gcc/real.h @@ -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;