crtfastmath.c: Move to ../libgcc/config/alpha.
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Wed, 13 Jul 2011 17:33:38 +0000 (17:33 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Wed, 13 Jul 2011 17:33:38 +0000 (17:33 +0000)
gcc:
* config/alpha/crtfastmath.c: Move to ../libgcc/config/alpha.
* config/alpha/t-crtfm: Remove.
* config/i386/crtfastmath.c: Move to ../libgcc/config/i386.
* config/i386/t-crtfm: Remove.
* config/ia64/crtfastmath.c: Move to ../libgcc/config/ia64.
* config/mips/crtfastmath.c: Move to ../libgcc/config/mips.
* config/sparc/crtfastmath.c: Move to ../libgcc/config/sparc.
* config/sparc/t-crtfm: Remove.

* config.gcc (alpha*-*-linux*): Remove alpha/t-crtfm from tmake_file.
(alpha*-*-freebsd*): Likewise.
(i[34567]86-*-darwin*): Remove i386/t-crtfm from tmake_file.
(x86_64-*-darwin*): Likewise.
(i[34567]86-*-linux*): Likewise.
(x86_64-*-linux*): Likewise.
(x86_64-*-mingw*): Likewise.
(ia64*-*-elf*): Remove crtfastmath.o from extra_parts.
(ia64*-*-freebsd*): Likewise.
(ia64*-*-linux*): Likewise.
(mips64*-*-linux*): Likewise.
(mips*-*-linux*): Likewise.
(sparc-*-linux*): Remove sparc/t-crtfm from tmake_file.
(sparc64-*-linux*): Likewise.
(sparc64-*-freebsd*): Likewise.

libgcc:
* config/alpha/crtfastmath.c: New file.
* config/i386/crtfastmath.c: New file.
* config/ia64/crtfastmath.c: New file.
* config/mips/crtfastmath.c: New file.
* config/sparc/crtfastmath.c: New file.

* config/t-crtfm (crtfastmath.o): Use $(srcdir) to refer to
crtfastmath.c.
Add -frandom-seed=gcc-crtfastmath.
* config/alpha/t-crtfm: Remove.
* config/i386/t-crtfm: Use $(srcdir) to refer to crtfastmath.c.
* config/ia64/t-ia64 (crtfastmath.o): Remove.

* config.host (alpha*-*-linux*): Replace alpha/t-crtfm by t-crtfm.
(alpha*-dec-osf5.1*): Likewise.
(alpha*-*-freebsd*): Add t-crtfm to tmake_file.
Add crtfastmath.o to extra_parts.
(i[34567]86-*-darwin*): Add i386/t-crtfm to tmake_file.
Add crtfastmath.o to extra_parts.
(x86_64-*-darwin*): Likewise.
(x86_64-*-mingw*): Likewise.
(ia64*-*-elf*): Add t-crtfm to tmake_file.
(ia64*-*-freebsd*): Likewise.
(ia64*-*-linux*): Likewise.
(sparc64-*-freebsd*): Add t-crtfm to tmake_file.
Add crtfastmath.o to extra_parts.

From-SVN: r176241

21 files changed:
gcc/ChangeLog
gcc/config.gcc
gcc/config/alpha/crtfastmath.c [deleted file]
gcc/config/alpha/t-crtfm [deleted file]
gcc/config/i386/crtfastmath.c [deleted file]
gcc/config/i386/t-crtfm [deleted file]
gcc/config/ia64/crtfastmath.c [deleted file]
gcc/config/mips/crtfastmath.c [deleted file]
gcc/config/sparc/crtfastmath.c [deleted file]
gcc/config/sparc/t-crtfm [deleted file]
libgcc/ChangeLog
libgcc/config.host
libgcc/config/alpha/crtfastmath.c [new file with mode: 0644]
libgcc/config/alpha/t-crtfm [deleted file]
libgcc/config/i386/crtfastmath.c [new file with mode: 0644]
libgcc/config/i386/t-crtfm
libgcc/config/ia64/crtfastmath.c [new file with mode: 0644]
libgcc/config/ia64/t-ia64
libgcc/config/mips/crtfastmath.c [new file with mode: 0644]
libgcc/config/sparc/crtfastmath.c [new file with mode: 0644]
libgcc/config/t-crtfm

index 522258417ac3617cac25dba6ec0a59894a2cce29..8f83ff3ecb517fe02f2ac864deaf10e9642e43ae 100644 (file)
@@ -1,3 +1,30 @@
+2011-07-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * config/alpha/crtfastmath.c: Move to ../libgcc/config/alpha.
+       * config/alpha/t-crtfm: Remove.
+       * config/i386/crtfastmath.c: Move to ../libgcc/config/i386.
+       * config/i386/t-crtfm: Remove.
+       * config/ia64/crtfastmath.c: Move to ../libgcc/config/ia64.
+       * config/mips/crtfastmath.c: Move to ../libgcc/config/mips.
+       * config/sparc/crtfastmath.c: Move to ../libgcc/config/sparc.
+       * config/sparc/t-crtfm: Remove.
+
+       * config.gcc (alpha*-*-linux*): Remove alpha/t-crtfm from tmake_file.
+       (alpha*-*-freebsd*): Likewise.
+       (i[34567]86-*-darwin*): Remove i386/t-crtfm from tmake_file.
+       (x86_64-*-darwin*): Likewise.
+       (i[34567]86-*-linux*): Likewise.
+       (x86_64-*-linux*): Likewise.
+       (x86_64-*-mingw*): Likewise.
+       (ia64*-*-elf*): Remove crtfastmath.o from extra_parts.
+       (ia64*-*-freebsd*): Likewise.
+       (ia64*-*-linux*): Likewise.
+       (mips64*-*-linux*): Likewise.
+       (mips*-*-linux*): Likewise.
+       (sparc-*-linux*): Remove sparc/t-crtfm from tmake_file.
+       (sparc64-*-linux*): Likewise.
+       (sparc64-*-freebsd*): Likewise.
+
 2011-07-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * config/darwin-crt2.c: Move to ../libgcc/config/rs6000.
index decd6ab8be8e09437fc089abdd6ea7037e2d8a71..77424f2df512dfbd96553be734667c43cdbf6643 100644 (file)
@@ -756,13 +756,13 @@ alpha*-*-linux*)
        tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h glibc-stdint.h"
        extra_options="${extra_options} alpha/elf.opt"
        target_cpu_default="MASK_GAS"
