From 27735edb45fb125258ca38ca12ebab88deb9833b Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 16 May 2007 19:07:07 +0200 Subject: [PATCH] README: Update for new files. * soft-fp/README: Update for new files. * soft-fp/floattisf.c: New file. * soft-fp/floattidf.c: New file. * soft-fp/floattitf.c: New file. * soft-fp/floatuntisf.c: New file. * soft-fp/floatuntidf.c: New file. * soft-fp/floatuntitf.c: New file. * soft-fp/fixsfti.c: New file. * soft-fp/fixdfti.c: New file. * soft-fp/fixtfti.c: New file. * soft-fp/fixunssfti.c: New file. * soft-fp/fixunsdfti.c: New file. * soft-fp/fixunstfti.c: New file. * soft-fp/extendxftf.c: New file. * soft-fp/trunctfxf.c: New file. * libgcc-std.ver (__extendxftf2): Added to GCC_4.3.0 section. (__trunctfxf2): Ditto. * config/i386/libgcc-x86_64-glibc.ver (__addtf3, __divtf3, __eqtf2, __extenddftf2, __extendsftf2, __fixtfdi, __fixtfsi, __fixtfti, __fixunstfdi, __fixunstfsi, __fixunstfti, __floatditf, __floatsitf, __floattitf, __floatunditf, __floatunsitf, __floatuntitf, __getf2, __letf2, __multf3, __negtf2, __subtf3, __trunctfdf2, __trunctfsf2, __unordtf2): Exclude and add to GCC_4.3.0 section for x86_64 targets. * config/i386/t-fprules-softfp64: New file. * config/i386/sfp-machine.h: New file. * config.gcc (x86_64-*-linux*, x86_64-*-kfreebsd*-gnu, x86_64-*-knetbsd*-gnu): Add i386/t-fprules-softfp64 and soft-fp/t-softfp to tmake_file. (i[34567]86-*-linux*, i[34567]86-*-kfreebsd*-gnu, i[34567]86-*-knetbsd*-gnu): Ditto for --enable-targets=all. * config/i386/t-linux64 (softfp_wrap_start): New. (softfp_wrap_end): New. * config/i386/i386.c (ix86_scalar_mode_supported): TFmode is supported for TARGET_64BIT. testsuite/ChangeLog: * gcc.dg/torture/fp-int-convert-float128.c: Do not xfail for i?86-*-* and x86_64-*-* targets. * gcc.dg/torture/fp-int-convert-float128-timode.c: Ditto. From-SVN: r124775 --- gcc/ChangeLog | 41 +++++++++++++++ gcc/config.gcc | 4 +- gcc/config/i386/i386.c | 2 + gcc/config/i386/libgcc-x86_64-glibc.ver | 61 ++++++++++++++++++++++ gcc/config/i386/t-linux64 | 3 ++ gcc/config/soft-fp/README | 9 ++-- gcc/config/soft-fp/extendxftf2.c | 53 +++++++++++++++++++ gcc/config/soft-fp/fixdfti.c | 45 ++++++++++++++++ gcc/config/soft-fp/fixsfti.c | 45 ++++++++++++++++ gcc/config/soft-fp/fixtfti.c | 45 ++++++++++++++++ gcc/config/soft-fp/fixunsdfti.c | 45 ++++++++++++++++ gcc/config/soft-fp/fixunssfti.c | 45 ++++++++++++++++ gcc/config/soft-fp/fixunstfti.c | 45 ++++++++++++++++ gcc/config/soft-fp/floattidf.c | 45 ++++++++++++++++ gcc/config/soft-fp/floattisf.c | 45 ++++++++++++++++ gcc/config/soft-fp/floattitf.c | 45 ++++++++++++++++ gcc/config/soft-fp/floatuntidf.c | 45 ++++++++++++++++ gcc/config/soft-fp/floatuntisf.c | 45 ++++++++++++++++ gcc/config/soft-fp/floatuntitf.c | 45 ++++++++++++++++ gcc/config/soft-fp/trunctfxf2.c | 53 +++++++++++++++++++ gcc/libgcc-std.ver | 2 + gcc/testsuite/ChangeLog | 6 +++ .../torture/fp-int-convert-float128-timode.c | 1 - .../gcc.dg/torture/fp-int-convert-float128.c | 1 - 24 files changed, 768 insertions(+), 8 deletions(-) create mode 100644 gcc/config/soft-fp/extendxftf2.c create mode 100644 gcc/config/soft-fp/fixdfti.c create mode 100644 gcc/config/soft-fp/fixsfti.c create mode 100644 gcc/config/soft-fp/fixtfti.c create mode 100644 gcc/config/soft-fp/fixunsdfti.c create mode 100644 gcc/config/soft-fp/fixunssfti.c create mode 100644 gcc/config/soft-fp/fixunstfti.c create mode 100644 gcc/config/soft-fp/floattidf.c create mode 100644 gcc/config/soft-fp/floattisf.c create mode 100644 gcc/config/soft-fp/floattitf.c create mode 100644 gcc/config/soft-fp/floatuntidf.c create mode 100644 gcc/config/soft-fp/floatuntisf.c create mode 100644 gcc/config/soft-fp/floatuntitf.c create mode 100644 gcc/config/soft-fp/trunctfxf2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6285583..9c6808c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,44 @@ +2007-05-16 Uros Bizjak + + * soft-fp/README: Update for new files. + * soft-fp/floattisf.c: New file. + * soft-fp/floattidf.c: New file. + * soft-fp/floattitf.c: New file. + * soft-fp/floatuntisf.c: New file. + * soft-fp/floatuntidf.c: New file. + * soft-fp/floatuntitf.c: New file. + * soft-fp/fixsfti.c: New file. + * soft-fp/fixdfti.c: New file. + * soft-fp/fixtfti.c: New file. + * soft-fp/fixunssfti.c: New file. + * soft-fp/fixunsdfti.c: New file. + * soft-fp/fixunstfti.c: New file. + * soft-fp/extendxftf.c: New file. + * soft-fp/trunctfxf.c: New file. + + * libgcc-std.ver (__extendxftf2): Added to GCC_4.3.0 section. + (__trunctfxf2): Ditto. + + * config/i386/libgcc-x86_64-glibc.ver (__addtf3, __divtf3, __eqtf2, + __extenddftf2, __extendsftf2, __fixtfdi, __fixtfsi, __fixtfti, + __fixunstfdi, __fixunstfsi, __fixunstfti, __floatditf, __floatsitf, + __floattitf, __floatunditf, __floatunsitf, __floatuntitf, __getf2, + __letf2, __multf3, __negtf2, __subtf3, __trunctfdf2, __trunctfsf2, + __unordtf2): Exclude and add to GCC_4.3.0 section for x86_64 targets. + + * config/i386/t-fprules-softfp64: New file. + * config/i386/sfp-machine.h: New file. + * config.gcc (x86_64-*-linux*, x86_64-*-kfreebsd*-gnu, + x86_64-*-knetbsd*-gnu): Add i386/t-fprules-softfp64 + and soft-fp/t-softfp to tmake_file. + (i[34567]86-*-linux*, i[34567]86-*-kfreebsd*-gnu, + i[34567]86-*-knetbsd*-gnu): Ditto for --enable-targets=all. + + * config/i386/t-linux64 (softfp_wrap_start): New. + (softfp_wrap_end): New. + * config/i386/i386.c (ix86_scalar_mode_supported): TFmode is + supported for TARGET_64BIT. + 2007-05-16 Rafael Avila de Espindola * c-common.c (c_common_signed_or_unsigned_type): Emulate diff --git a/gcc/config.gcc b/gcc/config.gcc index a26f3dd..bf1d0b1 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1127,7 +1127,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu) if test x$enable_targets = xall; then tm_file="${tm_file} i386/x86-64.h i386/linux64.h" tm_defines="${tm_defines} TARGET_BI_ARCH=1" - tmake_file="${tmake_file} i386/t-linux64" + tmake_file="${tmake_file} i386/t-linux64 i386/t-fprules-softfp64 soft-fp/t-softfp" need_64bit_hwint=yes # FIXME: -m64 for i[34567]86-*-* should be allowed just # like -m32 for x86_64-*-*. @@ -1159,7 +1159,7 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu) x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h" ;; x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;; esac - tmake_file="${tmake_file} i386/t-linux64 i386/t-crtpc i386/t-crtfm t-dfprules" + tmake_file="${tmake_file} i386/t-linux64 i386/t-crtpc i386/t-crtfm i386/t-fprules-softfp64 soft-fp/t-softfp t-dfprules" ;; i[34567]86-*-gnu*) ;; diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index f5bf454..3c9445a 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -21164,6 +21164,8 @@ ix86_scalar_mode_supported_p (enum machine_mode mode) { if (DECIMAL_FLOAT_MODE_P (mode)) return true; + else if (mode == TFmode) + return TARGET_64BIT; else return default_scalar_mode_supported_p (mode); } diff --git a/gcc/config/i386/libgcc-x86_64-glibc.ver b/gcc/config/i386/libgcc-x86_64-glibc.ver index 2ea321f..fa5d1a6 100644 --- a/gcc/config/i386/libgcc-x86_64-glibc.ver +++ b/gcc/config/i386/libgcc-x86_64-glibc.ver @@ -23,3 +23,64 @@ GLIBC_2.0 { __register_frame_info_table } %endif + +% 128 bit long double support was introduced with GCC 4.3.0. +% These lines make the symbols to get a @@GCC_4.3.0 attached. + +%ifdef __x86_64__ +%exclude { + __addtf3 + __divtf3 + __eqtf2 + __extenddftf2 + __extendsftf2 + __fixtfdi + __fixtfsi + __fixtfti + __fixunstfdi + __fixunstfsi + __fixunstfti + __floatditf + __floatsitf + __floattitf + __floatunditf + __floatunsitf + __floatuntitf + __getf2 + __letf2 + __multf3 + __negtf2 + __subtf3 + __trunctfdf2 + __trunctfsf2 + __unordtf2 +} + +GCC_4.3.0 { + __addtf3 + __divtf3 + __eqtf2 + __extenddftf2 + __extendsftf2 + __fixtfdi + __fixtfsi + __fixtfti + __fixunstfdi + __fixunstfsi + __fixunstfti + __floatditf + __floatsitf + __floattitf + __floatunditf + __floatunsitf + __floatuntitf + __getf2 + __letf2 + __multf3 + __negtf2 + __subtf3 + __trunctfdf2 + __trunctfsf2 + __unordtf2 +} +%endif diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64 index f875126..7aa1b81 100644 --- a/gcc/config/i386/t-linux64 +++ b/gcc/config/i386/t-linux64 @@ -15,6 +15,9 @@ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o \ crtbeginT.o crtprec32.o crtprec64.o crtprec80.o \ crtfastmath.o +softfp_wrap_start := '\#ifdef __x86_64__' +softfp_wrap_end := '\#endif' + # The pushl in CTOR initialization interferes with frame pointer elimination. # crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables, # because then __FRAME_END__ might not be the last thing in .eh_frame diff --git a/gcc/config/soft-fp/README b/gcc/config/soft-fp/README index 870025c..ea58753 100644 --- a/gcc/config/soft-fp/README +++ b/gcc/config/soft-fp/README @@ -1,4 +1,5 @@ -Except for t-softfp, the files in this directory are part of the GNU C -Library, not part of GCC. As described at -, changes should be made to -the GNU C Library and the changed files then imported into GCC. +Except for t-softfp, conversions involving TImode and conversions involving +XFmode, the files in this directory are part of the GNU C Library, not part +of GCC. As described at , changes +should be made to the GNU C Library and the changed files then imported +into GCC. diff --git a/gcc/config/soft-fp/extendxftf2.c b/gcc/config/soft-fp/extendxftf2.c new file mode 100644 index 0000000..af29a2a --- /dev/null +++ b/gcc/config/soft-fp/extendxftf2.c @@ -0,0 +1,53 @@ +/* Software floating-point emulation. + Return a converted to IEEE quad + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "extended.h" +#include "quad.h" + +TFtype __extendxftf2(XFtype a) +{ + FP_DECL_EX; + FP_DECL_E(A); + FP_DECL_Q(R); + TFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_RAW_E(A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_EXTEND(Q,E,4,4,R,A); +#else + FP_EXTEND(Q,E,2,2,R,A); +#endif + FP_PACK_RAW_Q(r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/config/soft-fp/fixdfti.c b/gcc/config/soft-fp/fixdfti.c new file mode 100644 index 0000000..6d06514 --- /dev/null +++ b/gcc/config/soft-fp/fixdfti.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE double to 128bit signed integer + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "double.h" + +TItype __fixdfti(TFtype a) +{ + FP_DECL_EX; + FP_DECL_D(A); + UTItype r; + + FP_UNPACK_RAW_D(A, a); + FP_TO_INT_D(r, A, TI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/config/soft-fp/fixsfti.c b/gcc/config/soft-fp/fixsfti.c new file mode 100644 index 0000000..779628e --- /dev/null +++ b/gcc/config/soft-fp/fixsfti.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE single to 128bit signed integer + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "single.h" + +TItype __fixsfti(SFtype a) +{ + FP_DECL_EX; + FP_DECL_S(A); + UTItype r; + + FP_UNPACK_RAW_S(A, a); + FP_TO_INT_S(r, A, TI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/config/soft-fp/fixtfti.c b/gcc/config/soft-fp/fixtfti.c new file mode 100644 index 0000000..8311ea5 --- /dev/null +++ b/gcc/config/soft-fp/fixtfti.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE quad to 128bit signed integer + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "quad.h" + +TItype __fixtfti(TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q(A); + UTItype r; + + FP_UNPACK_RAW_Q(A, a); + FP_TO_INT_Q(r, A, TI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/config/soft-fp/fixunsdfti.c b/gcc/config/soft-fp/fixunsdfti.c new file mode 100644 index 0000000..48c41d4 --- /dev/null +++ b/gcc/config/soft-fp/fixunsdfti.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE double to 128bit unsigned integer + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "double.h" + +UTItype __fixunsdfti(DFtype a) +{ + FP_DECL_EX; + FP_DECL_D(A); + UTItype r; + + FP_UNPACK_RAW_D(A, a); + FP_TO_INT_D(r, A, TI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/config/soft-fp/fixunssfti.c b/gcc/config/soft-fp/fixunssfti.c new file mode 100644 index 0000000..89bcedb --- /dev/null +++ b/gcc/config/soft-fp/fixunssfti.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE single to 128bit unsigned integer + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "single.h" + +UTItype __fixunssfti(SFtype a) +{ + FP_DECL_EX; + FP_DECL_S(A); + UTItype r; + + FP_UNPACK_RAW_S(A, a); + FP_TO_INT_S(r, A, TI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/config/soft-fp/fixunstfti.c b/gcc/config/soft-fp/fixunstfti.c new file mode 100644 index 0000000..f62bd50 --- /dev/null +++ b/gcc/config/soft-fp/fixunstfti.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE quad to 128bit unsigned integer + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "quad.h" + +UTItype __fixunstfti(TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q(A); + UTItype r; + + FP_UNPACK_RAW_Q(A, a); + FP_TO_INT_Q(r, A, TI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/config/soft-fp/floattidf.c b/gcc/config/soft-fp/floattidf.c new file mode 100644 index 0000000..14b6ea3 --- /dev/null +++ b/gcc/config/soft-fp/floattidf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 128bit signed integer to IEEE double + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "double.h" + +DFtype __floattidf(TItype i) +{ + FP_DECL_EX; + FP_DECL_D(A); + DFtype a; + + FP_FROM_INT_D(A, i, TI_BITS, UTItype); + FP_PACK_RAW_D(a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/gcc/config/soft-fp/floattisf.c b/gcc/config/soft-fp/floattisf.c new file mode 100644 index 0000000..475cafa --- /dev/null +++ b/gcc/config/soft-fp/floattisf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 128bit signed integer to IEEE single + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "single.h" + +SFtype __floattisf(TItype i) +{ + FP_DECL_EX; + FP_DECL_S(A); + SFtype a; + + FP_FROM_INT_S(A, i, TI_BITS, UTItype); + FP_PACK_RAW_S(a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/gcc/config/soft-fp/floattitf.c b/gcc/config/soft-fp/floattitf.c new file mode 100644 index 0000000..12bbb27 --- /dev/null +++ b/gcc/config/soft-fp/floattitf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 128bit signed integer to IEEE quad + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype __floattitf(TItype i) +{ + FP_DECL_EX; + FP_DECL_Q(A); + TFtype a; + + FP_FROM_INT_Q(A, i, TI_BITS, UTItype); + FP_PACK_RAW_Q(a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/gcc/config/soft-fp/floatuntidf.c b/gcc/config/soft-fp/floatuntidf.c new file mode 100644 index 0000000..db1fe1a --- /dev/null +++ b/gcc/config/soft-fp/floatuntidf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 128bit unsigned integer to IEEE double + Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "double.h" + +DFtype __floatuntidf(UTItype i) +{ + FP_DECL_EX; + FP_DECL_D(A); + DFtype a; + + FP_FROM_INT_D(A, i, TI_BITS, UTItype); + FP_PACK_RAW_D(a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/gcc/config/soft-fp/floatuntisf.c b/gcc/config/soft-fp/floatuntisf.c new file mode 100644 index 0000000..11ad643 --- /dev/null +++ b/gcc/config/soft-fp/floatuntisf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 128bit unsigned integer to IEEE single + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "single.h" + +SFtype __floatundisf(UTItype i) +{ + FP_DECL_EX; + FP_DECL_S(A); + SFtype a; + + FP_FROM_INT_S(A, i, TI_BITS, UTItype); + FP_PACK_RAW_S(a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/gcc/config/soft-fp/floatuntitf.c b/gcc/config/soft-fp/floatuntitf.c new file mode 100644 index 0000000..8d66901 --- /dev/null +++ b/gcc/config/soft-fp/floatuntitf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 128bit unsigned integer to IEEE quad + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype __floatuntitf(UTItype i) +{ + FP_DECL_EX; + FP_DECL_Q(A); + TFtype a; + + FP_FROM_INT_Q(A, i, TI_BITS, UTItype); + FP_PACK_RAW_Q(a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/gcc/config/soft-fp/trunctfxf2.c b/gcc/config/soft-fp/trunctfxf2.c new file mode 100644 index 0000000..50d60bc --- /dev/null +++ b/gcc/config/soft-fp/trunctfxf2.c @@ -0,0 +1,53 @@ +/* Software floating-point emulation. + Truncate IEEE quad into IEEE extended + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + In addition to the permissions in the GNU Lesser 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 Lesser 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.) + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "soft-fp.h" +#include "extended.h" +#include "quad.h" + +XFtype __trunctfxf2(TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q(A); + FP_DECL_E(R); + XFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_Q(A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_TRUNC(E,Q,4,4,R,A); +#else + FP_TRUNC(E,Q,2,2,R,A); +#endif + FP_PACK_SEMIRAW_E(r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/gcc/libgcc-std.ver b/gcc/libgcc-std.ver index c89c212..3dcca01 100644 --- a/gcc/libgcc-std.ver +++ b/gcc/libgcc-std.ver @@ -283,4 +283,6 @@ GCC_4.3.0 { __emutls_get_address __emutls_register_common __ffssi2 + __extendxftf2 + __trunctfxf2 } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ee74a8f..8d4c6ca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-05-16 Uros Bizjak + + * gcc.dg/torture/fp-int-convert-float128.c: Do not xfail for i?86-*-* + and x86_64-*-* targets. + * gcc.dg/torture/fp-int-convert-float128-timode.c: Ditto. + 2007-05-16 Paul Thomas PR fortran/18769 diff --git a/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c b/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c index 7693d17..965e728 100644 --- a/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c +++ b/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128-timode.c @@ -1,7 +1,6 @@ /* Test floating-point conversions. __float128 type with TImode. */ /* Origin: Joseph Myers */ /* { dg-do run { target { ia64-*-* || { { i?86-*-* x86_64-*-*} && lp64 } } } } */ -/* { dg-xfail-if "" { i?86-*-* x86_64-*-* } { "*" } { "" } } */ /* { dg-xfail-if "" { ia64-*-linux* } { "*" } { "" } } */ /* { dg-options "" } */ diff --git a/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c b/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c index 0e774e0..24decb8 100644 --- a/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c +++ b/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c @@ -1,7 +1,6 @@ /* Test floating-point conversions. __float128 type. */ /* Origin: Joseph Myers */ /* { dg-do run { target { ia64-*-* || { { i?86-*-* x86_64-*-*} && lp64 } } } } */ -/* { dg-xfail-if "" { i?86-*-* x86_64-*-* } { "*" } { "" } } */ /* { dg-options "" } */ #include "fp-int-convert.h" -- 2.7.4