From 8b54e868330944efffb386910f9315a8db8753ce Mon Sep 17 00:00:00 2001 From: David Mosberger Date: Fri, 22 Jun 2001 21:35:25 +0000 Subject: [PATCH] crtfastmath.c: New file. * config/ia64/crtfastmath.c: New file. * config/ia64/t-ia64 (EXTRA_PARTS): Include it. * config/ia64/linux.h (ENDFILE_SPEC): New. From-SVN: r43515 --- gcc/ChangeLog | 6 ++++++ gcc/config/ia64/crtfastmath.c | 37 +++++++++++++++++++++++++++++++++++ gcc/config/ia64/linux.h | 6 ++++++ gcc/config/ia64/t-ia64 | 4 +++- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 gcc/config/ia64/crtfastmath.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 800d208b708..1b6a6892ac1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-06-22 David Mosberger + + * config/ia64/crtfastmath.c: New file. + * config/ia64/t-ia64 (EXTRA_PARTS): Include it. + * config/ia64/linux.h (ENDFILE_SPEC): New. + 2001-06-22 Toshiyasu Morita * config/h8300/h8300.c (asm_file_start): Remove reference to diff --git a/gcc/config/ia64/crtfastmath.c b/gcc/config/ia64/crtfastmath.c new file mode 100644 index 00000000000..aa0d12021c7 --- /dev/null +++ b/gcc/config/ia64/crtfastmath.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) */ + +/* 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/ia64/linux.h b/gcc/config/ia64/linux.h index 2bb71eb2c21..70a5ab092c1 100644 --- a/gcc/config/ia64/linux.h +++ b/gcc/config/ia64/linux.h @@ -16,6 +16,12 @@ #undef ASM_SPEC #define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic}" +/* Similar to standard Linux, but adding -ffast-math support. */ +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" + /* Define this for shared library support because it isn't in the main linux.h file. */ diff --git a/gcc/config/ia64/t-ia64 b/gcc/config/ia64/t-ia64 index f89e80ba9e2..32e507d6db2 100644 --- a/gcc/config/ia64/t-ia64 +++ b/gcc/config/ia64/t-ia64 @@ -20,7 +20,7 @@ SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64.ver # For svr4 we build crtbegin.o and crtend.o which serve to add begin and # end labels to the .ctors and .dtors section when we link using gcc. -EXTRA_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o +EXTRA_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o # Effectively disable the crtbegin/end rules using crtstuff.c T = disable @@ -34,6 +34,8 @@ crtbeginS.o: $(srcdir)/config/ia64/crtbegin.asm $(GCC_PASSES) $(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp $(srcdir)/config/ia64/crtbegin.asm crtendS.o: $(srcdir)/config/ia64/crtend.asm $(GCC_PASSES) $(GCC_FOR_TARGET) -DSHARED -c -o crtendS.o -x assembler-with-cpp $(srcdir)/config/ia64/crtend.asm +crtfastmath.o: $(srcdir)/config/ia64/crtfastmath.c $(GCC_PASSES) + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -c -o crtfastmath.o $(srcdir)/config/ia64/crtfastmath.c EXTRA_HEADERS = $(srcdir)/config/ia64/ia64intrin.h LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c