-       tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee alpha/t-linux"
+       tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee alpha/t-linux"
        ;;
 alpha*-*-freebsd*)
        tm_file="${tm_file} ${fbsd_tm_file} alpha/elf.h alpha/freebsd.h"
        extra_options="${extra_options} alpha/elf.opt"
        target_cpu_default="MASK_GAS"
-       tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
+       tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
        extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
        ;;
 alpha*-*-netbsd*)
@@ -1208,12 +1208,12 @@ i[34567]86-*-darwin*)
        need_64bit_isa=yes
        # Baseline choice for a machine that allows m64 support.
        with_cpu=${with_cpu:-core2}
-       tmake_file="${tmake_file} t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
+       tmake_file="${tmake_file} t-slibgcc-dummy i386/t-crtpc"
        libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
        ;;
 x86_64-*-darwin*)
        with_cpu=${with_cpu:-core2}
-       tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
+       tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy i386/t-crtpc"
        tm_file="${tm_file} ${cpu_type}/darwin64.h"
        libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
        ;;
@@ -1311,7 +1311,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i
        i[34567]86-*-kopensolaris*-gnu) tm_file="${tm_file} i386/gnu-user.h kopensolaris-gnu.h i386/kopensolaris-gnu.h" ;;
        i[34567]86-*-gnu*) tm_file="$tm_file i386/gnu-user.h gnu.h i386/gnu.h";;
        esac
-       tmake_file="${tmake_file} i386/t-crtstuff i386/t-crtpc i386/t-crtfm"
+       tmake_file="${tmake_file} i386/t-crtstuff i386/t-crtpc"
        ;;
 x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
        tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h glibc-stdint.h \
@@ -1323,7 +1323,7 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
        x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu64.h" ;;
        x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;;
        esac
-       tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-crtpc i386/t-crtfm"
+       tmake_file="${tmake_file} i386/t-linux64 i386/t-crtstuff i386/t-crtpc"
        x86_multilibs="${with_multilib_list}"
        if test "$x86_multilibs" = "default"; then
                x86_multilibs="m64,m32"
@@ -1558,13 +1558,6 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
            tmake_file="i386/t-mingw-pthread ${tmake_file}"
            ;;
        esac
-       case ${target} in
-               x86_64-*-mingw*)
-                       tmake_file="${tmake_file} i386/t-crtfm"
-                       ;;
-               *)
-                       ;;
-       esac
        case ${target} in
                *mingw32crt*)
                        tm_file="${tm_file} i386/crtdll.h"
@@ -1598,13 +1591,13 @@ ia64*-*-elf*)
        then
                target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
        fi
-       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
+       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
        ;;
 ia64*-*-freebsd*)
        tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file} ia64/sysv4.h ia64/freebsd.h"
        target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
        tmake_file="${tmake_file} ia64/t-ia64"
-       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
+       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
        ;;
 ia64*-*-linux*)
        tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ia64/sysv4.h ia64/linux.h"
@@ -1613,7 +1606,7 @@ ia64*-*-linux*)
                tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
        fi
        target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
-       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
+       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
        ;;
 ia64*-*-hpux*)
        tm_file="${tm_file} dbxelf.h elfos.h ia64/sysv4.h ia64/hpux.h"
