From: Rainer Orth Date: Wed, 13 Jul 2011 17:33:38 +0000 (+0000) Subject: crtfastmath.c: Move to ../libgcc/config/alpha. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=35d8090d78a398e73813e3c752e0468e69c96750;p=gcc.git crtfastmath.c: Move to ../libgcc/config/alpha. 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 522258417ac..8f83ff3ecb5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,30 @@ +2011-07-13 Rainer Orth + + * 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 * config/darwin-crt2.c: Move to ../libgcc/config/rs6000. diff --git a/gcc/config.gcc b/gcc/config.gcc index decd6ab8be8..77424f2df51 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -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 index 677b9edfa60..00000000000 --- a/gcc/config/alpha/crtfastmath.c +++ /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 - * . - */ - -/* 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 index b4103834aca..00000000000 --- a/gcc/config/alpha/t-crtfm +++ /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 index 7abe500e981..00000000000 --- a/gcc/config/i386/crtfastmath.c +++ /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 - * . - */ - -#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 -#include - -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 index 4fa27e91ca5..00000000000 --- a/gcc/config/i386/t-crtfm +++ /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 index 0decd2a3f9c..00000000000 --- a/gcc/config/ia64/crtfastmath.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2001, 2005, 2009 Free Software Foundation, Inc. - Contributed by David Mosberger . - - 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 - . */ - -/* 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 index a9586b0a797..00000000000 --- a/gcc/config/mips/crtfastmath.c +++ /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 . */ - -#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 index 04727ec945b..00000000000 --- a/gcc/config/sparc/crtfastmath.c +++ /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 - * . - */ - -#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 index e0adb97bd3b..00000000000 --- a/gcc/config/sparc/t-crtfm +++ /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 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index bfbf1053157..401287cfb06 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,32 @@ +2011-07-13 Rainer Orth + + * 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 * config/darwin-crt3.o: New file. diff --git a/libgcc/config.host b/libgcc/config.host index 56ce998a62b..fba7ecd67ab 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -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 index 00000000000..677b9edfa60 --- /dev/null +++ b/libgcc/config/alpha/crtfastmath.c @@ -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 + * . + */ + +/* 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 index 5060c156451..00000000000 --- a/libgcc/config/alpha/t-crtfm +++ /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 index 00000000000..7abe500e981 --- /dev/null +++ b/libgcc/config/i386/crtfastmath.c @@ -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 + * . + */ + +#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 +#include + +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/libgcc/config/i386/t-crtfm b/libgcc/config/i386/t-crtfm index f71f99a7123..46ce70bbb21 100644 --- a/libgcc/config/i386/t-crtfm +++ b/libgcc/config/i386/t-crtfm @@ -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 index 00000000000..0decd2a3f9c --- /dev/null +++ b/libgcc/config/ia64/crtfastmath.c @@ -0,0 +1,34 @@ +/* Copyright (C) 2001, 2005, 2009 Free Software Foundation, Inc. + Contributed by David Mosberger . + + 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 + . */ + +/* 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/libgcc/config/ia64/t-ia64 b/libgcc/config/ia64/t-ia64 index d9c7566cfb0..3ec5fc5db08 100644 --- a/libgcc/config/ia64/t-ia64 +++ b/libgcc/config/ia64/t-ia64 @@ -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 index 00000000000..a9586b0a797 --- /dev/null +++ b/libgcc/config/mips/crtfastmath.c @@ -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 . */ + +#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 index 00000000000..04727ec945b --- /dev/null +++ b/libgcc/config/sparc/crtfastmath.c @@ -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 + * . + */ + +#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/libgcc/config/t-crtfm b/libgcc/config/t-crtfm index 6b9d84cf768..1d3b8ecfc35 100644 --- a/libgcc/config/t-crtfm +++ b/libgcc/config/t-crtfm @@ -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 $<