From 3db6fc8394653467e1049ead3ac28e1b33e6a3b0 Mon Sep 17 00:00:00 2001 From: marino Date: Thu, 12 Jul 2012 13:47:23 +0000 Subject: lang/gcc47: Fix DragonFly32 floating point handling Like i386-FreeBSD, the i386-DragonFly floating point unit uses a 53-bit mantissa. GCC uses the TARGET_96_ROUND_53_LONG_DOUBLE macro to know which platforms behave this way. Unfortunately, setting this macro to 1 breaks precision on Ada, and leaving it at 0 breaks precision on c/c++ long double handling. However lang/gcc47 likely will never support Ada, so we'll favor c/c++. This is only an issue for i386; the setting on x86_64 should be zero as it uses 64-bit precision. --- lang/gcc47/Makefile | 4 ++-- lang/gcc47/distinfo | 5 ++--- lang/gcc47/patches/patch-gcc_config_i386_dragonfly.h | 10 +++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lang/gcc47/Makefile b/lang/gcc47/Makefile index ac6920b3490..368da67e185 100644 --- a/lang/gcc47/Makefile +++ b/lang/gcc47/Makefile @@ -1,11 +1,11 @@ -# $NetBSD: Makefile,v 1.3 2012/06/23 22:13:02 marino Exp $ +# $NetBSD: Makefile,v 1.4 2012/07/12 13:47:23 marino Exp $ GCC_PKGNAME= gcc47 .include "version.mk" DISTNAME= gcc-${GCC_DIST_VERSION} PKGNAME= ${GCC_PKGNAME}-${GCC_DIST_VERSION} -PKGREVISION= 2 +PKGREVISION= 3 CATEGORIES= lang MASTER_SITES= ${MASTER_SITE_GNU:=gcc/gcc-${GCC_DIST_VERSION}/} EXTRACT_SUFX= .tar.bz2 diff --git a/lang/gcc47/distinfo b/lang/gcc47/distinfo index 75208c7b043..fb625883772 100644 --- a/lang/gcc47/distinfo +++ b/lang/gcc47/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.7 2012/06/23 22:13:02 marino Exp $ +$NetBSD: distinfo,v 1.8 2012/07/12 13:47:23 marino Exp $ SHA1 (ecj-4.5.jar) = 58c1d79c64c8cd718550f32a932ccfde8d1e6449 RMD160 (ecj-4.5.jar) = d3f4da657f086b6423f74e93f001132f4855368a @@ -12,7 +12,7 @@ SHA1 (patch-gcc_config.gcc) = efa4ecabd71bdec14d5dd1f8bb836116c7a9d6e9 SHA1 (patch-gcc_config_dragonfly-stdint.h) = 740dc819b446d5f1476506322c4b280ffdb5a6c0 SHA1 (patch-gcc_config_dragonfly.h) = 82f549cdc7543b4bf413a44d481ef42b10f59c82 SHA1 (patch-gcc_config_dragonfly.opt) = 92f615c73c2e94664bae5b5935ab8b09bca15f73 -SHA1 (patch-gcc_config_i386_dragonfly.h) = f2c46d1b6b51316aa774c2453a69ff2571778dbd +SHA1 (patch-gcc_config_i386_dragonfly.h) = 0d3f785434c02beb9c4561fe59842a970e8f7896 SHA1 (patch-gcc_config_netbsd-stdint.h) = 025fc883101a187e84ed4c0772406720d645d550 SHA1 (patch-gcc_configure) = a4b670d0c54c410d38715b7a2a572a7048e3ec5e SHA1 (patch-gcc_fortran_f95-lang.c) = 06470dbee79f8c762675d3060a870b7dd9ba38f8 @@ -37,4 +37,3 @@ SHA1 (patch-libstdc++-v3_config_os_bsd_dragonfly_os__defines.h) = 9a45ecb4309c50 SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h) = 94879703659b960c7b61122b4b4173e01cec1afc SHA1 (patch-libstdc++-v3_configure) = 4846c93afac42e4fdd20141234d601517cab7175 SHA1 (patch-libstdc++-v3_configure.host) = 7426ea4a9735e5f886f4a3ffb4a9ba62734178c4 -SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h) = 94879703659b960c7b61122b4b4173e01cec1afc diff --git a/lang/gcc47/patches/patch-gcc_config_i386_dragonfly.h b/lang/gcc47/patches/patch-gcc_config_i386_dragonfly.h index c360093a5b8..03c67f11187 100644 --- a/lang/gcc47/patches/patch-gcc_config_i386_dragonfly.h +++ b/lang/gcc47/patches/patch-gcc_config_i386_dragonfly.h @@ -1,6 +1,6 @@ -$NetBSD: patch-gcc_config_i386_dragonfly.h,v 1.1 2012/06/23 22:13:02 marino Exp $ +$NetBSD: patch-gcc_config_i386_dragonfly.h,v 1.2 2012/07/12 13:47:23 marino Exp $ ---- gcc/config/i386/dragonfly.h.orig 2012-06-22 10:35:29.000000000 +0000 +--- gcc/config/i386/dragonfly.h.orig 2012-07-12 12:01:10.000000000 +0000 +++ gcc/config/i386/dragonfly.h @@ -0,0 +1,101 @@ +/* Definitions for Intel 386 running DragonFly with ELF format @@ -88,10 +88,10 @@ $NetBSD: patch-gcc_config_i386_dragonfly.h,v 1.1 2012/06/23 22:13:02 marino Exp +#undef DEFAULT_PCC_STRUCT_RETURN +#define DEFAULT_PCC_STRUCT_RETURN 0 + -+/* DragonFly sets the rounding precision of the FPU to 53 bits, but GNAT -+ resets it to full precision. */ ++/* DragonFly sets the rounding precision of the FPU to 53 bits. Let the ++ compiler get the contents of and std::numeric_limits correct. */ +#undef TARGET_96_ROUND_53_LONG_DOUBLE -+#define TARGET_96_ROUND_53_LONG_DOUBLE 0 ++#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT) + +/* Put all *tf routines in libgcc. */ +#undef LIBGCC2_HAS_TF_MODE -- cgit v1.2.3