@@ -1853,7 +1846,6 @@ mips64*-*-linux* | mipsisa64*-*-linux*)
                        tm_defines="${tm_defines} MIPS_ISA_DEFAULT=65"
                        ;;
        esac
-       extra_parts="$extra_parts crtfastmath.o"
        gnu_ld=yes
        gas=yes
        test x$with_llsc != x || with_llsc=yes
@@ -1873,7 +1865,6 @@ mips*-*-linux*)                           # Linux MIPS, either endian.
         mipsisa32*)
                tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32"
         esac
-       extra_parts="$extra_parts crtfastmath.o"
        test x$with_llsc != x || with_llsc=yes
        ;;
 mips*-*-openbsd*)
@@ -2499,7 +2490,6 @@ sparc-*-linux*)
        else
                tm_file="${tm_file} sparc/linux.h"
        fi
-       tmake_file="${tmake_file} sparc/t-crtfm"
        ;;
 sparc-*-netbsdelf*)
        tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h netbsd.h netbsd-elf.h sparc/netbsd-elf.h"
@@ -2534,12 +2524,11 @@ sparc64-*-rtems*)
 sparc64-*-linux*)
        tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/linux64.h"
        extra_options="${extra_options} sparc/long-double-switch.opt"
-       tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm"
+       tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64"
        ;;
 sparc64-*-freebsd*|ultrasparc-*-freebsd*)
        tm_file="${tm_file} ${fbsd_tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/freebsd.h"
        extra_options="${extra_options} sparc/long-double-switch.opt"
-       tmake_file="${tmake_file} sparc/t-crtfm"
        case "x$with_cpu" in
                xultrasparc) ;;
                x) with_cpu=ultrasparc ;;
