crtfastmath.c: New file.
authorDavid Mosberger <davidm@hpl.hp.com>
Fri, 22 Jun 2001 21:35:25 +0000 (21:35 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 22 Jun 2001 21:35:25 +0000 (14:35 -0700)
        * 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
gcc/config/ia64/crtfastmath.c [new file with mode: 0644]
gcc/config/ia64/linux.h
gcc/config/ia64/t-ia64

index 800d208b70853fb506afd096bf0e9fcfb86c9727..1b6a6892ac1dbc8518bba43591bae751b17ed736 100644 (file)
@@ -1,3 +1,9 @@
+2001-06-22  David Mosberger  <davidm@hpl.hp.com>
+
+       * 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  <toshiyasu.morita@hsa.hitachi.com>
 
        * 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 (file)
index 0000000..aa0d120
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by David Mosberger <davidm@hpl.hp.com>.
+
+   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));
+}
index 2bb71eb2c2195430c9c10b1fc43024d6c48ced53..70a5ab092c14b93d015ba0fdd911dfb476fc80ff 100644 (file)
 #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.  */
 
index f89e80ba9e24bfca3a56a483ed7e3ed7fa19da08..32e507d6db2d16d25cfc4f79acfb5e95c164c2ba 100644 (file)
@@ -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