diff --git a/gcc/config/alpha/crtfastmath.c b/gcc/config/alpha/crtfastmath.c
deleted file mode 100644 (file)
index 677b9ed..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2001, 2009 Free Software Foundation, Inc.
- * Contributed by Richard Henderson (rth@redhat.com)
- *
- * This file is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3, or (at your option) any
- * later version.
- * 
- * This file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * Under Section 7 of GPL version 3, you are granted additional
- * permissions described in the GCC Runtime Library Exception, version
- * 3.1, as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License and
- * a copy of the GCC Runtime Library Exception along with this program;
- * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-/* Assume OSF/1 compatible interfaces.  */
-
-extern void __ieee_set_fp_control (unsigned long int);
-
-#define IEEE_MAP_DMZ  (1UL<<12)       /* Map denorm inputs to zero */
-#define IEEE_MAP_UMZ  (1UL<<13)       /* Map underflowed outputs to zero */
-
-static void __attribute__((constructor))
-set_fast_math (void)
-{
-  __ieee_set_fp_control (IEEE_MAP_DMZ | IEEE_MAP_UMZ);
-}
diff --git a/gcc/config/alpha/t-crtfm b/gcc/config/alpha/t-crtfm
deleted file mode 100644 (file)
index b410383..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-EXTRA_PARTS += crtfastmath.o
-
-$(T)crtfastmath.o: $(srcdir)/config/alpha/crtfastmath.c $(GCC_PASSES)
-       $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -frandom-seed=gcc-crtfastmath -c \
-               -o $(T)crtfastmath.o $(srcdir)/config/alpha/crtfastmath.c
diff --git a/gcc/config/i386/crtfastmath.c b/gcc/config/i386/crtfastmath.c
deleted file mode 100644 (file)
index 7abe500..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2005, 2007, 2009, 2011 Free Software Foundation, Inc.
- *
- * This file is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3, or (at your option) any
- * later version.
- * 
- * This file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * Under Section 7 of GPL version 3, you are granted additional
- * permissions described in the GCC Runtime Library Exception, version
- * 3.1, as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License and
- * a copy of the GCC Runtime Library Exception along with this program;
- * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#define MXCSR_DAZ (1 << 6)     /* Enable denormals are zero mode */
-#define MXCSR_FTZ (1 << 15)    /* Enable flush to zero mode */
-
-#ifndef __x86_64__
-/* All 64-bit targets have SSE and DAZ;
-   only check them explicitly for 32-bit ones. */
-#include "cpuid.h"
-#endif
-
-#if !defined __x86_64__ && defined __sun__ && defined __svr4__
-#include <signal.h>
-#include <ucontext.h>
-
-static volatile sig_atomic_t sigill_caught;
-
-static void
-sigill_hdlr (int sig __attribute((unused)),
-            siginfo_t *sip __attribute__((unused)),
-            ucontext_t *ucp)
-{
-  sigill_caught = 1;
-  /* Set PC to the instruction after the faulting one to skip over it,
-     otherwise we enter an infinite loop.  3 is the size of the movaps
-     instruction.  */
-  ucp->uc_mcontext.gregs[EIP] += 3;
-  setcontext (ucp);
-}
-#endif
-
-static void __attribute__((constructor))
-#ifndef __x86_64__
-/* The i386 ABI only requires 4-byte stack alignment, so this is necessary
-   to make sure the fxsave struct gets correct alignment.
-   See PR27537 and PR28621.  */
-__attribute__ ((force_align_arg_pointer))
-#endif
-set_fast_math (void)
-{
-#ifndef __x86_64__
-  unsigned int eax, ebx, ecx, edx;
-
-  if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
-    return;
-
-  if (edx & bit_SSE)
-    {
-      unsigned int mxcsr;
-  
-#if defined __sun__ && defined __svr4__
-      /* Solaris 2 before Solaris 9 4/04 cannot execute SSE instructions even
-        if the CPU supports them.  Programs receive SIGILL instead, so check
-        for that at runtime.  */
-      struct sigaction act, oact;
-
-      act.sa_handler = sigill_hdlr;
-      sigemptyset (&act.sa_mask);
-      /* Need to set SA_SIGINFO so a ucontext_t * is passed to the handler.  */
-      act.sa_flags = SA_SIGINFO;
-      sigaction (SIGILL, &act, &oact);
-
-      /* We need a single SSE instruction here so the handler can safely skip
-        over it.  */
-      __asm__ volatile ("movaps %xmm0,%xmm0");
-
-      sigaction (SIGILL, &oact, NULL);
-
-      if (sigill_caught)
-       return;
-#endif /* __sun__ && __svr4__ */
-
-      mxcsr = __builtin_ia32_stmxcsr () | MXCSR_FTZ;
-
-      if (edx & bit_FXSAVE)
-       {
-         /* Check if DAZ is available.  */
-         struct
-           {
-             unsigned short int cwd;
-             unsigned short int swd;
-             unsigned short int twd;
-             unsigned short int fop;
-             long int fip;
-             long int fcs;
-             long int foo;
-             long int fos;
-             long int mxcsr;
-             long int mxcsr_mask;
-             long int st_space[32];
-             long int xmm_space[32];
-             long int padding[56];
-           } __attribute__ ((aligned (16))) fxsave;
-
-         __builtin_memset (&fxsave, 0, sizeof (fxsave));
-
-         asm volatile ("fxsave %0" : "=m" (fxsave) : "m" (fxsave));
-
-         if (fxsave.mxcsr_mask & MXCSR_DAZ)
-           mxcsr |= MXCSR_DAZ;
-       }
-
-      __builtin_ia32_ldmxcsr (mxcsr);
-    }
-#else
-  unsigned int mxcsr = __builtin_ia32_stmxcsr ();
-  mxcsr |= MXCSR_DAZ | MXCSR_FTZ;
-  __builtin_ia32_ldmxcsr (mxcsr);
-#endif
-}
diff --git a/gcc/config/i386/t-crtfm b/gcc/config/i386/t-crtfm
deleted file mode 100644 (file)
index 4fa27e9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-EXTRA_PARTS += crtfastmath.o
-
-$(T)crtfastmath.o: $(srcdir)/config/i386/crtfastmath.c \
-  $(srcdir)/config/i386/cpuid.h $(GCC_PASSES)
-       $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(MULTILIB_CFLAGS) \
-               -msse -minline-all-stringops -c \
-               $(srcdir)/config/i386/crtfastmath.c \
-               -o $(T)crtfastmath$(objext)
diff --git a/gcc/config/ia64/crtfastmath.c b/gcc/config/ia64/crtfastmath.c
deleted file mode 100644 (file)
index 0decd2a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2001, 2005, 2009 Free Software Foundation, Inc.
-   Contributed by David Mosberger <davidm@hpl.hp.com>.
-
-   This file is part of GCC.
-
-   GCC is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3, or (at your option)
-   any later version.
-
-   GCC is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   Under Section 7 of GPL version 3, you are granted additional
-   permissions described in the GCC Runtime Library Exception, version
-   3.1, as published by the Free Software Foundation.
-
-   You should have received a copy of the GNU General Public License and
-   a copy of the GCC Runtime Library Exception along with this program;
-   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* We could call fesetenv() here but that would create a confusing
-   dependency on libm (since that is where fesetenv() gets defined.
-   To avoid this, just do everything locally.  */
-#define FE_NONIEEE_ENV 0x0009a04d0270037f
-
-static void __attribute__((constructor))
-__ia64_set_fast_math (void)
-{
-  __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r"(FE_NONIEEE_ENV));
-}
diff --git a/gcc/config/mips/crtfastmath.c b/gcc/config/mips/crtfastmath.c
deleted file mode 100644 (file)
index a9586b0..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (C) 2010 Free Software Foundation, Inc. 
-
-   This file is part of GCC.
-
-   GCC is free software; you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3, or (at your option)
-   any later version.
-
-   GCC is distributed in the hope that it will be useful, but WITHOUT
-   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-   License for more details.
-
-   Under Section 7 of GPL version 3, you are granted additional
-   permissions described in the GCC Runtime Library Exception, version
-   3.1, as published by the Free Software Foundation.
-
-   You should have received a copy of the GNU General Public License
-   and a copy of the GCC Runtime Library Exception along with this
-   program; see the files COPYING3 and COPYING.RUNTIME respectively.
-   If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifdef __mips_hard_float
-
-/* Flush denormalized numbers to zero.  */
-#define _FPU_FLUSH_TZ   0x1000000
-
-/* Rounding control.  */
-#define _FPU_RC_NEAREST 0x0     /* RECOMMENDED */
-#define _FPU_RC_ZERO    0x1
-#define _FPU_RC_UP      0x2
-#define _FPU_RC_DOWN    0x3
-
-/* Enable interrupts for IEEE exceptions.  */
-#define _FPU_IEEE     0x00000F80
-
-/* Macros for accessing the hardware control word.  */
-#define _FPU_GETCW(cw) __asm__ ("cfc1 %0,$31" : "=r" (cw))
-#define _FPU_SETCW(cw) __asm__ ("ctc1 %0,$31" : : "r" (cw))
-
-static void __attribute__((constructor))
-set_fast_math (void)
-{
-  unsigned int fcr;
-
-  /* Flush to zero, round to nearest, IEEE exceptions disabled.  */
-  fcr = _FPU_FLUSH_TZ | _FPU_RC_NEAREST;
-
-  _FPU_SETCW(fcr);
-}
-
-#endif /* __mips_hard_float */
diff --git a/gcc/config/sparc/crtfastmath.c b/gcc/config/sparc/crtfastmath.c
deleted file mode 100644 (file)
index 04727ec..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2001, 2009 Free Software Foundation, Inc.
- * Contributed by David S. Miller (davem@redhat.com)
- *
- * This file is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3, or (at your option) any
- * later version.
- * 
- * This file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- * 
- * Under Section 7 of GPL version 3, you are granted additional
- * permissions described in the GCC Runtime Library Exception, version
- * 3.1, as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License and
- * a copy of the GCC Runtime Library Exception along with this program;
- * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#define FPRS_NS                (1 << 22)       /* Non-Standard fpu results */
-
-static void __attribute__((constructor))
-set_fast_math (void)
-{
-  unsigned int fsr;
-
-  /* This works for the 64-bit case because, even if 32-bit ld/st of
-     the fsr register modified the upper 32-bit, the only thing up there
-     are the 3 other condition codes which are "do not care" at the time
-     that this runs.  */
-
-  __asm__("st %%fsr, %0"
-         : "=m" (fsr));
-
-  fsr |= FPRS_NS;
-
-  __asm__("ld %0, %%fsr"
-         : : "m" (fsr));
-}
diff --git a/gcc/config/sparc/t-crtfm b/gcc/config/sparc/t-crtfm
deleted file mode 100644 (file)
index e0adb97..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-EXTRA_PARTS += crtfastmath.o
-
-$(T)crtfastmath.o: $(srcdir)/config/sparc/crtfastmath.c $(GCC_PASSES)
-       $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) $(LIBGCC2_CFLAGS) -c -o $(T)crtfastmath.o $(srcdir)/config/sparc/crtfastmath.c
index bfbf1053157653d4be2b309db3f56ee35f6e6e5b..401287cfb064cfa6c860cb479c4592ed26b9df19 100644 (file)
@@ -1,3 +1,32 @@
+2011-07-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * config/alpha/crtfastmath.c: New file.
+       * config/i386/crtfastmath.c: New file.
+       * config/ia64/crtfastmath.c: New file.
+       * config/mips/crtfastmath.c: New file.
+       * config/sparc/crtfastmath.c: New file.
+
+       * config/t-crtfm (crtfastmath.o): Use $(srcdir) to refer to
+       crtfastmath.c.
+       Add -frandom-seed=gcc-crtfastmath.
+       * config/alpha/t-crtfm: Remove.
+       * config/i386/t-crtfm: Use $(srcdir) to refer to crtfastmath.c.
+       * config/ia64/t-ia64 (crtfastmath.o): Remove.
+
+       * config.host (alpha*-*-linux*): Replace alpha/t-crtfm by t-crtfm.
+       (alpha*-dec-osf5.1*): Likewise.
+       (alpha*-*-freebsd*): Add t-crtfm to tmake_file.
+       Add crtfastmath.o to extra_parts.
+       (i[34567]86-*-darwin*): Add i386/t-crtfm to tmake_file.
+       Add crtfastmath.o to extra_parts.
+       (x86_64-*-darwin*): Likewise.
+       (x86_64-*-mingw*): Likewise.
+       (ia64*-*-elf*): Add t-crtfm to tmake_file.
+       (ia64*-*-freebsd*): Likewise.
+       (ia64*-*-linux*): Likewise.
+       (sparc64-*-freebsd*): Add t-crtfm to tmake_file.
+       Add crtfastmath.o to extra_parts.
+
 2011-07-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * config/darwin-crt3.o: New file.
index 56ce998a62b7db61f080281c840b3de616548c4e..fba7ecd67ab75feee88b855b50a1233c68b1701d 100644 (file)
@@ -224,18 +224,20 @@ esac
 
 case ${host} in
 alpha*-*-linux*)
-       tmake_file="${tmake_file} alpha/t-crtfm"
+       tmake_file="${tmake_file} t-crtfm"
        extra_parts="$extra_parts crtfastmath.o"
        md_unwind_header=alpha/linux-unwind.h
        ;;
 alpha*-*-freebsd*)
+       tmake_file="${tmake_file} t-crtfm"
+       extra_parts="$extra_parts crtfastmath.o"
        ;;
 alpha*-*-netbsd*)
        ;;
 alpha*-*-openbsd*)
        ;;
 alpha*-dec-osf5.1*)
-       tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee alpha/t-crtfm t-slibgcc alpha/t-slibgcc-osf"
+       tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee t-crtfm t-slibgcc alpha/t-slibgcc-osf"
        case ${target_thread_file} in
          posix)
            tmake_file="${tmake_file} alpha/t-osf-pthread"
@@ -323,9 +325,12 @@ hppa[12]*-*-hpux11*)
        md_unwind_header=pa/hpux-unwind.h
        ;;
 i[34567]86-*-darwin*)
+       tmake_file="$tmake_file i386/t-crtfm"
+       extra_parts="$extra_parts crtfastmath.o"
        ;;
 x86_64-*-darwin*)
-       tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin"
+       tmake_file="t-darwin ${cpu_type}/t-darwin64 i386/t-crtfm t-slibgcc-darwin"
+       extra_parts="$extra_parts crtfastmath.o"
        ;;
 i[34567]86-*-elf*)
        ;;
@@ -398,21 +403,22 @@ i[34567]86-*-mingw*)
        md_unwind_header=i386/w32-unwind.h
        ;;
 x86_64-*-mingw*)
-       tmake_file=t-dfprules
+       tmake_file="t-dfprules i386/t-crtfm"
+       extra_parts="$extra_parts crtfastmath.o"
        ;;
 i[34567]86-*-interix3*)
        ;;
 ia64*-*-elf*)
        extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
-       tmake_file="ia64/t-ia64"
+       tmake_file="ia64/t-ia64 t-crtfm"
        ;;
 ia64*-*-freebsd*)
        extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
-       tmake_file="ia64/t-ia64"
+       tmake_file="ia64/t-ia64 t-crtfm"
        ;;
 ia64*-*-linux*)
        extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
-       tmake_file="ia64/t-ia64 t-softfp ia64/t-fprules-softfp ia64/t-softfp-compat"
+       tmake_file="ia64/t-ia64 t-crtfm t-softfp ia64/t-fprules-softfp ia64/t-softfp-compat"
        md_unwind_header=ia64/linux-unwind.h
        ;;
 ia64*-*-hpux*)
@@ -644,6 +650,8 @@ sparc64-*-elf*)
 sparc-wrs-vxworks)
        ;;
 sparc64-*-freebsd*|ultrasparc-*-freebsd*)
+       tmake_file="$tmake_file t-crtfm"
+       extra_parts=crtfastmath.o
        ;;
 sparc64-*-linux*)              # 64-bit SPARC's running GNU/Linux
        extra_parts="$extra_parts crtfastmath.o"
diff --git a/libgcc/config/alpha/crtfastmath.c b/libgcc/config/alpha/crtfastmath.c
new file mode 100644 (file)
index 0000000..677b9ed
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2001, 2009 Free Software Foundation, Inc.
+ * Contributed by Richard Henderson (rth@redhat.com)
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ * 
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Assume OSF/1 compatible interfaces.  */
+
+extern void __ieee_set_fp_control (unsigned long int);
+
+#define IEEE_MAP_DMZ  (1UL<<12)       /* Map denorm inputs to zero */
+#define IEEE_MAP_UMZ  (1UL<<13)       /* Map underflowed outputs to zero */
+
+static void __attribute__((constructor))
+set_fast_math (void)
+{
+  __ieee_set_fp_control (IEEE_MAP_DMZ | IEEE_MAP_UMZ);
+}
diff --git a/libgcc/config/alpha/t-crtfm b/libgcc/config/alpha/t-crtfm
deleted file mode 100644 (file)
index 5060c15..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# FIXME drow/20061228 - I have preserved this -frandom-seed option
-# while migrating this rule from the GCC directory, but I do not
-# know why it is necessary if no other crt file uses it.
-crtfastmath.o: $(gcc_srcdir)/config/alpha/crtfastmath.c
-       $(gcc_compile) -frandom-seed=gcc-crtfastmath -c $<
diff --git a/libgcc/config/i386/crtfastmath.c b/libgcc/config/i386/crtfastmath.c
new file mode 100644 (file)
index 0000000..7abe500
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2005, 2007, 2009, 2011 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ * 
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#define MXCSR_DAZ (1 << 6)     /* Enable denormals are zero mode */
+#define MXCSR_FTZ (1 << 15)    /* Enable flush to zero mode */
+
+#ifndef __x86_64__
+/* All 64-bit targets have SSE and DAZ;
+   only check them explicitly for 32-bit ones. */
+#include "cpuid.h"
+#endif
+
+#if !defined __x86_64__ && defined __sun__ && defined __svr4__
+#include <signal.h>
+#include <ucontext.h>
+
+static volatile sig_atomic_t sigill_caught;
+
+static void
+sigill_hdlr (int sig __attribute((unused)),
+            siginfo_t *sip __attribute__((unused)),
+            ucontext_t *ucp)
+{
+  sigill_caught = 1;
+  /* Set PC to the instruction after the faulting one to skip over it,
+     otherwise we enter an infinite loop.  3 is the size of the movaps
+     instruction.  */
+  ucp->uc_mcontext.gregs[EIP] += 3;
+  setcontext (ucp);
+}
+#endif
+
+static void __attribute__((constructor))
+#ifndef __x86_64__
+/* The i386 ABI only requires 4-byte stack alignment, so this is necessary
+   to make sure the fxsave struct gets correct alignment.
+   See PR27537 and PR28621.  */
+__attribute__ ((force_align_arg_pointer))
+#endif
+set_fast_math (void)
+{
+#ifndef __x86_64__
+  unsigned int eax, ebx, ecx, edx;
+
+  if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+    return;
+
+  if (edx & bit_SSE)
+    {
+      unsigned int mxcsr;
+  
+#if defined __sun__ && defined __svr4__
+      /* Solaris 2 before Solaris 9 4/04 cannot execute SSE instructions even
+        if the CPU supports them.  Programs receive SIGILL instead, so check
+        for that at runtime.  */
+      struct sigaction act, oact;
+
+      act.sa_handler = sigill_hdlr;
+      sigemptyset (&act.sa_mask);
+      /* Need to set SA_SIGINFO so a ucontext_t * is passed to the handler.  */
+      act.sa_flags = SA_SIGINFO;
+      sigaction (SIGILL, &act, &oact);
+
+      /* We need a single SSE instruction here so the handler can safely skip
+        over it.  */
+      __asm__ volatile ("movaps %xmm0,%xmm0");
+
+      sigaction (SIGILL, &oact, NULL);
+
+      if (sigill_caught)
+       return;
+#endif /* __sun__ && __svr4__ */
+
+      mxcsr = __builtin_ia32_stmxcsr () | MXCSR_FTZ;
+
+      if (edx & bit_FXSAVE)
+       {
+         /* Check if DAZ is available.  */
+         struct
+           {
+             unsigned short int cwd;
+             unsigned short int swd;
+             unsigned short int twd;
+             unsigned short int fop;
+             long int fip;
+             long int fcs;
+             long int foo;
+             long int fos;
+             long int mxcsr;
+             long int mxcsr_mask;
+             long int st_space[32];
+             long int xmm_space[32];
+             long int padding[56];
+           } __attribute__ ((aligned (16))) fxsave;
+
+         __builtin_memset (&fxsave, 0, sizeof (fxsave));
+
+         asm volatile ("fxsave %0" : "=m" (fxsave) : "m" (fxsave));
+
+         if (fxsave.mxcsr_mask & MXCSR_DAZ)
+           mxcsr |= MXCSR_DAZ;
+       }
+
+      __builtin_ia32_ldmxcsr (mxcsr);
+    }
+#else
+  unsigned int mxcsr = __builtin_ia32_stmxcsr ();
+  mxcsr |= MXCSR_DAZ | MXCSR_FTZ;
+  __builtin_ia32_ldmxcsr (mxcsr);
+#endif
+}
index f71f99a7123cab69293db40d20e340a76cfb53df..46ce70bbb21f9794c29ba7a03661b3afaa3ba300 100644 (file)
@@ -1,4 +1,4 @@
 # This is an endfile, Use -minline-all-stringops to ensure
 # that __builtin_memset doesn't refer to the lib function memset().
-crtfastmath.o: $(gcc_srcdir)/config/i386/crtfastmath.c
+crtfastmath.o: $(srcdir)/config/i386/crtfastmath.c
        $(gcc_compile) -msse -minline-all-stringops -c $<
diff --git a/libgcc/config/ia64/crtfastmath.c b/libgcc/config/ia64/crtfastmath.c
new file mode 100644 (file)
index 0000000..0decd2a
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001, 2005, 2009 Free Software Foundation, Inc.
+   Contributed by David Mosberger <davidm@hpl.hp.com>.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We could call fesetenv() here but that would create a confusing
+   dependency on libm (since that is where fesetenv() gets defined.
+   To avoid this, just do everything locally.  */
+#define FE_NONIEEE_ENV 0x0009a04d0270037f
+
+static void __attribute__((constructor))
+__ia64_set_fast_math (void)
+{
+  __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r"(FE_NONIEEE_ENV));
+}
index d9c7566cfb0331a25ba950636447c2cd3780822c..3ec5fc5db084c6d8076f05b2758dfd100e5c509f 100644 (file)
@@ -13,6 +13,3 @@ crtbeginS.o: $(gcc_srcdir)/config/ia64/crtbegin.asm
 crtendS.o: $(gcc_srcdir)/config/ia64/crtend.asm
        $(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
                -o $@ -DSHARED $(gcc_srcdir)/config/ia64/crtend.asm
-
-crtfastmath.o: $(gcc_srcdir)/config/ia64/crtfastmath.c
-       $(gcc_compile) -c $(gcc_srcdir)/config/ia64/crtfastmath.c
diff --git a/libgcc/config/mips/crtfastmath.c b/libgcc/config/mips/crtfastmath.c
new file mode 100644 (file)
index 0000000..a9586b0
--- /dev/null
@@ -0,0 +1,53 @@
+/* Copyright (C) 2010 Free Software Foundation, Inc. 
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License
+   and a copy of the GCC Runtime Library Exception along with this
+   program; see the files COPYING3 and COPYING.RUNTIME respectively.
+   If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef __mips_hard_float
+
+/* Flush denormalized numbers to zero.  */
+#define _FPU_FLUSH_TZ   0x1000000
+
+/* Rounding control.  */
+#define _FPU_RC_NEAREST 0x0     /* RECOMMENDED */
+#define _FPU_RC_ZERO    0x1
+#define _FPU_RC_UP      0x2
+#define _FPU_RC_DOWN    0x3
+
+/* Enable interrupts for IEEE exceptions.  */
+#define _FPU_IEEE     0x00000F80
+
+/* Macros for accessing the hardware control word.  */
+#define _FPU_GETCW(cw) __asm__ ("cfc1 %0,$31" : "=r" (cw))
+#define _FPU_SETCW(cw) __asm__ ("ctc1 %0,$31" : : "r" (cw))
+
+static void __attribute__((constructor))
+set_fast_math (void)
+{
+  unsigned int fcr;
+
+  /* Flush to zero, round to nearest, IEEE exceptions disabled.  */
+  fcr = _FPU_FLUSH_TZ | _FPU_RC_NEAREST;
+
+  _FPU_SETCW(fcr);
+}
+
+#endif /* __mips_hard_float */
diff --git a/libgcc/config/sparc/crtfastmath.c b/libgcc/config/sparc/crtfastmath.c
new file mode 100644 (file)
index 0000000..04727ec
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2001, 2009 Free Software Foundation, Inc.
+ * Contributed by David S. Miller (davem@redhat.com)
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ * 
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#define FPRS_NS                (1 << 22)       /* Non-Standard fpu results */
+
+static void __attribute__((constructor))
+set_fast_math (void)
+{
+  unsigned int fsr;
+
+  /* This works for the 64-bit case because, even if 32-bit ld/st of
+     the fsr register modified the upper 32-bit, the only thing up there
+     are the 3 other condition codes which are "do not care" at the time
+     that this runs.  */
+
+  __asm__("st %%fsr, %0"
+         : "=m" (fsr));
+
+  fsr |= FPRS_NS;
+
+  __asm__("ld %0, %%fsr"
+         : : "m" (fsr));
+}
index 6b9d84cf768a6f881244afe6068b1dd43bb17ebe..1d3b8ecfc3587b6dcef45c31b857b0360ceefa14 100644 (file)
@@ -1,2 +1,5 @@
-crtfastmath.o: $(gcc_srcdir)/config/$(cpu_type)/crtfastmath.c
-       $(gcc_compile) -c $<
+# -frandom-seed is necessary to avoid bootstrap comparison failures due to
+# changing mangled names of the constructor on Tru64 Unix, but harmless
+# otherwise.
+crtfastmath.o: $(srcdir)/config/$(cpu_type)/crtfastmath.c
+       $(gcc_compile) -frandom-seed=gcc-crtfastmath -c $<