about summary refs log tree commit diff
path: root/soft-fp
diff options
context:
space:
mode:
Diffstat (limited to 'soft-fp')
-rw-r--r--soft-fp/Makefile13
-rw-r--r--soft-fp/adddf3.c25
-rw-r--r--soft-fp/addsf3.c25
-rw-r--r--soft-fp/addtf3.c25
-rw-r--r--soft-fp/divdf3.c19
-rw-r--r--soft-fp/divsf3.c19
-rw-r--r--soft-fp/divtf3.c19
-rw-r--r--soft-fp/double.h77
-rw-r--r--soft-fp/eqdf2.c17
-rw-r--r--soft-fp/eqsf2.c17
-rw-r--r--soft-fp/eqtf2.c17
-rw-r--r--soft-fp/extenddftf2.c27
-rw-r--r--soft-fp/extended.h77
-rw-r--r--soft-fp/extendsfdf2.c27
-rw-r--r--soft-fp/extendsftf2.c27
-rw-r--r--soft-fp/fixdfdi.c23
-rw-r--r--soft-fp/fixdfsi.c23
-rw-r--r--soft-fp/fixsfdi.c23
-rw-r--r--soft-fp/fixsfsi.c23
-rw-r--r--soft-fp/fixtfdi.c23
-rw-r--r--soft-fp/fixtfsi.c23
-rw-r--r--soft-fp/fixunsdfdi.c21
-rw-r--r--soft-fp/fixunsdfsi.c21
-rw-r--r--soft-fp/fixunssfdi.c21
-rw-r--r--soft-fp/fixunssfsi.c21
-rw-r--r--soft-fp/fixunstfdi.c21
-rw-r--r--soft-fp/fixunstfsi.c21
-rw-r--r--soft-fp/floatdidf.c23
-rw-r--r--soft-fp/floatdisf.c23
-rw-r--r--soft-fp/floatditf.c23
-rw-r--r--soft-fp/floatsidf.c23
-rw-r--r--soft-fp/floatsisf.c23
-rw-r--r--soft-fp/floatsitf.c23
-rw-r--r--soft-fp/floatundidf.c47
-rw-r--r--soft-fp/floatundisf.c47
-rw-r--r--soft-fp/floatunditf.c47
-rw-r--r--soft-fp/floatunsidf.c47
-rw-r--r--soft-fp/floatunsisf.c47
-rw-r--r--soft-fp/floatunsitf.c47
-rw-r--r--soft-fp/gedf2.c17
-rw-r--r--soft-fp/gesf2.c17
-rw-r--r--soft-fp/getf2.c17
-rw-r--r--soft-fp/ledf2.c17
-rw-r--r--soft-fp/lesf2.c17
-rw-r--r--soft-fp/letf2.c17
-rw-r--r--soft-fp/muldf3.c19
-rw-r--r--soft-fp/mulsf3.c19
-rw-r--r--soft-fp/multf3.c19
-rw-r--r--soft-fp/negdf2.c19
-rw-r--r--soft-fp/negsf2.c19
-rw-r--r--soft-fp/negtf2.c19
-rw-r--r--soft-fp/op-1.h38
-rw-r--r--soft-fp/op-2.h169
-rw-r--r--soft-fp/op-4.h136
-rw-r--r--soft-fp/op-8.h18
-rw-r--r--soft-fp/op-common.h1111
-rw-r--r--soft-fp/quad.h77
-rw-r--r--soft-fp/single.h53
-rw-r--r--soft-fp/soft-fp.h37
-rw-r--r--soft-fp/sqrtdf2.c19
-rw-r--r--soft-fp/sqrtsf2.c19
-rw-r--r--soft-fp/sqrttf2.c19
-rw-r--r--soft-fp/subdf3.c25
-rw-r--r--soft-fp/subsf3.c25
-rw-r--r--soft-fp/subtf3.c25
-rw-r--r--soft-fp/truncdfsf2.c27
-rw-r--r--soft-fp/trunctfdf2.c27
-rw-r--r--soft-fp/trunctfsf2.c27
-rw-r--r--soft-fp/unorddf2.c45
-rw-r--r--soft-fp/unordsf2.c46
-rw-r--r--soft-fp/unordtf2.c46
71 files changed, 817 insertions, 2503 deletions
diff --git a/soft-fp/Makefile b/soft-fp/Makefile
index 8eb89c5e51..e0a3cfb0df 100644
--- a/soft-fp/Makefile
+++ b/soft-fp/Makefile
@@ -23,18 +23,17 @@
 subdir	:= soft-fp
 
 gcc-single-routines := negsf2 addsf3 subsf3 mulsf3 divsf3 eqsf2 \
-	lesf2 gesf2 unordsf2 fixsfsi fixunssfsi floatsisf fixsfdi        \
-	fixunssfdi floatdisf sqrtsf2 floatunsisf floatundisf
+	lesf2 gesf2 fixsfsi fixunssfsi floatsisf fixsfdi        \
+	fixunssfdi floatdisf sqrtsf2
 
 gcc-double-routines := negdf2 adddf3 subdf3 muldf3 divdf3 eqdf2 \
-	ledf2 gedf2 unorddf2 fixdfsi fixunsdfsi floatsidf fixdfdi        \
-	fixunsdfdi floatdidf extendsfdf2 truncdfsf2 sqrtdf2 floatunsidf \
-	floatundidf
+	ledf2 gedf2 fixdfsi fixunsdfsi floatsidf fixdfdi        \
+	fixunsdfdi floatdidf extendsfdf2 truncdfsf2 sqrtdf2
 
 gcc-quad-routines := negtf2 addtf3 subtf3 multf3 divtf3 eqtf2 \
-	letf2 getf2 unordtf2 fixtfsi fixunstfsi floatsitf fixtfdi      \
+	letf2 getf2 fixtfsi fixunstfsi floatsitf fixtfdi      \
 	fixunstfdi floatditf extendsftf2 trunctfsf2 extenddftf2 \
-	trunctfdf2 sqrttf2 floatunsitf floatunditf
+	trunctfdf2 sqrttf2
 
 distribute := double.h op-1.h op-2.h op-4.h op-common.h quad.h \
 	single.h soft-fp.h extended.h Banner op-8.h testit.c \
diff --git a/soft-fp/adddf3.c b/soft-fp/adddf3.c
index 24c03db0a6..6802d13e37 100644
--- a/soft-fp/adddf3.c
+++ b/soft-fp/adddf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a + b
-   Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,23 +17,23 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __adddf3(DFtype a, DFtype b)
+double __adddf3(double a, double b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_D(A, a);
-  FP_UNPACK_SEMIRAW_D(B, b);
+  FP_UNPACK_D(A, a);
+  FP_UNPACK_D(B, b);
   FP_ADD_D(R, A, B);
-  FP_PACK_SEMIRAW_D(r, R);
+  FP_PACK_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/addsf3.c b/soft-fp/addsf3.c
index b86991ee56..a1e7f0c10c 100644
--- a/soft-fp/addsf3.c
+++ b/soft-fp/addsf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a + b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,23 +17,23 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __addsf3(SFtype a, SFtype b)
+float __addsf3(float a, float b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_S(A, a);
-  FP_UNPACK_SEMIRAW_S(B, b);
+  FP_UNPACK_S(A, a);
+  FP_UNPACK_S(B, b);
   FP_ADD_S(R, A, B);
-  FP_PACK_SEMIRAW_S(r, R);
+  FP_PACK_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/addtf3.c b/soft-fp/addtf3.c
index 49b67f0ba9..b7348f5acc 100644
--- a/soft-fp/addtf3.c
+++ b/soft-fp/addtf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a + b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,23 +17,23 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __addtf3(TFtype a, TFtype b)
+long double __addtf3(long double a, long double b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_Q(A, a);
-  FP_UNPACK_SEMIRAW_Q(B, b);
+  FP_UNPACK_Q(A, a);
+  FP_UNPACK_Q(B, b);
   FP_ADD_Q(R, A, B);
-  FP_PACK_SEMIRAW_Q(r, R);
+  FP_PACK_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/divdf3.c b/soft-fp/divdf3.c
index c3bb0d247c..f8a479dce7 100644
--- a/soft-fp/divdf3.c
+++ b/soft-fp/divdf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __divdf3(DFtype a, DFtype b)
+double __divdf3(double a, double b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_D(A, a);
diff --git a/soft-fp/divsf3.c b/soft-fp/divsf3.c
index 176bb3c2cb..9e9234fddf 100644
--- a/soft-fp/divsf3.c
+++ b/soft-fp/divsf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __divsf3(SFtype a, SFtype b)
+float __divsf3(float a, float b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_S(A, a);
diff --git a/soft-fp/divtf3.c b/soft-fp/divtf3.c
index 916fbfe974..264af97cb0 100644
--- a/soft-fp/divtf3.c
+++ b/soft-fp/divtf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __divtf3(TFtype a, TFtype b)
+long double __divtf3(long double a, long double b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_Q(A, a);
diff --git a/soft-fp/double.h b/soft-fp/double.h
index c8f4420af8..c659adec62 100644
--- a/soft-fp/double.h
+++ b/soft-fp/double.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Double Precision
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -12,15 +12,6 @@
    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
@@ -28,8 +19,8 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #if _FP_W_TYPE_SIZE < 32
 #error "Here's a nickel kid.  Go buy yourself a real computer."
@@ -51,22 +42,16 @@
 
 #define _FP_QNANBIT_D		\
 	((_FP_W_TYPE)1 << (_FP_FRACBITS_D-2) % _FP_W_TYPE_SIZE)
-#define _FP_QNANBIT_SH_D		\
-	((_FP_W_TYPE)1 << (_FP_FRACBITS_D-2+_FP_WORKBITS) % _FP_W_TYPE_SIZE)
 #define _FP_IMPLBIT_D		\
 	((_FP_W_TYPE)1 << (_FP_FRACBITS_D-1) % _FP_W_TYPE_SIZE)
-#define _FP_IMPLBIT_SH_D		\
-	((_FP_W_TYPE)1 << (_FP_FRACBITS_D-1+_FP_WORKBITS) % _FP_W_TYPE_SIZE)
 #define _FP_OVERFLOW_D		\
 	((_FP_W_TYPE)1 << _FP_WFRACBITS_D % _FP_W_TYPE_SIZE)
 
-typedef float DFtype __attribute__((mode(DF)));
-
 #if _FP_W_TYPE_SIZE < 64
 
 union _FP_UNION_D
 {
-  DFtype flt;
+  double flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign  : 1;
@@ -104,18 +89,6 @@ union _FP_UNION_D
     _FP_UNPACK_CANONICAL(D,2,X);	\
   } while (0)
 
-#define FP_UNPACK_SEMIRAW_D(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_2(D,X,val);		\
-    _FP_UNPACK_SEMIRAW(D,2,X);		\
-  } while (0)
-
-#define FP_UNPACK_SEMIRAW_DP(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_2_P(D,X,val);	\
-    _FP_UNPACK_SEMIRAW(D,2,X);		\
-  } while (0)
-
 #define FP_PACK_D(val,X)		\
   do {					\
     _FP_PACK_CANONICAL(D,2,X);		\
@@ -129,19 +102,6 @@ union _FP_UNION_D
       _FP_PACK_RAW_2_P(D,val,X);	\
   } while (0)
 
-#define FP_PACK_SEMIRAW_D(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(D,2,X);		\
-    _FP_PACK_RAW_2(D,val,X);		\
-  } while (0)
-
-#define FP_PACK_SEMIRAW_DP(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(D,2,X);		\
-    if (!FP_INHIBIT_RESULTS)		\
-      _FP_PACK_RAW_2_P(D,val,X);	\
-  } while (0)
-
 #define FP_ISSIGNAN_D(X)		_FP_ISSIGNAN(D,2,X)
 #define FP_NEG_D(R,X)			_FP_NEG(D,2,R,X)
 #define FP_ADD_D(R,X,Y)			_FP_ADD(D,2,R,X,Y)
@@ -153,7 +113,6 @@ union _FP_UNION_D
 
 #define FP_CMP_D(r,X,Y,un)	_FP_CMP(D,2,r,X,Y,un)
 #define FP_CMP_EQ_D(r,X,Y)	_FP_CMP_EQ(D,2,r,X,Y)
-#define FP_CMP_UNORD_D(r,X,Y)	_FP_CMP_UNORD(D,2,r,X,Y)
 
 #define FP_TO_INT_D(r,X,rsz,rsg)	_FP_TO_INT(D,2,r,X,rsz,rsg)
 #define FP_FROM_INT_D(X,r,rs,rt)	_FP_FROM_INT(D,2,X,r,rs,rt)
@@ -165,7 +124,7 @@ union _FP_UNION_D
 
 union _FP_UNION_D
 {
-  DFtype flt;
+  double flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign : 1;
@@ -201,18 +160,6 @@ union _FP_UNION_D
     _FP_UNPACK_CANONICAL(D,1,X);	\
   } while (0)
 
-#define FP_UNPACK_SEMIRAW_D(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_2(1,X,val);		\
-    _FP_UNPACK_SEMIRAW(D,1,X);		\
-  } while (0)
-
-#define FP_UNPACK_SEMIRAW_DP(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_2_P(1,X,val);	\
-    _FP_UNPACK_SEMIRAW(D,1,X);		\
-  } while (0)
-
 #define FP_PACK_D(val,X)		\
   do {					\
     _FP_PACK_CANONICAL(D,1,X);		\
@@ -226,19 +173,6 @@ union _FP_UNION_D
       _FP_PACK_RAW_1_P(D,val,X);	\
   } while (0)
 
-#define FP_PACK_SEMIRAW_D(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(D,1,X);		\
-    _FP_PACK_RAW_1(D,val,X);		\
-  } while (0)
-
-#define FP_PACK_SEMIRAW_DP(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(D,1,X);		\
-    if (!FP_INHIBIT_RESULTS)		\
-      _FP_PACK_RAW_1_P(D,val,X);	\
-  } while (0)
-
 #define FP_ISSIGNAN_D(X)		_FP_ISSIGNAN(D,1,X)
 #define FP_NEG_D(R,X)			_FP_NEG(D,1,R,X)
 #define FP_ADD_D(R,X,Y)			_FP_ADD(D,1,R,X,Y)
@@ -253,7 +187,6 @@ union _FP_UNION_D
 
 #define FP_CMP_D(r,X,Y,un)	_FP_CMP(D,1,r,X,Y,un)
 #define FP_CMP_EQ_D(r,X,Y)	_FP_CMP_EQ(D,1,r,X,Y)
-#define FP_CMP_UNORD_D(r,X,Y)	_FP_CMP_UNORD(D,1,r,X,Y)
 
 #define FP_TO_INT_D(r,X,rsz,rsg)	_FP_TO_INT(D,1,r,X,rsz,rsg)
 #define FP_FROM_INT_D(X,r,rs,rt)	_FP_FROM_INT(D,1,X,r,rs,rt)
diff --git a/soft-fp/eqdf2.c b/soft-fp/eqdf2.c
index efa769e986..b2586bdb9c 100644
--- a/soft-fp/eqdf2.c
+++ b/soft-fp/eqdf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-int __eqdf2(DFtype a, DFtype b)
+int __eqdf2(double a, double b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B);
diff --git a/soft-fp/eqsf2.c b/soft-fp/eqsf2.c
index 7e01c01d2f..d838b52396 100644
--- a/soft-fp/eqsf2.c
+++ b/soft-fp/eqsf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-int __eqsf2(SFtype a, SFtype b)
+int __eqsf2(float a, float b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B);
diff --git a/soft-fp/eqtf2.c b/soft-fp/eqtf2.c
index fd6ffd1ebe..adb1663edb 100644
--- a/soft-fp/eqtf2.c
+++ b/soft-fp/eqtf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-int __eqtf2(TFtype a, TFtype b)
+int __eqtf2(long double a, long double b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B);
diff --git a/soft-fp/extenddftf2.c b/soft-fp/extenddftf2.c
index 4101639a94..53ac72cfca 100644
--- a/soft-fp/extenddftf2.c
+++ b/soft-fp/extenddftf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE quad
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,28 +17,28 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 #include "quad.h"
 
-TFtype __extenddftf2(DFtype a)
+long double __extenddftf2(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_RAW_D(A, a);
+  FP_UNPACK_D(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_EXTEND(Q,D,4,2,R,A);
+  FP_CONV(Q,D,4,2,R,A);
 #else
-  FP_EXTEND(Q,D,2,1,R,A);
+  FP_CONV(Q,D,2,1,R,A);
 #endif
-  FP_PACK_RAW_Q(r, R);
+  FP_PACK_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/extended.h b/soft-fp/extended.h
index bbf39429e7..2edcbd05f0 100644
--- a/soft-fp/extended.h
+++ b/soft-fp/extended.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Extended Precision.
-   Copyright (C) 1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek (jj@ultra.linux.cz).
 
@@ -9,15 +9,6 @@
    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
@@ -25,8 +16,8 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #if _FP_W_TYPE_SIZE < 32
 #error "Here's a nickel, kid. Go buy yourself a real computer."
@@ -48,22 +39,16 @@
 
 #define _FP_QNANBIT_E		\
 	((_FP_W_TYPE)1 << (_FP_FRACBITS_E-2) % _FP_W_TYPE_SIZE)
-#define _FP_QNANBIT_SH_E		\
-	((_FP_W_TYPE)1 << (_FP_FRACBITS_E-2+_FP_WORKBITS) % _FP_W_TYPE_SIZE)
 #define _FP_IMPLBIT_E		\
 	((_FP_W_TYPE)1 << (_FP_FRACBITS_E-1) % _FP_W_TYPE_SIZE)
-#define _FP_IMPLBIT_SH_E		\
-	((_FP_W_TYPE)1 << (_FP_FRACBITS_E-1+_FP_WORKBITS) % _FP_W_TYPE_SIZE)
 #define _FP_OVERFLOW_E		\
 	((_FP_W_TYPE)1 << (_FP_WFRACBITS_E % _FP_W_TYPE_SIZE))
 
-typedef float XFtype __attribute__((mode(XF)));
-
 #if _FP_W_TYPE_SIZE < 64
 
 union _FP_UNION_E
 {
-   XFtype flt;
+   long double flt;
    struct 
    {
 #if __BYTE_ORDER == __BIG_ENDIAN
@@ -158,22 +143,10 @@ union _FP_UNION_E
 
 #define FP_UNPACK_EP(X,val)		\
   do {					\
-    FP_UNPACK_RAW_EP(X,val);		\
+    FP_UNPACK_RAW_2_P(X,val);		\
     _FP_UNPACK_CANONICAL(E,4,X);	\
   } while (0)
 
-#define FP_UNPACK_SEMIRAW_E(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_E(X,val);		\
-    _FP_UNPACK_SEMIRAW(E,4,X);		\
-  } while (0)
-
-#define FP_UNPACK_SEMIRAW_EP(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_EP(X,val);		\
-    _FP_UNPACK_SEMIRAW(E,4,X);		\
-  } while (0)
-
 #define FP_PACK_E(val,X)		\
   do {					\
     _FP_PACK_CANONICAL(E,4,X);		\
@@ -186,18 +159,6 @@ union _FP_UNION_E
     FP_PACK_RAW_EP(val,X);		\
   } while (0)
 
-#define FP_PACK_SEMIRAW_E(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(E,4,X);		\
-    _FP_PACK_RAW_E(val,X);		\
-  } while (0)
-
-#define FP_PACK_SEMIRAW_EP(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(E,4,X);		\
-    _FP_PACK_RAW_EP(val,X);		\
-  } while (0)
-
 #define FP_ISSIGNAN_E(X)	_FP_ISSIGNAN(E,4,X)
 #define FP_NEG_E(R,X)		_FP_NEG(E,4,R,X)
 #define FP_ADD_E(R,X,Y)		_FP_ADD(E,4,R,X,Y)
@@ -263,7 +224,6 @@ union _FP_UNION_E
 
 #define FP_CMP_E(r,X,Y,un)	_FP_CMP(E,4,r,X,Y,un)
 #define FP_CMP_EQ_E(r,X,Y)	_FP_CMP_EQ(E,4,r,X,Y)
-#define FP_CMP_UNORD_E(r,X,Y)	_FP_CMP_UNORD(E,4,r,X,Y)
 
 #define FP_TO_INT_E(r,X,rsz,rsg)	_FP_TO_INT(E,4,r,X,rsz,rsg)
 #define FP_FROM_INT_E(X,r,rs,rt)	_FP_FROM_INT(E,4,X,r,rs,rt)
@@ -274,7 +234,7 @@ union _FP_UNION_E
 #else   /* not _FP_W_TYPE_SIZE < 64 */
 union _FP_UNION_E
 {
-  XFtype flt;
+  long double flt /* __attribute__((mode(TF))) */ ;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned long pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
@@ -363,18 +323,6 @@ union _FP_UNION_E
     _FP_UNPACK_CANONICAL(E,2,X);	\
   } while (0)
 
-#define FP_UNPACK_SEMIRAW_E(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_E(X,val);		\
-    _FP_UNPACK_SEMIRAW(E,2,X);		\
-  } while (0)
-
-#define FP_UNPACK_SEMIRAW_EP(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_EP(X,val);		\
-    _FP_UNPACK_SEMIRAW(E,2,X);		\
-  } while (0)
-
 #define FP_PACK_E(val,X)		\
   do {					\
     _FP_PACK_CANONICAL(E,2,X);		\
@@ -387,18 +335,6 @@ union _FP_UNION_E
     FP_PACK_RAW_EP(val,X);		\
   } while (0)
 
-#define FP_PACK_SEMIRAW_E(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(E,2,X);		\
-    _FP_PACK_RAW_E(val,X);		\
-  } while (0)
-
-#define FP_PACK_SEMIRAW_EP(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(E,2,X);		\
-    _FP_PACK_RAW_EP(val,X);		\
-  } while (0)
-
 #define FP_ISSIGNAN_E(X)	_FP_ISSIGNAN(E,2,X)
 #define FP_NEG_E(R,X)		_FP_NEG(E,2,R,X)
 #define FP_ADD_E(R,X,Y)		_FP_ADD(E,2,R,X,Y)
@@ -442,7 +378,6 @@ union _FP_UNION_E
  
 #define FP_CMP_E(r,X,Y,un)	_FP_CMP(E,2,r,X,Y,un)
 #define FP_CMP_EQ_E(r,X,Y)	_FP_CMP_EQ(E,2,r,X,Y)
-#define FP_CMP_UNORD_E(r,X,Y)	_FP_CMP_UNORD(E,2,r,X,Y)
 
 #define FP_TO_INT_E(r,X,rsz,rsg)	_FP_TO_INT(E,2,r,X,rsz,rsg)
 #define FP_FROM_INT_E(X,r,rs,rt)	_FP_FROM_INT(E,2,X,r,rs,rt)
diff --git a/soft-fp/extendsfdf2.c b/soft-fp/extendsfdf2.c
index fba22d5a19..a418f1967e 100644
--- a/soft-fp/extendsfdf2.c
+++ b/soft-fp/extendsfdf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE double
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,28 +17,28 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 #include "double.h"
 
-DFtype __extendsfdf2(SFtype a)
+double __extendsfdf2(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_RAW_S(A, a);
+  FP_UNPACK_S(A, a);
 #if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
-  FP_EXTEND(D,S,2,1,R,A);
+  FP_CONV(D,S,2,1,R,A);
 #else
-  FP_EXTEND(D,S,1,1,R,A);
+  FP_CONV(D,S,1,1,R,A);
 #endif
-  FP_PACK_RAW_D(r, R);
+  FP_PACK_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/extendsftf2.c b/soft-fp/extendsftf2.c
index c43cf1edee..d2735ba1a5 100644
--- a/soft-fp/extendsftf2.c
+++ b/soft-fp/extendsftf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE quad
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,28 +17,28 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 #include "quad.h"
 
-TFtype __extendsftf2(SFtype a)
+long double __extendsftf2(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_RAW_S(A, a);
+  FP_UNPACK_S(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_EXTEND(Q,S,4,1,R,A);
+  FP_CONV(Q,S,4,1,R,A);
 #else
-  FP_EXTEND(Q,S,2,1,R,A);
+  FP_CONV(Q,S,2,1,R,A);
 #endif
-  FP_PACK_RAW_Q(r, R);
+  FP_PACK_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixdfdi.c b/soft-fp/fixdfdi.c
index fdfe35af51..201014581f 100644
--- a/soft-fp/fixdfdi.c
+++ b/soft-fp/fixdfdi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DItype __fixdfdi(DFtype a)
+DItype __fixdfdi(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  UDItype r;
+  DItype r;
 
-  FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, DI_BITS, 1);
+  FP_UNPACK_D(A, a);
+  FP_TO_INT_D(r, A, 64, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixdfsi.c b/soft-fp/fixdfsi.c
index a05f3e39a5..9961d3d560 100644
--- a/soft-fp/fixdfsi.c
+++ b/soft-fp/fixdfsi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-SItype __fixdfsi(DFtype a)
+SItype __fixdfsi(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  USItype r;
+  SItype r;
 
-  FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, SI_BITS, 1);
+  FP_UNPACK_D(A, a);
+  FP_TO_INT_D(r, A, 32, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixsfdi.c b/soft-fp/fixsfdi.c
index 384d9bdd53..f3fd2e77a1 100644
--- a/soft-fp/fixsfdi.c
+++ b/soft-fp/fixsfdi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-DItype __fixsfdi(SFtype a)
+DItype __fixsfdi(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  UDItype r;
+  DItype r;
 
-  FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, DI_BITS, 1);
+  FP_UNPACK_S(A, a);
+  FP_TO_INT_S(r, A, 64, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixsfsi.c b/soft-fp/fixsfsi.c
index 1d40ed05df..e8251d18b6 100644
--- a/soft-fp/fixsfsi.c
+++ b/soft-fp/fixsfsi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SItype __fixsfsi(SFtype a)
+SItype __fixsfsi(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  USItype r;
+  SItype r;
 
-  FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, SI_BITS, 1);
+  FP_UNPACK_S(A, a);
+  FP_TO_INT_S(r, A, 32, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixtfdi.c b/soft-fp/fixtfdi.c
index ea10ce2dd3..fda412261d 100644
--- a/soft-fp/fixtfdi.c
+++ b/soft-fp/fixtfdi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-DItype __fixtfdi(TFtype a)
+DItype __fixtfdi(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  UDItype r;
+  DItype r;
 
-  FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, DI_BITS, 1);
+  FP_UNPACK_Q(A, a);
+  FP_TO_INT_Q(r, A, 64, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixtfsi.c b/soft-fp/fixtfsi.c
index eb71038bc3..da51cf951b 100644
--- a/soft-fp/fixtfsi.c
+++ b/soft-fp/fixtfsi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-SItype __fixtfsi(TFtype a)
+SItype __fixtfsi(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  USItype r;
+  SItype r;
 
-  FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, SI_BITS, 1);
+  FP_UNPACK_Q(A, a);
+  FP_TO_INT_Q(r, A, 32, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixunsdfdi.c b/soft-fp/fixunsdfdi.c
index d85198f185..18bc61ca30 100644
--- a/soft-fp/fixunsdfdi.c
+++ b/soft-fp/fixunsdfdi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-UDItype __fixunsdfdi(DFtype a)
+UDItype __fixunsdfdi(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   UDItype r;
 
-  FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, DI_BITS, 0);
+  FP_UNPACK_D(A, a);
+  FP_TO_INT_D(r, A, 64, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixunsdfsi.c b/soft-fp/fixunsdfsi.c
index 492ffdea68..4060b5119a 100644
--- a/soft-fp/fixunsdfsi.c
+++ b/soft-fp/fixunsdfsi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-USItype __fixunsdfsi(DFtype a)
+USItype __fixunsdfsi(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   USItype r;
 
-  FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, SI_BITS, 0);
+  FP_UNPACK_D(A, a);
+  FP_TO_INT_D(r, A, 32, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixunssfdi.c b/soft-fp/fixunssfdi.c
index 5484153837..6e4f5beb30 100644
--- a/soft-fp/fixunssfdi.c
+++ b/soft-fp/fixunssfdi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-UDItype __fixunssfdi(SFtype a)
+UDItype __fixunssfdi(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   UDItype r;
 
-  FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, DI_BITS, 0);
+  FP_UNPACK_S(A, a);
+  FP_TO_INT_S(r, A, 64, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
index ac9d4b9654..5c3e99305e 100644
--- a/soft-fp/fixunssfsi.c
+++ b/soft-fp/fixunssfsi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-USItype __fixunssfsi(SFtype a)
+USItype __fixunssfsi(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   USItype r;
 
-  FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, SI_BITS, 0);
+  FP_UNPACK_S(A, a);
+  FP_TO_INT_S(r, A, 32, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixunstfdi.c b/soft-fp/fixunstfdi.c
index 86f1fc8562..a8ac454ce4 100644
--- a/soft-fp/fixunstfdi.c
+++ b/soft-fp/fixunstfdi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-UDItype __fixunstfdi(TFtype a)
+UDItype __fixunstfdi(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   UDItype r;
 
-  FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, DI_BITS, 0);
+  FP_UNPACK_Q(A, a);
+  FP_TO_INT_Q(r, A, 64, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/fixunstfsi.c b/soft-fp/fixunstfsi.c
index e0335da479..812fb8ef26 100644
--- a/soft-fp/fixunstfsi.c
+++ b/soft-fp/fixunstfsi.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-USItype __fixunstfsi(TFtype a)
+USItype __fixunstfsi(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   USItype r;
 
-  FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, SI_BITS, 0);
+  FP_UNPACK_Q(A, a);
+  FP_TO_INT_Q(r, A, 32, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/floatdidf.c b/soft-fp/floatdidf.c
index 21e9fb1899..38303f292f 100644
--- a/soft-fp/floatdidf.c
+++ b/soft-fp/floatdidf.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE double
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __floatdidf(DItype i)
+double __floatdidf(DItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  DFtype a;
+  double a;
 
-  FP_FROM_INT_D(A, i, DI_BITS, UDItype);
-  FP_PACK_RAW_D(a, A);
+  FP_FROM_INT_D(A, i, 64, long long);
+  FP_PACK_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
diff --git a/soft-fp/floatdisf.c b/soft-fp/floatdisf.c
index ee57915c3b..c7933a85ff 100644
--- a/soft-fp/floatdisf.c
+++ b/soft-fp/floatdisf.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE single
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __floatdisf(DItype i)
+double __floatdisf(DItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  SFtype a;
+  float a;
 
-  FP_FROM_INT_S(A, i, DI_BITS, UDItype);
-  FP_PACK_RAW_S(a, A);
+  FP_FROM_INT_S(A, i, 64, long long);
+  FP_PACK_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
diff --git a/soft-fp/floatditf.c b/soft-fp/floatditf.c
index 564800bc05..ef05dee109 100644
--- a/soft-fp/floatditf.c
+++ b/soft-fp/floatditf.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE quad
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __floatditf(DItype i)
+long double __floatditf(DItype i)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  TFtype a;
+  long double a;
 
-  FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
-  FP_PACK_RAW_Q(a, A);
+  FP_FROM_INT_Q(A, i, 64, long long);
+  FP_PACK_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
diff --git a/soft-fp/floatsidf.c b/soft-fp/floatsidf.c
index b6d5f8d1d2..e136333d87 100644
--- a/soft-fp/floatsidf.c
+++ b/soft-fp/floatsidf.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE double
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __floatsidf(SItype i)
+double __floatsidf(SItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  DFtype a;
+  double a;
 
-  FP_FROM_INT_D(A, i, SI_BITS, USItype);
-  FP_PACK_RAW_D(a, A);
+  FP_FROM_INT_D(A, i, 32, int);
+  FP_PACK_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
diff --git a/soft-fp/floatsisf.c b/soft-fp/floatsisf.c
index 76217fe347..d68f5a8ac1 100644
--- a/soft-fp/floatsisf.c
+++ b/soft-fp/floatsisf.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE single
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __floatsisf(SItype i)
+float __floatsisf(SItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  SFtype a;
+  float a;
 
-  FP_FROM_INT_S(A, i, SI_BITS, USItype);
-  FP_PACK_RAW_S(a, A);
+  FP_FROM_INT_S(A, i, 32, int);
+  FP_PACK_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
diff --git a/soft-fp/floatsitf.c b/soft-fp/floatsitf.c
index 8c3d9cc619..e982bb7b35 100644
--- a/soft-fp/floatsitf.c
+++ b/soft-fp/floatsitf.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE quad
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,20 +17,20 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __floatsitf(SItype i)
+long double __floatsitf(SItype i)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  TFtype a;
+  long double a;
 
-  FP_FROM_INT_Q(A, i, SI_BITS, USItype);
-  FP_PACK_RAW_Q(a, A);
+  FP_FROM_INT_Q(A, i, 32, int);
+  FP_PACK_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
diff --git a/soft-fp/floatundidf.c b/soft-fp/floatundidf.c
deleted file mode 100644
index 2169a3f198..0000000000
--- a/soft-fp/floatundidf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Software floating-point emulation.
-   Convert a 64bit 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 Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   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"
-
-double
-__floatundidf(UDItype i)
-{
-  FP_DECL_EX;
-  FP_DECL_D(A);
-  DFtype a;
-
-  FP_FROM_INT_D(A, i, DI_BITS, UDItype);
-  FP_PACK_RAW_D(a, A);
-  FP_HANDLE_EXCEPTIONS;
-
-  return a;
-}
diff --git a/soft-fp/floatundisf.c b/soft-fp/floatundisf.c
deleted file mode 100644
index 5f08764dc5..0000000000
--- a/soft-fp/floatundisf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Software floating-point emulation.
-   Convert a 64bit unsigned integer to IEEE single
-   Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   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"
-
-float
-__floatundisf(UDItype i)
-{
-  FP_DECL_EX;
-  FP_DECL_S(A);
-  SFtype a;
-
-  FP_FROM_INT_S(A, i, DI_BITS, UDItype);
-  FP_PACK_RAW_S(a, A);
-  FP_HANDLE_EXCEPTIONS;
-
-  return a;
-}
diff --git a/soft-fp/floatunditf.c b/soft-fp/floatunditf.c
deleted file mode 100644
index ab357f051c..0000000000
--- a/soft-fp/floatunditf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Software floating-point emulation.
-   Convert a 64bit unsigned integer to IEEE quad
-   Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   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
-__floatunditf(UDItype i)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(A);
-  TFtype a;
-
-  FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
-  FP_PACK_RAW_Q(a, A);
-  FP_HANDLE_EXCEPTIONS;
-
-  return a;
-}
diff --git a/soft-fp/floatunsidf.c b/soft-fp/floatunsidf.c
deleted file mode 100644
index 97b488ab68..0000000000
--- a/soft-fp/floatunsidf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Software floating-point emulation.
-   Convert a 32bit 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 Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   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"
-
-double
-__floatunsidf(USItype i)
-{
-  FP_DECL_EX;
-  FP_DECL_D(A);
-  DFtype a;
-
-  FP_FROM_INT_D(A, i, SI_BITS, USItype);
-  FP_PACK_RAW_D(a, A);
-  FP_HANDLE_EXCEPTIONS;
-
-  return a;
-}
diff --git a/soft-fp/floatunsisf.c b/soft-fp/floatunsisf.c
deleted file mode 100644
index 2ec16ba7b7..0000000000
--- a/soft-fp/floatunsisf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Software floating-point emulation.
-   Convert a 32bit unsigned integer to IEEE single
-   Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   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"
-
-float
-__floatunsisf(USItype i)
-{
-  FP_DECL_EX;
-  FP_DECL_S(A);
-  SFtype a;
-
-  FP_FROM_INT_S(A, i, SI_BITS, USItype);
-  FP_PACK_RAW_S(a, A);
-  FP_HANDLE_EXCEPTIONS;
-
-  return a;
-}
diff --git a/soft-fp/floatunsitf.c b/soft-fp/floatunsitf.c
deleted file mode 100644
index c993716e54..0000000000
--- a/soft-fp/floatunsitf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Software floating-point emulation.
-   Convert a 32bit unsigned integer to IEEE quad
-   Copyright (C) 1997,1999, 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   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
-__floatunsitf(USItype i)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(A);
-  TFtype a;
-
-  FP_FROM_INT_Q(A, i, SI_BITS, USItype);
-  FP_PACK_RAW_Q(a, A);
-  FP_HANDLE_EXCEPTIONS;
-
-  return a;
-}
diff --git a/soft-fp/gedf2.c b/soft-fp/gedf2.c
index e0dc8620ee..66762d0c81 100644
--- a/soft-fp/gedf2.c
+++ b/soft-fp/gedf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-int __gedf2(DFtype a, DFtype b)
+int __gedf2(double a, double b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B);
diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
index d1f3ba2f9f..bc5f431747 100644
--- a/soft-fp/gesf2.c
+++ b/soft-fp/gesf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-int __gesf2(SFtype a, SFtype b)
+int __gesf2(float a, float b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B);
diff --git a/soft-fp/getf2.c b/soft-fp/getf2.c
index 82ff283d0d..40a3a51e77 100644
--- a/soft-fp/getf2.c
+++ b/soft-fp/getf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-int __getf2(TFtype a, TFtype b)
+int __getf2(long double a, long double b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B);
diff --git a/soft-fp/ledf2.c b/soft-fp/ledf2.c
index 528a9819ce..70d849a1e2 100644
--- a/soft-fp/ledf2.c
+++ b/soft-fp/ledf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-int __ledf2(DFtype a, DFtype b)
+int __ledf2(double a, double b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B);
diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
index c564bd9539..31c07e6e23 100644
--- a/soft-fp/lesf2.c
+++ b/soft-fp/lesf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-int __lesf2(SFtype a, SFtype b)
+int __lesf2(float a, float b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B);
diff --git a/soft-fp/letf2.c b/soft-fp/letf2.c
index 35e03aaacf..883745ffab 100644
--- a/soft-fp/letf2.c
+++ b/soft-fp/letf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,13 +17,13 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-int __letf2(TFtype a, TFtype b)
+int __letf2(long double a, long double b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B);
diff --git a/soft-fp/muldf3.c b/soft-fp/muldf3.c
index 7eb2015ae5..c1521ef9d7 100644
--- a/soft-fp/muldf3.c
+++ b/soft-fp/muldf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __muldf3(DFtype a, DFtype b)
+double __muldf3(double a, double b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_D(A, a);
diff --git a/soft-fp/mulsf3.c b/soft-fp/mulsf3.c
index 5df4406872..48b215b7d6 100644
--- a/soft-fp/mulsf3.c
+++ b/soft-fp/mulsf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __mulsf3(SFtype a, SFtype b)
+float __mulsf3(float a, float b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_S(A, a);
diff --git a/soft-fp/multf3.c b/soft-fp/multf3.c
index 0abab6ddc3..b54eb1a767 100644
--- a/soft-fp/multf3.c
+++ b/soft-fp/multf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __multf3(TFtype a, TFtype b)
+long double __multf3(long double a, long double b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_Q(A, a);
diff --git a/soft-fp/negdf2.c b/soft-fp/negdf2.c
index 54869e9a68..cc287c54fe 100644
--- a/soft-fp/negdf2.c
+++ b/soft-fp/negdf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __negdf2(DFtype a)
+double __negdf2(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_UNPACK_D(A, a);
   FP_NEG_D(R, A);
diff --git a/soft-fp/negsf2.c b/soft-fp/negsf2.c
index bf5db7a452..15bfef4fc1 100644
--- a/soft-fp/negsf2.c
+++ b/soft-fp/negsf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __negsf2(SFtype a)
+float __negsf2(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_UNPACK_S(A, a);
   FP_NEG_S(R, A);
diff --git a/soft-fp/negtf2.c b/soft-fp/negtf2.c
index 5524c82df1..f3eba5f21d 100644
--- a/soft-fp/negtf2.c
+++ b/soft-fp/negtf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __negtf2(TFtype a)
+long double __negtf2(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_UNPACK_Q(A, a);
   FP_NEG_Q(R, A);
diff --git a/soft-fp/op-1.h b/soft-fp/op-1.h
index 35cd0ba7bb..367ff2274b 100644
--- a/soft-fp/op-1.h
+++ b/soft-fp/op-1.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic one-word fraction declaration and manipulation.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -12,15 +12,6 @@
    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
@@ -28,8 +19,8 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #define _FP_FRAC_DECL_1(X)	_FP_W_TYPE X##_f
 #define _FP_FRAC_COPY_1(D,S)	(D##_f = S##_f)
@@ -49,16 +40,8 @@
 #define _FP_FRAC_SRL_1(X,N)	(X##_f >>= N)
 
 /* Right shift with sticky-lsb.  */
-#define _FP_FRAC_SRST_1(X,S,N,sz)	__FP_FRAC_SRST_1(X##_f, S, N, sz)
 #define _FP_FRAC_SRS_1(X,N,sz)	__FP_FRAC_SRS_1(X##_f, N, sz)
 
-#define __FP_FRAC_SRST_1(X,S,N,sz)			\
-do {							\
-  S = (__builtin_constant_p(N) && (N) == 1		\
-       ? X & 1 : (X << (_FP_W_TYPE_SIZE - (N))) != 0);	\
-  X = X >> (N);						\
-} while (0)
-
 #define __FP_FRAC_SRS_1(X,N,sz)						\
    (X = (X >> (N) | (__builtin_constant_p(N) && (N) == 1		\
 		     ? X & 1 : (X << (_FP_W_TYPE_SIZE - (N))) != 0)))
@@ -299,4 +282,17 @@ do {							\
  * Convert FP values between word sizes
  */
 
-#define _FP_FRAC_COPY_1_1(D, S)		(D##_f = S##_f)
+#define _FP_FRAC_CONV_1_1(dfs, sfs, D, S)				\
+  do {									\
+    D##_f = S##_f;							\
+    if (_FP_WFRACBITS_##sfs > _FP_WFRACBITS_##dfs)			\
+      {									\
+	if (S##_c != FP_CLS_NAN)					\
+	  _FP_FRAC_SRS_1(D, (_FP_WFRACBITS_##sfs-_FP_WFRACBITS_##dfs),	\
+			 _FP_WFRACBITS_##sfs);				\
+	else								\
+	  _FP_FRAC_SRL_1(D, (_FP_WFRACBITS_##sfs-_FP_WFRACBITS_##dfs));	\
+      }									\
+    else								\
+      D##_f <<= _FP_WFRACBITS_##dfs - _FP_WFRACBITS_##sfs;		\
+  } while (0)
diff --git a/soft-fp/op-2.h b/soft-fp/op-2.h
index 5c9bce4c17..89da27fa4f 100644
--- a/soft-fp/op-2.h
+++ b/soft-fp/op-2.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic two-word fraction declaration and manipulation.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -12,15 +12,6 @@
    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
@@ -28,8 +19,8 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #define _FP_FRAC_DECL_2(X)	_FP_W_TYPE X##_f0, X##_f1
 #define _FP_FRAC_COPY_2(D,S)	(D##_f0 = S##_f0, D##_f1 = S##_f1)
@@ -38,74 +29,61 @@
 #define _FP_FRAC_LOW_2(X)	(X##_f0)
 #define _FP_FRAC_WORD_2(X,w)	(X##_f##w)
 
-#define _FP_FRAC_SLL_2(X,N)						    \
-(void)(((N) < _FP_W_TYPE_SIZE)						    \
-       ? ({								    \
-	    if (__builtin_constant_p(N) && (N) == 1)			    \
-	      {								    \
-		X##_f1 = X##_f1 + X##_f1 + (((_FP_WS_TYPE)(X##_f0)) < 0);   \
-		X##_f0 += X##_f0;					    \
-	      }								    \
-	    else							    \
-	      {								    \
-		X##_f1 = X##_f1 << (N) | X##_f0 >> (_FP_W_TYPE_SIZE - (N)); \
-		X##_f0 <<= (N);						    \
-	      }								    \
-	    0;								    \
-	  })								    \
-       : ({								    \
-	    X##_f1 = X##_f0 << ((N) - _FP_W_TYPE_SIZE);			    \
-	    X##_f0 = 0;							    \
-	  }))
-
+#define _FP_FRAC_SLL_2(X,N)						\
+  do {									\
+    if ((N) < _FP_W_TYPE_SIZE)						\
+      {									\
+	if (__builtin_constant_p(N) && (N) == 1) 			\
+	  {								\
+	    X##_f1 = X##_f1 + X##_f1 + (((_FP_WS_TYPE)(X##_f0)) < 0);	\
+	    X##_f0 += X##_f0;						\
+	  }								\
+	else								\
+	  {								\
+	    X##_f1 = X##_f1 << (N) | X##_f0 >> (_FP_W_TYPE_SIZE - (N));	\
+	    X##_f0 <<= (N);						\
+	  }								\
+      }									\
+    else								\
+      {									\
+	X##_f1 = X##_f0 << ((N) - _FP_W_TYPE_SIZE);			\
+	X##_f0 = 0;							\
+      }									\
+  } while (0)
 
 #define _FP_FRAC_SRL_2(X,N)						\
-(void)(((N) < _FP_W_TYPE_SIZE)						\
-       ? ({								\
-	    X##_f0 = X##_f0 >> (N) | X##_f1 << (_FP_W_TYPE_SIZE - (N));	\
-	    X##_f1 >>= (N);						\
-	  })								\
-       : ({								\
-	    X##_f0 = X##_f1 >> ((N) - _FP_W_TYPE_SIZE);			\
-	    X##_f1 = 0;							\
-	  }))
+  do {									\
+    if ((N) < _FP_W_TYPE_SIZE)						\
+      {									\
+	X##_f0 = X##_f0 >> (N) | X##_f1 << (_FP_W_TYPE_SIZE - (N));	\
+	X##_f1 >>= (N);							\
+      }									\
+    else								\
+      {									\
+	X##_f0 = X##_f1 >> ((N) - _FP_W_TYPE_SIZE);			\
+	X##_f1 = 0;							\
+      }									\
+  } while (0)
 
 /* Right shift with sticky-lsb.  */
-#define _FP_FRAC_SRST_2(X,S, N,sz)					  \
-(void)(((N) < _FP_W_TYPE_SIZE)						  \
-       ? ({								  \
-	    S = (__builtin_constant_p(N) && (N) == 1			  \
-		 ? X##_f0 & 1						  \
-		 : (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0);		  \
-	    X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N)); \
-	    X##_f1 >>= (N);						  \
-	  })								  \
-       : ({								  \
-	    S = ((((N) == _FP_W_TYPE_SIZE				  \
-		   ? 0							  \
-		   : (X##_f1 << (2*_FP_W_TYPE_SIZE - (N))))		  \
-		  | X##_f0) != 0);					  \
-	    X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE));		  \
-	    X##_f1 = 0;							  \
-	  }))
-
-#define _FP_FRAC_SRS_2(X,N,sz)						  \
-(void)(((N) < _FP_W_TYPE_SIZE)						  \
-       ? ({								  \
-	    X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N) | \
-		      (__builtin_constant_p(N) && (N) == 1		  \
-		       ? X##_f0 & 1					  \
-		       : (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0));	  \
-	    X##_f1 >>= (N);						  \
-	  })								  \
-       : ({								  \
-	    X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) |		  \
-		      ((((N) == _FP_W_TYPE_SIZE				  \
-			 ? 0						  \
-			 : (X##_f1 << (2*_FP_W_TYPE_SIZE - (N))))	  \
-			| X##_f0) != 0));				  \
-	    X##_f1 = 0;							  \
-	  }))
+#define _FP_FRAC_SRS_2(X,N,sz)						\
+  do {									\
+    if ((N) < _FP_W_TYPE_SIZE)						\
+      {									\
+	X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N) |	\
+		  (__builtin_constant_p(N) && (N) == 1			\
+		   ? X##_f0 & 1						\
+		   : (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0));	\
+	X##_f1 >>= (N);							\
+      }									\
+    else								\
+      {									\
+	X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) |			\
+		  (((X##_f1 << (2*_FP_W_TYPE_SIZE - (N))) |		\
+		    X##_f0) != 0));					\
+	X##_f1 = 0;							\
+      }									\
+  } while (0)
 
 #define _FP_FRAC_ADDI_2(X,I)	\
   __FP_FRAC_ADDI_2(X##_f1, X##_f0, I)
@@ -137,9 +115,9 @@
 #define _FP_FRAC_CLEAR_OVERP_2(fs,X)	(_FP_FRAC_HIGH_##fs(X) &= ~_FP_OVERFLOW_##fs)
 #define _FP_FRAC_EQ_2(X, Y)	(X##_f1 == Y##_f1 && X##_f0 == Y##_f0)
 #define _FP_FRAC_GT_2(X, Y)	\
-  (X##_f1 > Y##_f1 || (X##_f1 == Y##_f1 && X##_f0 > Y##_f0))
+  (X##_f1 > Y##_f1 || X##_f1 == Y##_f1 && X##_f0 > Y##_f0)
 #define _FP_FRAC_GE_2(X, Y)	\
-  (X##_f1 > Y##_f1 || (X##_f1 == Y##_f1 && X##_f0 >= Y##_f0))
+  (X##_f1 > Y##_f1 || X##_f1 == Y##_f1 && X##_f0 >= Y##_f0)
 
 #define _FP_ZEROFRAC_2		0, 0
 #define _FP_MINFRAC_2		0, 1
@@ -592,13 +570,16 @@
  */
 
 #define _FP_FRAC_ASSEMBLE_2(r, X, rsize)	\
-(void)((rsize <= _FP_W_TYPE_SIZE)		\
-       ? ({ r = X##_f0; })			\
-       : ({					\
-	    r = X##_f1;				\
-	    r <<= _FP_W_TYPE_SIZE;		\
-	    r += X##_f0;			\
-	  }))
+  do {						\
+    if (rsize <= _FP_W_TYPE_SIZE)		\
+      r = X##_f0;				\
+    else					\
+      {						\
+	r = X##_f1;				\
+	r <<= _FP_W_TYPE_SIZE;			\
+	r += X##_f0;				\
+      }						\
+  } while (0)
 
 #define _FP_FRAC_DISASSEMBLE_2(X, r, rsize)				\
   do {									\
@@ -610,6 +591,20 @@
  * Convert FP values between word sizes
  */
 
-#define _FP_FRAC_COPY_1_2(D, S)		(D##_f = S##_f0)
+#define _FP_FRAC_CONV_1_2(dfs, sfs, D, S)				\
+  do {									\
+    if (S##_c != FP_CLS_NAN)						\
+      _FP_FRAC_SRS_2(S, (_FP_WFRACBITS_##sfs - _FP_WFRACBITS_##dfs),	\
+		     _FP_WFRACBITS_##sfs);				\
+    else								\
+      _FP_FRAC_SRL_2(S, (_FP_WFRACBITS_##sfs - _FP_WFRACBITS_##dfs));	\
+    D##_f = S##_f0;							\
+  } while (0)
+
+#define _FP_FRAC_CONV_2_1(dfs, sfs, D, S)				\
+  do {									\
+    D##_f0 = S##_f;							\
+    D##_f1 = 0;								\
+    _FP_FRAC_SLL_2(D, (_FP_WFRACBITS_##dfs - _FP_WFRACBITS_##sfs));	\
+  } while (0)
 
-#define _FP_FRAC_COPY_2_1(D, S)		((D##_f0 = S##_f), (D##_f1 = 0))
diff --git a/soft-fp/op-4.h b/soft-fp/op-4.h
index 1b90535c56..404cb22848 100644
--- a/soft-fp/op-4.h
+++ b/soft-fp/op-4.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic four-word fraction declaration and manipulation.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -12,15 +12,6 @@
    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
@@ -28,8 +19,8 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #define _FP_FRAC_DECL_4(X)	_FP_W_TYPE X##_f[4]
 #define _FP_FRAC_COPY_4(D,S)			\
@@ -87,36 +78,31 @@
  * but that if any of the bits that fall off the right hand side
  * were one then we always set the LSbit.
  */
-#define _FP_FRAC_SRST_4(X,S,N,size)			\
-  do {							\
-    _FP_I_TYPE _up, _down, _skip, _i;			\
-    _FP_W_TYPE _s;					\
-    _skip = (N) / _FP_W_TYPE_SIZE;			\
-    _down = (N) % _FP_W_TYPE_SIZE;			\
-    _up = _FP_W_TYPE_SIZE - _down;			\
-    for (_s = _i = 0; _i < _skip; ++_i)			\
-      _s |= X##_f[_i];					\
-    if (!_down)						\
-      for (_i = 0; _i <= 3-_skip; ++_i)			\
-	X##_f[_i] = X##_f[_i+_skip];			\
-    else						\
-      {							\
-	_s |= X##_f[_i] << _up;				\
-	for (_i = 0; _i < 3-_skip; ++_i)		\
-	  X##_f[_i] = X##_f[_i+_skip] >> _down		\
-		      | X##_f[_i+_skip+1] << _up;	\
-	X##_f[_i++] = X##_f[3] >> _down;		\
-      }							\
-    for (; _i < 4; ++_i)				\
-      X##_f[_i] = 0;					\
-    S = (_s != 0);					\
-  } while (0)
-
-#define _FP_FRAC_SRS_4(X,N,size)		\
-  do {						\
-    int _sticky;				\
-    _FP_FRAC_SRST_4(X, _sticky, N, size);	\
-    X##_f[0] |= _sticky;			\
+#define _FP_FRAC_SRS_4(X,N,size)					\
+  do {									\
+    _FP_I_TYPE _up, _down, _skip, _i;					\
+    _FP_W_TYPE _s;							\
+    _skip = (N) / _FP_W_TYPE_SIZE;					\
+    _down = (N) % _FP_W_TYPE_SIZE;					\
+    _up = _FP_W_TYPE_SIZE - _down;					\
+    for (_s = _i = 0; _i < _skip; ++_i)					\
+      _s |= X##_f[_i];							\
+    _s |= X##_f[_i] << _up;						\
+/* s is now != 0 if we want to set the LSbit */				\
+    if (!_down)								\
+      for (_i = 0; _i <= 3-_skip; ++_i)					\
+	X##_f[_i] = X##_f[_i+_skip];					\
+    else								\
+      {									\
+	for (_i = 0; _i < 3-_skip; ++_i)				\
+	  X##_f[_i] = X##_f[_i+_skip] >> _down				\
+		      | X##_f[_i+_skip+1] << _up;			\
+	X##_f[_i++] = X##_f[3] >> _down;				\
+      }									\
+    for (; _i < 4; ++_i)						\
+      X##_f[_i] = 0;							\
+    /* don't fix the LSB until the very end when we're sure f[0] is stable */	\
+    X##_f[0] |= (_s != 0);						\
   } while (0)
 
 #define _FP_FRAC_ADD_4(R,X,Y)						\
@@ -526,7 +512,7 @@
 #ifndef __FP_FRAC_ADD_3
 #define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0)		\
   do {								\
-    _FP_W_TYPE _c1, _c2;					\
+    int _c1, _c2;							\
     r0 = x0 + y0;						\
     _c1 = r0 < x0;						\
     r1 = x1 + y1;						\
@@ -540,7 +526,7 @@
 #ifndef __FP_FRAC_ADD_4
 #define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0)	\
   do {								\
-    _FP_W_TYPE _c1, _c2, _c3;					\
+    int _c1, _c2, _c3;						\
     r0 = x0 + y0;						\
     _c1 = r0 < x0;						\
     r1 = x1 + y1;						\
@@ -558,13 +544,13 @@
 #ifndef __FP_FRAC_SUB_3
 #define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0)		\
   do {								\
-    _FP_W_TYPE _c1, _c2;					\
+    int _c1, _c2;							\
     r0 = x0 - y0;						\
     _c1 = r0 > x0;						\
     r1 = x1 - y1;						\
     _c2 = r1 > x1;						\
     r1 -= _c1;							\
-    _c2 |= _c1 && (y1 == x1);					\
+    _c2 |= r1 > _c1;						\
     r2 = x2 - y2 - _c2;						\
   } while (0)
 #endif
@@ -572,17 +558,17 @@
 #ifndef __FP_FRAC_SUB_4
 #define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0)	\
   do {								\
-    _FP_W_TYPE _c1, _c2, _c3;					\
+    int _c1, _c2, _c3;						\
     r0 = x0 - y0;						\
     _c1 = r0 > x0;						\
     r1 = x1 - y1;						\
     _c2 = r1 > x1;						\
     r1 -= _c1;							\
-    _c2 |= _c1 && (y1 == x1);					\
+    _c2 |= r1 > _c1;						\
     r2 = x2 - y2;						\
     _c3 = r2 > x2;						\
     r2 -= _c2;							\
-    _c3 |= _c2 && (y2 == x2);					\
+    _c3 |= r2 > _c2;						\
     r3 = x3 - y3 - _c3;						\
   } while (0)
 #endif
@@ -623,13 +609,26 @@
  * internally [eg, that 2 word vars are X_f0 and x_f1]. But so do
  * the ones in op-2.h and op-1.h. 
  */
-#define _FP_FRAC_COPY_1_4(D, S)		(D##_f = S##_f[0])
+#define _FP_FRAC_CONV_1_4(dfs, sfs, D, S)				\
+   do {									\
+     if (S##_c != FP_CLS_NAN)						\
+       _FP_FRAC_SRS_4(S, (_FP_WFRACBITS_##sfs - _FP_WFRACBITS_##dfs),	\
+			  _FP_WFRACBITS_##sfs);				\
+     else								\
+       _FP_FRAC_SRL_4(S, (_FP_WFRACBITS_##sfs - _FP_WFRACBITS_##dfs));	\
+     D##_f = S##_f[0];							\
+  } while (0)
 
-#define _FP_FRAC_COPY_2_4(D, S)			\
-do {						\
-  D##_f0 = S##_f[0];				\
-  D##_f1 = S##_f[1];				\
-} while (0)
+#define _FP_FRAC_CONV_2_4(dfs, sfs, D, S)				\
+   do {									\
+     if (S##_c != FP_CLS_NAN)						\
+       _FP_FRAC_SRS_4(S, (_FP_WFRACBITS_##sfs - _FP_WFRACBITS_##dfs),	\
+		      _FP_WFRACBITS_##sfs);				\
+     else								\
+       _FP_FRAC_SRL_4(S, (_FP_WFRACBITS_##sfs - _FP_WFRACBITS_##dfs));	\
+     D##_f0 = S##_f[0];							\
+     D##_f1 = S##_f[1];							\
+  } while (0)
 
 /* Assembly/disassembly for converting to/from integral types.  
  * No shifting or overflow handled here.
@@ -672,15 +671,18 @@ do {						\
     X##_f[3] = (rsize <= 3*_FP_W_TYPE_SIZE ? 0 : r >> 3*_FP_W_TYPE_SIZE); \
   } while (0);
 
-#define _FP_FRAC_COPY_4_1(D, S)			\
-do {						\
-  D##_f[0] = S##_f;				\
-  D##_f[1] = D##_f[2] = D##_f[3] = 0;		\
-} while (0)
-
-#define _FP_FRAC_COPY_4_2(D, S)			\
-do {						\
-  D##_f[0] = S##_f0;				\
-  D##_f[1] = S##_f1;				\
-  D##_f[2] = D##_f[3] = 0;			\
-} while (0)
+#define _FP_FRAC_CONV_4_1(dfs, sfs, D, S)				\
+   do {									\
+     D##_f[0] = S##_f;							\
+     D##_f[1] = D##_f[2] = D##_f[3] = 0;				\
+     _FP_FRAC_SLL_4(D, (_FP_WFRACBITS_##dfs - _FP_WFRACBITS_##sfs));	\
+   } while (0)
+
+#define _FP_FRAC_CONV_4_2(dfs, sfs, D, S)				\
+   do {									\
+     D##_f[0] = S##_f0;							\
+     D##_f[1] = S##_f1;							\
+     D##_f[2] = D##_f[3] = 0;						\
+     _FP_FRAC_SLL_4(D, (_FP_WFRACBITS_##dfs - _FP_WFRACBITS_##sfs));	\
+   } while (0)
+
diff --git a/soft-fp/op-8.h b/soft-fp/op-8.h
index e0612a5e62..789d383da7 100644
--- a/soft-fp/op-8.h
+++ b/soft-fp/op-8.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic eight-word fraction declaration and manipulation.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz) and
@@ -11,15 +11,6 @@
    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
@@ -27,8 +18,8 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 /* We need just a few things from here for op-4, if we ever need some
    other macros, they can be added. */
@@ -92,12 +83,13 @@
     _up = _FP_W_TYPE_SIZE - _down;					\
     for (_s = _i = 0; _i < _skip; ++_i)					\
       _s |= X##_f[_i];							\
+    _s |= X##_f[_i] << _up;						\
+/* s is now != 0 if we want to set the LSbit */				\
     if (!_down)								\
       for (_i = 0; _i <= 7-_skip; ++_i)					\
 	X##_f[_i] = X##_f[_i+_skip];					\
     else								\
       {									\
-	_s |= X##_f[_i] << _up;						\
 	for (_i = 0; _i < 7-_skip; ++_i)				\
 	  X##_f[_i] = X##_f[_i+_skip] >> _down				\
 		      | X##_f[_i+_skip+1] << _up;			\
diff --git a/soft-fp/op-common.h b/soft-fp/op-common.h
index 0aa6e3e05d..3abafa14a8 100644
--- a/soft-fp/op-common.h
+++ b/soft-fp/op-common.h
@@ -1,5 +1,5 @@
 /* Software floating-point emulation. Common operations.
-   Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -11,15 +11,6 @@
    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
@@ -27,11 +18,11 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
-#define _FP_DECL(wc, X)						\
-  _FP_I_TYPE X##_c __attribute__((unused)), X##_s, X##_e;	\
+#define _FP_DECL(wc, X)			\
+  _FP_I_TYPE X##_c, X##_s, X##_e;	\
   _FP_FRAC_DECL_##wc(X)
 
 /*
@@ -80,87 +71,6 @@ do {									\
   }									\
 } while (0)
 
-/* Finish unpacking an fp value in semi-raw mode: the mantissa is
-   shifted by _FP_WORKBITS but the implicit MSB is not inserted and
-   other classification is not done.  */
-#define _FP_UNPACK_SEMIRAW(fs, wc, X)	_FP_FRAC_SLL_##wc(X, _FP_WORKBITS)
-
-/* A semi-raw value has overflowed to infinity.  Adjust the mantissa
-   and exponent appropriately.  */
-#define _FP_OVERFLOW_SEMIRAW(fs, wc, X)			\
-do {							\
-  if (FP_ROUNDMODE == FP_RND_NEAREST			\
-      || (FP_ROUNDMODE == FP_RND_PINF && !X##_s)	\
-      || (FP_ROUNDMODE == FP_RND_MINF && X##_s))	\
-    {							\
-      X##_e = _FP_EXPMAX_##fs;				\
-      _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc);		\
-    }							\
-  else							\
-    {							\
-      X##_e = _FP_EXPMAX_##fs - 1;			\
-      _FP_FRAC_SET_##wc(X, _FP_MAXFRAC_##wc);		\
-    }							\
-    FP_SET_EXCEPTION(FP_EX_INEXACT);			\
-    FP_SET_EXCEPTION(FP_EX_OVERFLOW);			\
-} while (0)
-
-/* Check for a semi-raw value being a signaling NaN and raise the
-   invalid exception if so.  */
-#define _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X)			\
-do {								\
-  if (X##_e == _FP_EXPMAX_##fs					\
-      && !_FP_FRAC_ZEROP_##wc(X)				\
-      && !(_FP_FRAC_HIGH_##fs(X) & _FP_QNANBIT_SH_##fs))	\
-    FP_SET_EXCEPTION(FP_EX_INVALID);				\
-} while (0)
-
-/* Choose a NaN result from an operation on two semi-raw NaN
-   values.  */
-#define _FP_CHOOSENAN_SEMIRAW(fs, wc, R, X, Y, OP)			\
-do {									\
-  /* _FP_CHOOSENAN expects raw values, so shift as required.  */	\
-  _FP_FRAC_SRL_##wc(X, _FP_WORKBITS);					\
-  _FP_FRAC_SRL_##wc(Y, _FP_WORKBITS);					\
-  _FP_CHOOSENAN(fs, wc, R, X, Y, OP);					\
-  _FP_FRAC_SLL_##wc(R, _FP_WORKBITS);					\
-} while (0)
-
-/* Test whether a biased exponent is normal (not zero or maximum).  */
-#define _FP_EXP_NORMAL(fs, wc, X)	(((X##_e + 1) & _FP_EXPMAX_##fs) > 1)
-
-/* Prepare to pack an fp value in semi-raw mode: the mantissa is
-   rounded and shifted right, with the rounding possibly increasing
-   the exponent (including changing a finite value to infinity).  */
-#define _FP_PACK_SEMIRAW(fs, wc, X)				\
-do {								\
-  _FP_ROUND(wc, X);						\
-  if (_FP_FRAC_HIGH_##fs(X)					\
-      & (_FP_OVERFLOW_##fs >> 1))				\
-    {								\
-      _FP_FRAC_HIGH_##fs(X) &= ~(_FP_OVERFLOW_##fs >> 1);	\
-      X##_e++;							\
-      if (X##_e == _FP_EXPMAX_##fs)				\
-	_FP_OVERFLOW_SEMIRAW(fs, wc, X);			\
-    }								\
-  _FP_FRAC_SRL_##wc(X, _FP_WORKBITS);				\
-  if (!_FP_EXP_NORMAL(fs, wc, X) && !_FP_FRAC_ZEROP_##wc(X))	\
-    {								\
-      if (X##_e == 0)						\
-	FP_SET_EXCEPTION(FP_EX_UNDERFLOW);			\
-      else							\
-	{							\
-	  if (!_FP_KEEPNANFRACP)				\
-	    {							\
-	      _FP_FRAC_SET_##wc(X, _FP_NANFRAC_##fs);		\
-	      X##_s = _FP_NANSIGN_##fs;				\
-	    }							\
-	  else							\
-	    _FP_FRAC_HIGH_RAW_##fs(X) |= _FP_QNANBIT_##fs;	\
-	}							\
-    }								\
-} while (0)
-
 /*
  * Before packing the bits back into the native fp result, take care
  * of such mundane things as rounding and overflow.  Also, for some
@@ -292,433 +202,153 @@ do {								\
 
 
 
-/* Addition on semi-raw values.  */
-#define _FP_ADD_INTERNAL(fs, wc, R, X, Y, OP)				 \
-do {									 \
-  if (X##_s == Y##_s)							 \
-    {									 \
-      /* Addition.  */							 \
-      R##_s = X##_s;							 \
-      int ediff = X##_e - Y##_e;					 \
-      if (ediff > 0)							 \
-	{								 \
-	  R##_e = X##_e;						 \
-	  if (Y##_e == 0)						 \
-	    {								 \
-	      /* Y is zero or denormalized.  */				 \
-	      if (_FP_FRAC_ZEROP_##wc(Y))				 \
-		{							 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);			 \
-		  _FP_FRAC_COPY_##wc(R, X);				 \
-		  goto add_done;					 \
-		}							 \
-	      else							 \
-		{							 \
-		  FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		  ediff--;						 \
-		  if (ediff == 0)					 \
-		    {							 \
-		      _FP_FRAC_ADD_##wc(R, X, Y);			 \
-		      goto add3;					 \
-		    }							 \
-		  if (X##_e == _FP_EXPMAX_##fs)				 \
-		    {							 \
-		      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);		 \
-		      _FP_FRAC_COPY_##wc(R, X);				 \
-		      goto add_done;					 \
-		    }							 \
-		  goto add1;						 \
-		}							 \
-	    }								 \
-	  else if (X##_e == _FP_EXPMAX_##fs)				 \
-	    {								 \
-	      /* X is NaN or Inf, Y is normal.  */			 \
-	      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);			 \
-	      _FP_FRAC_COPY_##wc(R, X);					 \
-	      goto add_done;						 \
-	    }								 \
-									 \
-	  /* Insert implicit MSB of Y.  */				 \
-	  _FP_FRAC_HIGH_##fs(Y) |= _FP_IMPLBIT_SH_##fs;			 \
-									 \
-	add1:								 \
-	  /* Shift the mantissa of Y to the right EDIFF steps;		 \
-	     remember to account later for the implicit MSB of X.  */	 \
-	  if (ediff <= _FP_WFRACBITS_##fs)				 \
-	    _FP_FRAC_SRS_##wc(Y, ediff, _FP_WFRACBITS_##fs);		 \
-	  else if (!_FP_FRAC_ZEROP_##wc(Y))				 \
-	    _FP_FRAC_SET_##wc(Y, _FP_MINFRAC_##wc);			 \
-	  _FP_FRAC_ADD_##wc(R, X, Y);					 \
-	}								 \
-      else if (ediff < 0)						 \
-	{								 \
-	  ediff = -ediff;						 \
-	  R##_e = Y##_e;						 \
-	  if (X##_e == 0)						 \
-	    {								 \
-	      /* X is zero or denormalized.  */				 \
-	      if (_FP_FRAC_ZEROP_##wc(X))				 \
-		{							 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);			 \
-		  _FP_FRAC_COPY_##wc(R, Y);				 \
-		  goto add_done;					 \
-		}							 \
-	      else							 \
-		{							 \
-		  FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		  ediff--;						 \
-		  if (ediff == 0)					 \
-		    {							 \
-		      _FP_FRAC_ADD_##wc(R, Y, X);			 \
-		      goto add3;					 \
-		    }							 \
-		  if (Y##_e == _FP_EXPMAX_##fs)				 \
-		    {							 \
-		      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);		 \
-		      _FP_FRAC_COPY_##wc(R, Y);				 \
-		      goto add_done;					 \
-		    }							 \
-		  goto add2;						 \
-		}							 \
-	    }								 \
-	  else if (Y##_e == _FP_EXPMAX_##fs)				 \
-	    {								 \
-	      /* Y is NaN or Inf, X is normal.  */			 \
-	      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);			 \
-	      _FP_FRAC_COPY_##wc(R, Y);					 \
-	      goto add_done;						 \
-	    }								 \
-									 \
-	  /* Insert implicit MSB of X.  */				 \
-	  _FP_FRAC_HIGH_##fs(X) |= _FP_IMPLBIT_SH_##fs;			 \
-									 \
-	add2:								 \
-	  /* Shift the mantissa of X to the right EDIFF steps;		 \
-	     remember to account later for the implicit MSB of Y.  */	 \
-	  if (ediff <= _FP_WFRACBITS_##fs)				 \
-	    _FP_FRAC_SRS_##wc(X, ediff, _FP_WFRACBITS_##fs);		 \
-	  else if (!_FP_FRAC_ZEROP_##wc(X))				 \
-	    _FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc);			 \
-	  _FP_FRAC_ADD_##wc(R, Y, X);					 \
-	}								 \
-      else								 \
-	{								 \
-	  /* ediff == 0.  */						 \
-	  if (!_FP_EXP_NORMAL(fs, wc, X))				 \
-	    {								 \
-	      if (X##_e == 0)						 \
-		{							 \
-		  /* X and Y are zero or denormalized.  */		 \
-		  R##_e = 0;						 \
-		  if (_FP_FRAC_ZEROP_##wc(X))				 \
-		    {							 \
-		      if (!_FP_FRAC_ZEROP_##wc(Y))			 \
-			FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		      _FP_FRAC_COPY_##wc(R, Y);				 \
-		      goto add_done;					 \
-		    }							 \
-		  else if (_FP_FRAC_ZEROP_##wc(Y))			 \
-		    {							 \
-		      FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		      _FP_FRAC_COPY_##wc(R, X);				 \
-		      goto add_done;					 \
-		    }							 \
-		  else							 \
-		    {							 \
-		      FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		      _FP_FRAC_ADD_##wc(R, X, Y);			 \
-		      if (_FP_FRAC_HIGH_##fs(R) & _FP_IMPLBIT_SH_##fs)	 \
-			{						 \
-			  /* Normalized result.  */			 \
-			  _FP_FRAC_HIGH_##fs(R)				 \
-			    &= ~(_FP_W_TYPE)_FP_IMPLBIT_SH_##fs;	 \
-			  R##_e = 1;					 \
-			}						 \
-		      goto add_done;					 \
-		    }							 \
-		}							 \
-	      else							 \
-		{							 \
-		  /* X and Y are NaN or Inf.  */			 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);			 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);			 \
-		  R##_e = _FP_EXPMAX_##fs;				 \
-		  if (_FP_FRAC_ZEROP_##wc(X))				 \
-		    _FP_FRAC_COPY_##wc(R, Y);				 \
-		  else if (_FP_FRAC_ZEROP_##wc(Y))			 \
-		    _FP_FRAC_COPY_##wc(R, X);				 \
-		  else							 \
-		    _FP_CHOOSENAN_SEMIRAW(fs, wc, R, X, Y, OP);		 \
-		  goto add_done;					 \
-		}							 \
-	    }								 \
-	  /* The exponents of X and Y, both normal, are equal.  The	 \
-	     implicit MSBs will always add to increase the		 \
-	     exponent.  */						 \
-	  _FP_FRAC_ADD_##wc(R, X, Y);					 \
-	  R##_e = X##_e + 1;						 \
-	  _FP_FRAC_SRS_##wc(R, 1, _FP_WFRACBITS_##fs);			 \
-	  if (R##_e == _FP_EXPMAX_##fs)					 \
-	    /* Overflow to infinity (depending on rounding mode).  */	 \
-	    _FP_OVERFLOW_SEMIRAW(fs, wc, R);				 \
-	  goto add_done;						 \
-	}								 \
-    add3:								 \
-      if (_FP_FRAC_HIGH_##fs(R) & _FP_IMPLBIT_SH_##fs)			 \
-	{								 \
-	  /* Overflow.  */						 \
-	  _FP_FRAC_HIGH_##fs(R) &= ~(_FP_W_TYPE)_FP_IMPLBIT_SH_##fs;	 \
-	  R##_e++;							 \
-	  _FP_FRAC_SRS_##wc(R, 1, _FP_WFRACBITS_##fs);			 \
-	  if (R##_e == _FP_EXPMAX_##fs)					 \
-	    /* Overflow to infinity (depending on rounding mode).  */	 \
-	    _FP_OVERFLOW_SEMIRAW(fs, wc, R);				 \
-	}								 \
-    add_done: ;								 \
-    }									 \
-  else									 \
-    {									 \
-      /* Subtraction.  */						 \
-      int ediff = X##_e - Y##_e;					 \
-      if (ediff > 0)							 \
-	{								 \
-	  R##_e = X##_e;						 \
-	  R##_s = X##_s;						 \
-	  if (Y##_e == 0)						 \
-	    {								 \
-	      /* Y is zero or denormalized.  */				 \
-	      if (_FP_FRAC_ZEROP_##wc(Y))				 \
-		{							 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);			 \
-		  _FP_FRAC_COPY_##wc(R, X);				 \
-		  goto sub_done;					 \
-		}							 \
-	      else							 \
-		{							 \
-		  FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		  ediff--;						 \
-		  if (ediff == 0)					 \
-		    {							 \
-		      _FP_FRAC_SUB_##wc(R, X, Y);			 \
-		      goto sub3;					 \
-		    }							 \
-		  if (X##_e == _FP_EXPMAX_##fs)				 \
-		    {							 \
-		      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);		 \
-		      _FP_FRAC_COPY_##wc(R, X);				 \
-		      goto sub_done;					 \
-		    }							 \
-		  goto sub1;						 \
-		}							 \
-	    }								 \
-	  else if (X##_e == _FP_EXPMAX_##fs)				 \
-	    {								 \
-	      /* X is NaN or Inf, Y is normal.  */			 \
-	      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);			 \
-	      _FP_FRAC_COPY_##wc(R, X);					 \
-	      goto sub_done;						 \
-	    }								 \
-									 \
-	  /* Insert implicit MSB of Y.  */				 \
-	  _FP_FRAC_HIGH_##fs(Y) |= _FP_IMPLBIT_SH_##fs;			 \
-									 \
-	sub1:								 \
-	  /* Shift the mantissa of Y to the right EDIFF steps;		 \
-	     remember to account later for the implicit MSB of X.  */	 \
-	  if (ediff <= _FP_WFRACBITS_##fs)				 \
-	    _FP_FRAC_SRS_##wc(Y, ediff, _FP_WFRACBITS_##fs);		 \
-	  else if (!_FP_FRAC_ZEROP_##wc(Y))				 \
-	    _FP_FRAC_SET_##wc(Y, _FP_MINFRAC_##wc);			 \
-	  _FP_FRAC_SUB_##wc(R, X, Y);					 \
-	}								 \
-      else if (ediff < 0)						 \
-	{								 \
-	  ediff = -ediff;						 \
-	  R##_e = Y##_e;						 \
-	  R##_s = Y##_s;						 \
-	  if (X##_e == 0)						 \
-	    {								 \
-	      /* X is zero or denormalized.  */				 \
-	      if (_FP_FRAC_ZEROP_##wc(X))				 \
-		{							 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);			 \
-		  _FP_FRAC_COPY_##wc(R, Y);				 \
-		  goto sub_done;					 \
-		}							 \
-	      else							 \
-		{							 \
-		  FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		  ediff--;						 \
-		  if (ediff == 0)					 \
-		    {							 \
-		      _FP_FRAC_SUB_##wc(R, Y, X);			 \
-		      goto sub3;					 \
-		    }							 \
-		  if (Y##_e == _FP_EXPMAX_##fs)				 \
-		    {							 \
-		      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);		 \
-		      _FP_FRAC_COPY_##wc(R, Y);				 \
-		      goto sub_done;					 \
-		    }							 \
-		  goto sub2;						 \
-		}							 \
-	    }								 \
-	  else if (Y##_e == _FP_EXPMAX_##fs)				 \
-	    {								 \
-	      /* Y is NaN or Inf, X is normal.  */			 \
-	      _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);			 \
-	      _FP_FRAC_COPY_##wc(R, Y);					 \
-	      goto sub_done;						 \
-	    }								 \
-									 \
-	  /* Insert implicit MSB of X.  */				 \
-	  _FP_FRAC_HIGH_##fs(X) |= _FP_IMPLBIT_SH_##fs;			 \
-									 \
-	sub2:								 \
-	  /* Shift the mantissa of X to the right EDIFF steps;		 \
-	     remember to account later for the implicit MSB of Y.  */	 \
-	  if (ediff <= _FP_WFRACBITS_##fs)				 \
-	    _FP_FRAC_SRS_##wc(X, ediff, _FP_WFRACBITS_##fs);		 \
-	  else if (!_FP_FRAC_ZEROP_##wc(X))				 \
-	    _FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc);			 \
-	  _FP_FRAC_SUB_##wc(R, Y, X);					 \
-	}								 \
-      else								 \
-	{								 \
-	  /* ediff == 0.  */						 \
-	  if (!_FP_EXP_NORMAL(fs, wc, X))				 \
-	    {								 \
-	      if (X##_e == 0)						 \
-		{							 \
-		  /* X and Y are zero or denormalized.  */		 \
-		  R##_e = 0;						 \
-		  if (_FP_FRAC_ZEROP_##wc(X))				 \
-		    {							 \
-		      _FP_FRAC_COPY_##wc(R, Y);				 \
-		      if (_FP_FRAC_ZEROP_##wc(Y))			 \
-			R##_s = (FP_ROUNDMODE == FP_RND_MINF);		 \
-		      else						 \
-			{						 \
-			  FP_SET_EXCEPTION(FP_EX_DENORM);		 \
-			  R##_s = Y##_s;				 \
-			}						 \
-		      goto sub_done;					 \
-		    }							 \
-		  else if (_FP_FRAC_ZEROP_##wc(Y))			 \
-		    {							 \
-		      FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		      _FP_FRAC_COPY_##wc(R, X);				 \
-		      R##_s = X##_s;					 \
-		      goto sub_done;					 \
-		    }							 \
-		  else							 \
-		    {							 \
-		      FP_SET_EXCEPTION(FP_EX_DENORM);			 \
-		      _FP_FRAC_SUB_##wc(R, X, Y);			 \
-		      R##_s = X##_s;					 \
-		      if (_FP_FRAC_HIGH_##fs(R) & _FP_IMPLBIT_SH_##fs)	 \
-			{						 \
-			  /* |X| < |Y|, negate result.  */		 \
-			  _FP_FRAC_SUB_##wc(R, Y, X);			 \
-			  R##_s = Y##_s;				 \
-			}						 \
-		      else if (_FP_FRAC_ZEROP_##wc(R))			 \
-			R##_s = (FP_ROUNDMODE == FP_RND_MINF);		 \
-		      goto sub_done;					 \
-		    }							 \
-		}							 \
-	      else							 \
-		{							 \
-		  /* X and Y are NaN or Inf, of opposite signs.  */	 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X);			 \
-		  _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, Y);			 \
-		  R##_e = _FP_EXPMAX_##fs;				 \
-		  if (_FP_FRAC_ZEROP_##wc(X))				 \
-		    {							 \
-		      if (_FP_FRAC_ZEROP_##wc(Y))			 \
-			{						 \
-			  /* Inf - Inf.  */				 \
-			  R##_s = _FP_NANSIGN_##fs;			 \
-			  _FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs);	 \
-			  _FP_FRAC_SLL_##wc(R, _FP_WORKBITS);		 \
-			  FP_SET_EXCEPTION(FP_EX_INVALID);		 \
-			}						 \
-		      else						 \
-			{						 \
-			  /* Inf - NaN.  */				 \
-			  R##_s = Y##_s;				 \
-			  _FP_FRAC_COPY_##wc(R, Y);			 \
-			}						 \
-		    }							 \
-		  else							 \
-		    {							 \
-		      if (_FP_FRAC_ZEROP_##wc(Y))			 \
-			{						 \
-			  /* NaN - Inf.  */				 \
-			  R##_s = X##_s;				 \
-			  _FP_FRAC_COPY_##wc(R, X);			 \
-			}						 \
-		      else						 \
-			{						 \
-			  /* NaN - NaN.  */				 \
-			  _FP_CHOOSENAN_SEMIRAW(fs, wc, R, X, Y, OP);	 \
-			}						 \
-		    }							 \
-		  goto sub_done;					 \
-		}							 \
-	    }								 \
-	  /* The exponents of X and Y, both normal, are equal.  The	 \
-	     implicit MSBs cancel.  */					 \
-	  R##_e = X##_e;						 \
-	  _FP_FRAC_SUB_##wc(R, X, Y);					 \
-	  R##_s = X##_s;						 \
-	  if (_FP_FRAC_HIGH_##fs(R) & _FP_IMPLBIT_SH_##fs)		 \
-	    {								 \
-	      /* |X| < |Y|, negate result.  */				 \
-	      _FP_FRAC_SUB_##wc(R, Y, X);				 \
-	      R##_s = Y##_s;						 \
-	    }								 \
-	  else if (_FP_FRAC_ZEROP_##wc(R))				 \
-	    {								 \
-	      R##_e = 0;						 \
-	      R##_s = (FP_ROUNDMODE == FP_RND_MINF);			 \
-	      goto sub_done;						 \
-	    }								 \
-	  goto norm;							 \
-	}								 \
-    sub3:								 \
-      if (_FP_FRAC_HIGH_##fs(R) & _FP_IMPLBIT_SH_##fs)			 \
-	{								 \
-	  int diff;							 \
-	  /* Carry into most significant bit of larger one of X and Y,	 \
-	     canceling it; renormalize.  */				 \
-	  _FP_FRAC_HIGH_##fs(R) &= _FP_IMPLBIT_SH_##fs - 1;		 \
-	norm:								 \
-	  _FP_FRAC_CLZ_##wc(diff, R);					 \
-	  diff -= _FP_WFRACXBITS_##fs;					 \
-	  _FP_FRAC_SLL_##wc(R, diff);					 \
-	  if (R##_e <= diff)						 \
-	    {								 \
-	      /* R is denormalized.  */					 \
-	      diff = diff - R##_e + 1;					 \
-	      _FP_FRAC_SRS_##wc(R, diff, _FP_WFRACBITS_##fs);		 \
-	      R##_e = 0;						 \
-	    }								 \
-	  else								 \
-	    {								 \
-	      R##_e -= diff;						 \
-	      _FP_FRAC_HIGH_##fs(R) &= ~(_FP_W_TYPE)_FP_IMPLBIT_SH_##fs; \
-	    }								 \
-	}								 \
-    sub_done: ;								 \
-    }									 \
+/*
+ * Main addition routine.  The input values should be cooked.
+ */
+
+#define _FP_ADD_INTERNAL(fs, wc, R, X, Y, OP)				     \
+do {									     \
+  switch (_FP_CLS_COMBINE(X##_c, Y##_c))				     \
+  {									     \
+  case _FP_CLS_COMBINE(FP_CLS_NORMAL,FP_CLS_NORMAL):			     \
+    {									     \
+      /* shift the smaller number so that its exponent matches the larger */ \
+      _FP_I_TYPE diff = X##_e - Y##_e;					     \
+									     \
+      if (diff < 0)							     \
+	{								     \
+	  diff = -diff;							     \
+	  if (diff <= _FP_WFRACBITS_##fs)				     \
+	    _FP_FRAC_SRS_##wc(X, diff, _FP_WFRACBITS_##fs);		     \
+	  else if (!_FP_FRAC_ZEROP_##wc(X))				     \
+	    _FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc);			     \
+	  R##_e = Y##_e;						     \
+	}								     \
+      else								     \
+	{								     \
+	  if (diff > 0)							     \
+	    {								     \
+	      if (diff <= _FP_WFRACBITS_##fs)				     \
+	        _FP_FRAC_SRS_##wc(Y, diff, _FP_WFRACBITS_##fs);		     \
+	      else if (!_FP_FRAC_ZEROP_##wc(Y))				     \
+	        _FP_FRAC_SET_##wc(Y, _FP_MINFRAC_##wc);			     \
+	    }								     \
+	  R##_e = X##_e;						     \
+	}								     \
+									     \
+      R##_c = FP_CLS_NORMAL;						     \
+									     \
+      if (X##_s == Y##_s)						     \
+	{								     \
+	  R##_s = X##_s;						     \
+	  _FP_FRAC_ADD_##wc(R, X, Y);					     \
+	  if (_FP_FRAC_OVERP_##wc(fs, R))				     \
+	    {								     \
+	      _FP_FRAC_SRS_##wc(R, 1, _FP_WFRACBITS_##fs);		     \
+	      R##_e++;							     \
+	    }								     \
+	}								     \
+      else								     \
+	{								     \
+	  R##_s = X##_s;						     \
+	  _FP_FRAC_SUB_##wc(R, X, Y);					     \
+	  if (_FP_FRAC_ZEROP_##wc(R))					     \
+	    {								     \
+	      /* return an exact zero */				     \
+	      if (FP_ROUNDMODE == FP_RND_MINF)				     \
+		R##_s |= Y##_s;						     \
+	      else							     \
+		R##_s &= Y##_s;						     \
+	      R##_c = FP_CLS_ZERO;					     \
+	    }								     \
+	  else								     \
+	    {								     \
+	      if (_FP_FRAC_NEGP_##wc(R))				     \
+		{							     \
+		  _FP_FRAC_SUB_##wc(R, Y, X);				     \
+		  R##_s = Y##_s;					     \
+		}							     \
+									     \
+	      /* renormalize after subtraction */			     \
+	      _FP_FRAC_CLZ_##wc(diff, R);				     \
+	      diff -= _FP_WFRACXBITS_##fs;				     \
+	      if (diff)							     \
+		{							     \
+		  R##_e -= diff;					     \
+		  _FP_FRAC_SLL_##wc(R, diff);				     \
+		}							     \
+	    }								     \
+	}								     \
+      break;								     \
+    }									     \
+									     \
+  case _FP_CLS_COMBINE(FP_CLS_NAN,FP_CLS_NAN):				     \
+    _FP_CHOOSENAN(fs, wc, R, X, Y, OP);					     \
+    break;								     \
+									     \
+  case _FP_CLS_COMBINE(FP_CLS_NORMAL,FP_CLS_ZERO):			     \
+    R##_e = X##_e;							     \
+  case _FP_CLS_COMBINE(FP_CLS_NAN,FP_CLS_NORMAL):			     \
+  case _FP_CLS_COMBINE(FP_CLS_NAN,FP_CLS_INF):				     \
+  case _FP_CLS_COMBINE(FP_CLS_NAN,FP_CLS_ZERO):				     \
+    _FP_FRAC_COPY_##wc(R, X);						     \
+    R##_s = X##_s;							     \
+    R##_c = X##_c;							     \
+    break;								     \
+									     \
+  case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_NORMAL):			     \
+    R##_e = Y##_e;							     \
+  case _FP_CLS_COMBINE(FP_CLS_NORMAL,FP_CLS_NAN):			     \
+  case _FP_CLS_COMBINE(FP_CLS_INF,FP_CLS_NAN):				     \
+  case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_NAN):				     \
+    _FP_FRAC_COPY_##wc(R, Y);						     \
+    R##_s = Y##_s;							     \
+    R##_c = Y##_c;							     \
+    break;								     \
+									     \
+  case _FP_CLS_COMBINE(FP_CLS_INF,FP_CLS_INF):				     \
+    if (X##_s != Y##_s)							     \
+      {									     \
+	/* +INF + -INF => NAN */					     \
+	_FP_FRAC_SET_##wc(R, _FP_NANFRAC_##fs);				     \
+	R##_s = _FP_NANSIGN_##fs;					     \
+	R##_c = FP_CLS_NAN;						     \
+	FP_SET_EXCEPTION(FP_EX_INVALID);				     \
+	break;								     \
+      }									     \
+    /* FALLTHRU */							     \
+									     \
+  case _FP_CLS_COMBINE(FP_CLS_INF,FP_CLS_NORMAL):			     \
+  case _FP_CLS_COMBINE(FP_CLS_INF,FP_CLS_ZERO):				     \
+    R##_s = X##_s;							     \
+    R##_c = FP_CLS_INF;							     \
+    break;								     \
+									     \
+  case _FP_CLS_COMBINE(FP_CLS_NORMAL,FP_CLS_INF):			     \
+  case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_INF):				     \
+    R##_s = Y##_s;							     \
+    R##_c = FP_CLS_INF;							     \
+    break;								     \
+									     \
+  case _FP_CLS_COMBINE(FP_CLS_ZERO,FP_CLS_ZERO):			     \
+    /* make sure the sign is correct */					     \
+    if (FP_ROUNDMODE == FP_RND_MINF)					     \
+      R##_s = X##_s | Y##_s;						     \
+    else								     \
+      R##_s = X##_s & Y##_s;						     \
+    R##_c = FP_CLS_ZERO;						     \
+    break;								     \
+									     \
+  default:								     \
+    abort();								     \
+  }									     \
 } while (0)
 
 #define _FP_ADD(fs, wc, R, X, Y) _FP_ADD_INTERNAL(fs, wc, R, X, Y, '+')
-#define _FP_SUB(fs, wc, R, X, Y)					    \
-  do {									    \
-    if (!(Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc(Y))) Y##_s ^= 1; \
-    _FP_ADD_INTERNAL(fs, wc, R, X, Y, '-');				    \
+#define _FP_SUB(fs, wc, R, X, Y)					     \
+  do {									     \
+    if (Y##_c != FP_CLS_NAN) Y##_s ^= 1;				     \
+    _FP_ADD_INTERNAL(fs, wc, R, X, Y, '-');				     \
   } while (0)
 
 
@@ -907,28 +537,20 @@ do {							\
 
 /* Simplification for strict equality.  */
 
-#define _FP_CMP_EQ(fs, wc, ret, X, Y)					    \
-  do {									    \
-    /* NANs are unordered */						    \
-    if ((X##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc(X))		    \
-	|| (Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc(Y)))	    \
-      {									    \
-	ret = 1;							    \
-      }									    \
-    else								    \
-      {									    \
-	ret = !(X##_e == Y##_e						    \
-		&& _FP_FRAC_EQ_##wc(X, Y)				    \
-		&& (X##_s == Y##_s || (!X##_e && _FP_FRAC_ZEROP_##wc(X)))); \
-      }									    \
-  } while (0)
-
-/* Version to test unordered.  */
-
-#define _FP_CMP_UNORD(fs, wc, ret, X, Y)				\
-  do {									\
-    ret = ((X##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc(X))	\
-	   || (Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc(Y)));	\
+#define _FP_CMP_EQ(fs, wc, ret, X, Y)					  \
+  do {									  \
+    /* NANs are unordered */						  \
+    if ((X##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc(X))		  \
+	|| (Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc(Y)))	  \
+      {									  \
+	ret = 1;							  \
+      }									  \
+    else								  \
+      {									  \
+	ret = !(X##_e == Y##_e						  \
+		&& _FP_FRAC_EQ_##wc(X, Y)				  \
+		&& (X##_s == Y##_s || !X##_e && _FP_FRAC_ZEROP_##wc(X))); \
+      }									  \
   } while (0)
 
 /*
@@ -986,280 +608,115 @@ do {									\
   } while (0)
 
 /*
- * Convert from FP to integer.  Input is raw.
+ * Convert from FP to integer
  */
 
 /* RSIGNED can have following values:
  * 0:  the number is required to be 0..(2^rsize)-1, if not, NV is set plus
- *     the result is either 0 or (2^rsize)-1 depending on the sign in such
- *     case.
- * 1:  the number is required to be -(2^(rsize-1))..(2^(rsize-1))-1, if not,
- *     NV is set plus the result is either -(2^(rsize-1)) or (2^(rsize-1))-1
- *     depending on the sign in such case.
+ *     the result is either 0 or (2^rsize)-1 depending on the sign in such case.
+ * 1:  the number is required to be -(2^(rsize-1))..(2^(rsize-1))-1, if not, NV is
+ *     set plus the result is either -(2^(rsize-1)) or (2^(rsize-1))-1 depending
+ *     on the sign in such case.
  * -1: the number is required to be -(2^(rsize-1))..(2^rsize)-1, if not, NV is
- *     set plus the result is either -(2^(rsize-1)) or (2^(rsize-1))-1
- *     depending on the sign in such case.
+ *     set plus the result is either -(2^(rsize-1)) or (2^(rsize-1))-1 depending
+ *     on the sign in such case.
  */
-#define _FP_TO_INT(fs, wc, r, X, rsize, rsigned)			\
-do {									\
-  if (X##_e < _FP_EXPBIAS_##fs)						\
-    {									\
-      r = 0;								\
-      if (X##_e == 0)							\
-	{								\
-	  if (!_FP_FRAC_ZEROP_##wc(X))					\
-	    {								\
-	      FP_SET_EXCEPTION(FP_EX_INEXACT);				\
-	      FP_SET_EXCEPTION(FP_EX_DENORM);				\
-	    }								\
-	}								\
-      else								\
-	FP_SET_EXCEPTION(FP_EX_INEXACT);				\
-    }									\
-  else if (X##_e >= _FP_EXPBIAS_##fs + rsize - (rsigned > 0 || X##_s)	\
-	   || (!rsigned && X##_s))					\
-    {									\
-      /* Overflow or converting to the most negative integer.  */	\
-      if (rsigned)							\
-	{								\
-	  r = 1;							\
-	  r <<= rsize - 1;						\
-	  r -= 1 - X##_s;						\
-	} else {							\
-	  r = 0;							\
-	  if (X##_s)							\
-	    r = ~r;							\
-	}								\
-									\
-      if (rsigned && X##_s && X##_e == _FP_EXPBIAS_##fs + rsize - 1)	\
-	{								\
-	  /* Possibly converting to most negative integer; check the	\
-	     mantissa.  */						\
-	  int inexact = 0;						\
-	  (void)((_FP_FRACBITS_##fs > rsize)				\
-		 ? ({ _FP_FRAC_SRST_##wc(X, inexact,			\
-					 _FP_FRACBITS_##fs - rsize,	\
-					 _FP_FRACBITS_##fs); 0; })	\
-		 : 0);							\
-	  if (!_FP_FRAC_ZEROP_##wc(X))					\
-	    FP_SET_EXCEPTION(FP_EX_INVALID);				\
-	  else if (inexact)						\
-	    FP_SET_EXCEPTION(FP_EX_INEXACT);				\
-	}								\
-      else								\
-	FP_SET_EXCEPTION(FP_EX_INVALID);				\
-    }									\
-  else									\
-    {									\
-      _FP_FRAC_HIGH_RAW_##fs(X) |= _FP_IMPLBIT_##fs;			\
-      if (X##_e >= _FP_EXPBIAS_##fs + _FP_FRACBITS_##fs - 1)		\
-	{								\
-	  _FP_FRAC_ASSEMBLE_##wc(r, X, rsize);				\
-	  r <<= X##_e - _FP_EXPBIAS_##fs - _FP_FRACBITS_##fs + 1;	\
-	}								\
-      else								\
-	{								\
-	  int inexact;							\
-	  _FP_FRAC_SRST_##wc(X, inexact,				\
-			    (_FP_FRACBITS_##fs + _FP_EXPBIAS_##fs - 1	\
-			     - X##_e),					\
-			    _FP_FRACBITS_##fs);				\
-	  if (inexact)							\
-	    FP_SET_EXCEPTION(FP_EX_INEXACT);				\
-	  _FP_FRAC_ASSEMBLE_##wc(r, X, rsize);				\
-	}								\
-      if (rsigned && X##_s)						\
-	r = -r;								\
-    }									\
-} while (0)
-
-/* Convert integer to fp.  Output is raw.  RTYPE is unsigned even if
-   input is signed.  */
-#define _FP_FROM_INT(fs, wc, X, r, rsize, rtype)			     \
-  do {									     \
-    if (r)								     \
-      {									     \
-	rtype ur_;							     \
-									     \
-	if ((X##_s = (r < 0)))						     \
-	  r = -(rtype)r;						     \
-									     \
-	ur_ = (rtype) r;						     \
-	(void)((rsize <= _FP_W_TYPE_SIZE)				     \
-	       ? ({							     \
-		    int lz_;						     \
-		    __FP_CLZ(lz_, (_FP_W_TYPE)ur_);			     \
-		    X##_e = _FP_EXPBIAS_##fs + _FP_W_TYPE_SIZE - 1 - lz_;    \
-		  })							     \
-	       : ((rsize <= 2 * _FP_W_TYPE_SIZE)			     \
-		  ? ({							     \
-		       int lz_;						     \
-		       __FP_CLZ_2(lz_, (_FP_W_TYPE)(ur_ >> _FP_W_TYPE_SIZE), \
-				  (_FP_W_TYPE)ur_);			     \
-		       X##_e = (_FP_EXPBIAS_##fs + 2 * _FP_W_TYPE_SIZE - 1   \
-				- lz_);					     \
-		     })							     \
-		  : (abort(), 0)));					     \
-									     \
-	if (rsize - 1 + _FP_EXPBIAS_##fs >= _FP_EXPMAX_##fs		     \
-	    && X##_e >= _FP_EXPMAX_##fs)				     \
-	  {								     \
-	    /* Exponent too big; overflow to infinity.  (May also	     \
-	       happen after rounding below.)  */			     \
-	    _FP_OVERFLOW_SEMIRAW(fs, wc, X);				     \
-	    goto pack_semiraw;						     \
-	  }								     \
-									     \
-	if (rsize <= _FP_FRACBITS_##fs					     \
-	    || X##_e < _FP_EXPBIAS_##fs + _FP_FRACBITS_##fs)		     \
-	  {								     \
-	    /* Exactly representable; shift left.  */			     \
-	    _FP_FRAC_DISASSEMBLE_##wc(X, ur_, rsize);			     \
-	    _FP_FRAC_SLL_##wc(X, (_FP_EXPBIAS_##fs			     \
-				  + _FP_FRACBITS_##fs - 1 - X##_e));	     \
-	  }								     \
-	else								     \
-	  {								     \
-	    /* More bits in integer than in floating type; need to	     \
-	       round.  */						     \
-	    if (_FP_EXPBIAS_##fs + _FP_WFRACBITS_##fs - 1 < X##_e)	     \
-	      ur_ = ((ur_ >> (X##_e - _FP_EXPBIAS_##fs			     \
-			      - _FP_WFRACBITS_##fs + 1))		     \
-		     | ((ur_ << (rsize - (X##_e - _FP_EXPBIAS_##fs	     \
-					  - _FP_WFRACBITS_##fs + 1)))	     \
-			!= 0));						     \
-	    _FP_FRAC_DISASSEMBLE_##wc(X, ur_, rsize);			     \
-	    if ((_FP_EXPBIAS_##fs + _FP_WFRACBITS_##fs - 1 - X##_e) > 0)     \
-	      _FP_FRAC_SLL_##wc(X, (_FP_EXPBIAS_##fs			     \
-				    + _FP_WFRACBITS_##fs - 1 - X##_e));	     \
-	    _FP_FRAC_HIGH_##fs(X) &= ~(_FP_W_TYPE)_FP_IMPLBIT_SH_##fs;	     \
-	  pack_semiraw:							     \
-	    _FP_PACK_SEMIRAW(fs, wc, X);				     \
-	  }								     \
-      }									     \
-    else								     \
-      {									     \
-	X##_s = 0;							     \
-	X##_e = 0;							     \
-	_FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc);			     \
-      }									     \
+#define _FP_TO_INT(fs, wc, r, X, rsize, rsigned)				\
+  do {										\
+    switch (X##_c)								\
+      {										\
+      case FP_CLS_NORMAL:							\
+	if (X##_e < 0)								\
+	  {									\
+	    FP_SET_EXCEPTION(FP_EX_INEXACT);					\
+	  case FP_CLS_ZERO:							\
+	    r = 0;								\
+	  }									\
+	else if (X##_e >= rsize - (rsigned > 0 || X##_s)			\
+		 || (!rsigned && X##_s))					\
+	  {	/* overflow */							\
+	  case FP_CLS_NAN:                                                      \
+	  case FP_CLS_INF:							\
+	    if (rsigned)							\
+	      {									\
+		r = 1;								\
+		r <<= rsize - 1;						\
+		r -= 1 - X##_s;							\
+	      } else {								\
+		r = 0;								\
+		if (X##_s)							\
+		  r = ~r;							\
+	      }									\
+	    FP_SET_EXCEPTION(FP_EX_INVALID);					\
+	  }									\
+	else									\
+	  {									\
+	    if (_FP_W_TYPE_SIZE*wc < rsize)					\
+	      {									\
+		_FP_FRAC_ASSEMBLE_##wc(r, X, rsize);				\
+		r <<= X##_e - _FP_WFRACBITS_##fs;				\
+	      }									\
+	    else								\
+	      {									\
+		if (X##_e >= _FP_WFRACBITS_##fs)				\
+		  _FP_FRAC_SLL_##wc(X, (X##_e - _FP_WFRACBITS_##fs + 1));	\
+		else if (X##_e < _FP_WFRACBITS_##fs - 1)			\
+		  {								\
+		    _FP_FRAC_SRS_##wc(X, (_FP_WFRACBITS_##fs - X##_e - 2),	\
+				      _FP_WFRACBITS_##fs);			\
+		    if (_FP_FRAC_LOW_##wc(X) & 1)				\
+		      FP_SET_EXCEPTION(FP_EX_INEXACT);				\
+		    _FP_FRAC_SRL_##wc(X, 1);					\
+		  }								\
+		_FP_FRAC_ASSEMBLE_##wc(r, X, rsize);				\
+	      }									\
+	    if (rsigned && X##_s)						\
+	      r = -r;								\
+	  }									\
+	break;									\
+      }										\
   } while (0)
 
+#define _FP_FROM_INT(fs, wc, X, r, rsize, rtype)			\
+  do {									\
+    if (r)								\
+      {									\
+        unsigned rtype ur_;						\
+	X##_c = FP_CLS_NORMAL;						\
+									\
+	if ((X##_s = (r < 0)))						\
+	  r = -r;							\
+									\
+	ur_ = (unsigned rtype) r;					\
+	if (rsize <= _FP_W_TYPE_SIZE)					\
+	  __FP_CLZ(X##_e, ur_);						\
+	else								\
+	  __FP_CLZ_2(X##_e, (_FP_W_TYPE)(ur_ >> _FP_W_TYPE_SIZE), 	\
+		     (_FP_W_TYPE)ur_);					\
+	if (rsize < _FP_W_TYPE_SIZE)					\
+		X##_e -= (_FP_W_TYPE_SIZE - rsize);			\
+	X##_e = rsize - X##_e - 1;					\
+									\
+	if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs < X##_e)	\
+	  __FP_FRAC_SRS_1(ur_, (X##_e - _FP_WFRACBITS_##fs + 1), rsize);\
+	_FP_FRAC_DISASSEMBLE_##wc(X, ur_, rsize);			\
+	if ((_FP_WFRACBITS_##fs - X##_e - 1) > 0)			\
+	  _FP_FRAC_SLL_##wc(X, (_FP_WFRACBITS_##fs - X##_e - 1));	\
+      }									\
+    else								\
+      {									\
+	X##_c = FP_CLS_ZERO, X##_s = 0;					\
+      }									\
+  } while (0)
 
-/* Extend from a narrower floating-point format to a wider one.  Input
-   and output are raw.  */
-#define FP_EXTEND(dfs,sfs,dwc,swc,D,S)					 \
-do {									 \
-  if (_FP_FRACBITS_##dfs < _FP_FRACBITS_##sfs				 \
-      || (_FP_EXPMAX_##dfs - _FP_EXPBIAS_##dfs				 \
-	  < _FP_EXPMAX_##sfs - _FP_EXPBIAS_##sfs)			 \
-      || _FP_EXPBIAS_##dfs < _FP_EXPBIAS_##sfs + _FP_FRACBITS_##sfs - 1) \
-    abort();								 \
-  D##_s = S##_s;							 \
-  _FP_FRAC_COPY_##dwc##_##swc(D, S);					 \
-  if (_FP_EXP_NORMAL(sfs, swc, S))					 \
-    {									 \
-      D##_e = S##_e + _FP_EXPBIAS_##dfs - _FP_EXPBIAS_##sfs;		 \
-      _FP_FRAC_SLL_##dwc(D, (_FP_FRACBITS_##dfs - _FP_FRACBITS_##sfs));	 \
-    }									 \
-  else									 \
-    {									 \
-      if (S##_e == 0)							 \
-	{								 \
-	  if (_FP_FRAC_ZEROP_##swc(S))					 \
-	    D##_e = 0;							 \
-	  else								 \
-	    {								 \
-	      int _lz;							 \
-	      FP_SET_EXCEPTION(FP_EX_DENORM);				 \
-	      _FP_FRAC_CLZ_##swc(_lz, S);				 \
-	      _FP_FRAC_SLL_##dwc(D,					 \
-				 _lz + _FP_FRACBITS_##dfs		 \
-				 - _FP_FRACTBITS_##sfs);		 \
-	      D##_e = (_FP_EXPBIAS_##dfs - _FP_EXPBIAS_##sfs + 1	 \
-		       + _FP_FRACXBITS_##sfs - _lz);			 \
-	    }								 \
-	}								 \
-      else								 \
-	{								 \
-	  D##_e = _FP_EXPMAX_##dfs;					 \
-	  if (!_FP_FRAC_ZEROP_##swc(S))					 \
-	    {								 \
-	      if (!(_FP_FRAC_HIGH_RAW_##sfs(S) & _FP_QNANBIT_##sfs))	 \
-		FP_SET_EXCEPTION(FP_EX_INVALID);			 \
-	      _FP_FRAC_SLL_##dwc(D, (_FP_FRACBITS_##dfs			 \
-				     - _FP_FRACBITS_##sfs));		 \
-	    }								 \
-	}								 \
-    }									 \
-} while (0)
 
-/* Truncate from a wider floating-point format to a narrower one.
-   Input and output are semi-raw.  */
-#define FP_TRUNC(dfs,sfs,dwc,swc,D,S)					     \
-do {									     \
-  if (_FP_FRACBITS_##sfs < _FP_FRACBITS_##dfs				     \
-      || _FP_EXPBIAS_##sfs < _FP_EXPBIAS_##dfs + _FP_FRACBITS_##dfs - 1)     \
-    abort();								     \
-  D##_s = S##_s;							     \
-  if (_FP_EXP_NORMAL(sfs, swc, S))					     \
-    {									     \
-      D##_e = S##_e + _FP_EXPBIAS_##dfs - _FP_EXPBIAS_##sfs;		     \
-      if (D##_e >= _FP_EXPMAX_##dfs)					     \
-	_FP_OVERFLOW_SEMIRAW(dfs, dwc, D);				     \
-      else								     \
-	{								     \
-	  if (D##_e <= 0)						     \
-	    {								     \
-	      if (D##_e <= 1 - _FP_FRACBITS_##dfs)			     \
-		_FP_FRAC_SET_##swc(S, _FP_ZEROFRAC_##swc);		     \
-	      else							     \
-		{							     \
-		  _FP_FRAC_HIGH_##sfs(S) |= _FP_IMPLBIT_SH_##sfs;	     \
-		  _FP_FRAC_SRS_##swc(S, (_FP_WFRACBITS_##sfs		     \
-					 - _FP_WFRACBITS_##dfs + 1 - D##_e), \
-				     _FP_WFRACBITS_##sfs);		     \
-		}							     \
-	      D##_e = 0;						     \
-	    }								     \
-	  else								     \
-	    _FP_FRAC_SRS_##swc(S, (_FP_WFRACBITS_##sfs			     \
-				   - _FP_WFRACBITS_##dfs),		     \
-			       _FP_WFRACBITS_##sfs);			     \
-	  _FP_FRAC_COPY_##dwc##_##swc(D, S);				     \
-	}								     \
-    }									     \
-  else									     \
-    {									     \
-      if (S##_e == 0)							     \
-	{								     \
-	  D##_e = 0;							     \
-	  _FP_FRAC_SET_##dwc(D, _FP_ZEROFRAC_##dwc);			     \
-	  if (!_FP_FRAC_ZEROP_##swc(S))					     \
-	    {								     \
-	      FP_SET_EXCEPTION(FP_EX_DENORM);				     \
-	      FP_SET_EXCEPTION(FP_EX_INEXACT);				     \
-	    }								     \
-	}								     \
-      else								     \
-	{								     \
-	  D##_e = _FP_EXPMAX_##dfs;					     \
-	  if (_FP_FRAC_ZEROP_##swc(S))					     \
-	    _FP_FRAC_SET_##dwc(D, _FP_ZEROFRAC_##dwc);			     \
-	  else								     \
-	    {								     \
-	      _FP_CHECK_SIGNAN_SEMIRAW(sfs, swc, S);			     \
-	      _FP_FRAC_SRL_##swc(S, (_FP_WFRACBITS_##sfs		     \
-				     - _FP_WFRACBITS_##dfs));		     \
-	      _FP_FRAC_COPY_##dwc##_##swc(D, S);			     \
-	      /* Semi-raw NaN must have all workbits cleared.  */	     \
-	      _FP_FRAC_LOW_##dwc(D)					     \
-		&= ~(_FP_W_TYPE) ((1 << _FP_WORKBITS) - 1);		     \
-	      _FP_FRAC_HIGH_##dfs(D) |= _FP_QNANBIT_SH_##dfs;		     \
-	    }								     \
-	}								     \
-    }									     \
-} while (0)
+#define FP_CONV(dfs,sfs,dwc,swc,D,S)			\
+  do {							\
+    _FP_FRAC_CONV_##dwc##_##swc(dfs, sfs, D, S);	\
+    D##_e = S##_e;					\
+    D##_c = S##_c;					\
+    D##_s = S##_s;					\
+  } while (0)
 
 /*
  * Helper primitives.
@@ -1268,18 +725,40 @@ do {									     \
 /* Count leading zeros in a word.  */
 
 #ifndef __FP_CLZ
-/* GCC 3.4 and later provide the builtins for us.  */
-#define __FP_CLZ(r, x)							      \
-  do {									      \
-    if (sizeof (_FP_W_TYPE) == sizeof (unsigned int))			      \
-      r = __builtin_clz (x);						      \
-    else if (sizeof (_FP_W_TYPE) == sizeof (unsigned long))		      \
-      r = __builtin_clzl (x);						      \
-    else if (sizeof (_FP_W_TYPE) == sizeof (unsigned long long))	      \
-      r = __builtin_clzll (x);						      \
-    else								      \
-      abort ();								      \
+#if _FP_W_TYPE_SIZE < 64
+/* this is just to shut the compiler up about shifts > word length -- PMM 02/1998 */
+#define __FP_CLZ(r, x)				\
+  do {						\
+    _FP_W_TYPE _t = (x);			\
+    r = _FP_W_TYPE_SIZE - 1;			\
+    if (_t > 0xffff) r -= 16;			\
+    if (_t > 0xffff) _t >>= 16;			\
+    if (_t > 0xff) r -= 8;			\
+    if (_t > 0xff) _t >>= 8;			\
+    if (_t & 0xf0) r -= 4;			\
+    if (_t & 0xf0) _t >>= 4;			\
+    if (_t & 0xc) r -= 2;			\
+    if (_t & 0xc) _t >>= 2;			\
+    if (_t & 0x2) r -= 1;			\
+  } while (0)
+#else /* not _FP_W_TYPE_SIZE < 64 */
+#define __FP_CLZ(r, x)				\
+  do {						\
+    _FP_W_TYPE _t = (x);			\
+    r = _FP_W_TYPE_SIZE - 1;			\
+    if (_t > 0xffffffff) r -= 32;		\
+    if (_t > 0xffffffff) _t >>= 32;		\
+    if (_t > 0xffff) r -= 16;			\
+    if (_t > 0xffff) _t >>= 16;			\
+    if (_t > 0xff) r -= 8;			\
+    if (_t > 0xff) _t >>= 8;			\
+    if (_t & 0xf0) r -= 4;			\
+    if (_t & 0xf0) _t >>= 4;			\
+    if (_t & 0xc) r -= 2;			\
+    if (_t & 0xc) _t >>= 2;			\
+    if (_t & 0x2) r -= 1;			\
   } while (0)
+#endif /* not _FP_W_TYPE_SIZE < 64 */
 #endif /* ndef __FP_CLZ */
 
 #define _FP_DIV_HELP_imm(q, r, n, d)		\
diff --git a/soft-fp/quad.h b/soft-fp/quad.h
index d7840ff066..33ee4d4b20 100644
--- a/soft-fp/quad.h
+++ b/soft-fp/quad.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Quad Precision.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -12,15 +12,6 @@
    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
@@ -28,8 +19,8 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #if _FP_W_TYPE_SIZE < 32
 #error "Here's a nickel, kid. Go buy yourself a real computer."
@@ -51,22 +42,16 @@
 
 #define _FP_QNANBIT_Q		\
 	((_FP_W_TYPE)1 << (_FP_FRACBITS_Q-2) % _FP_W_TYPE_SIZE)
-#define _FP_QNANBIT_SH_Q		\
-	((_FP_W_TYPE)1 << (_FP_FRACBITS_Q-2+_FP_WORKBITS) % _FP_W_TYPE_SIZE)
 #define _FP_IMPLBIT_Q		\
 	((_FP_W_TYPE)1 << (_FP_FRACBITS_Q-1) % _FP_W_TYPE_SIZE)
-#define _FP_IMPLBIT_SH_Q		\
-	((_FP_W_TYPE)1 << (_FP_FRACBITS_Q-1+_FP_WORKBITS) % _FP_W_TYPE_SIZE)
 #define _FP_OVERFLOW_Q		\
 	((_FP_W_TYPE)1 << (_FP_WFRACBITS_Q % _FP_W_TYPE_SIZE))
 
-typedef float TFtype __attribute__((mode(TF)));
-
 #if _FP_W_TYPE_SIZE < 64
 
 union _FP_UNION_Q
 {
-   TFtype flt;
+   long double flt;
    struct 
    {
 #if __BYTE_ORDER == __BIG_ENDIAN
@@ -110,18 +95,6 @@ union _FP_UNION_Q
     _FP_UNPACK_CANONICAL(Q,4,X);	\
   } while (0)
 
-#define FP_UNPACK_SEMIRAW_Q(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_4(Q,X,val);		\
-    _FP_UNPACK_SEMIRAW(Q,4,X);		\
-  } while (0)
-
-#define FP_UNPACK_SEMIRAW_QP(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_4_P(Q,X,val);	\
-    _FP_UNPACK_SEMIRAW(Q,4,X);		\
-  } while (0)
-
 #define FP_PACK_Q(val,X)		\
   do {					\
     _FP_PACK_CANONICAL(Q,4,X);		\
@@ -135,19 +108,6 @@ union _FP_UNION_Q
       _FP_PACK_RAW_4_P(Q,val,X);	\
   } while (0)
 
-#define FP_PACK_SEMIRAW_Q(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(Q,4,X);		\
-    _FP_PACK_RAW_4(Q,val,X);		\
-  } while (0)
-
-#define FP_PACK_SEMIRAW_QP(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(Q,4,X);		\
-    if (!FP_INHIBIT_RESULTS)		\
-      _FP_PACK_RAW_4_P(Q,val,X);	\
-  } while (0)
-
 #define FP_ISSIGNAN_Q(X)		_FP_ISSIGNAN(Q,4,X)
 #define FP_NEG_Q(R,X)			_FP_NEG(Q,4,R,X)
 #define FP_ADD_Q(R,X,Y)			_FP_ADD(Q,4,R,X,Y)
@@ -159,7 +119,6 @@ union _FP_UNION_Q
 
 #define FP_CMP_Q(r,X,Y,un)	_FP_CMP(Q,4,r,X,Y,un)
 #define FP_CMP_EQ_Q(r,X,Y)	_FP_CMP_EQ(Q,4,r,X,Y)
-#define FP_CMP_UNORD_Q(r,X,Y)	_FP_CMP_UNORD(Q,4,r,X,Y)
 
 #define FP_TO_INT_Q(r,X,rsz,rsg)	_FP_TO_INT(Q,4,r,X,rsz,rsg)
 #define FP_FROM_INT_Q(X,r,rs,rt)	_FP_FROM_INT(Q,4,X,r,rs,rt)
@@ -170,7 +129,7 @@ union _FP_UNION_Q
 #else   /* not _FP_W_TYPE_SIZE < 64 */
 union _FP_UNION_Q
 {
-  TFtype flt /* __attribute__((mode(TF))) */ ;
+  long double flt /* __attribute__((mode(TF))) */ ;
   struct {
     _FP_W_TYPE a, b;
   } longs;
@@ -211,18 +170,6 @@ union _FP_UNION_Q
     _FP_UNPACK_CANONICAL(Q,2,X);	\
   } while (0)
 
-#define FP_UNPACK_SEMIRAW_Q(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_2(Q,X,val);		\
-    _FP_UNPACK_SEMIRAW(Q,2,X);		\
-  } while (0)
-
-#define FP_UNPACK_SEMIRAW_QP(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_2_P(Q,X,val);	\
-    _FP_UNPACK_SEMIRAW(Q,2,X);		\
-  } while (0)
-
 #define FP_PACK_Q(val,X)		\
   do {					\
     _FP_PACK_CANONICAL(Q,2,X);		\
@@ -236,19 +183,6 @@ union _FP_UNION_Q
       _FP_PACK_RAW_2_P(Q,val,X);	\
   } while (0)
 
-#define FP_PACK_SEMIRAW_Q(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(Q,2,X);		\
-    _FP_PACK_RAW_2(Q,val,X);		\
-  } while (0)
-
-#define FP_PACK_SEMIRAW_QP(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(Q,2,X);		\
-    if (!FP_INHIBIT_RESULTS)		\
-      _FP_PACK_RAW_2_P(Q,val,X);	\
-  } while (0)
-
 #define FP_ISSIGNAN_Q(X)		_FP_ISSIGNAN(Q,2,X)
 #define FP_NEG_Q(R,X)			_FP_NEG(Q,2,R,X)
 #define FP_ADD_Q(R,X,Y)			_FP_ADD(Q,2,R,X,Y)
@@ -260,7 +194,6 @@ union _FP_UNION_Q
 
 #define FP_CMP_Q(r,X,Y,un)	_FP_CMP(Q,2,r,X,Y,un)
 #define FP_CMP_EQ_Q(r,X,Y)	_FP_CMP_EQ(Q,2,r,X,Y)
-#define FP_CMP_UNORD_Q(r,X,Y)	_FP_CMP_UNORD(Q,2,r,X,Y)
 
 #define FP_TO_INT_Q(r,X,rsz,rsg)	_FP_TO_INT(Q,2,r,X,rsz,rsg)
 #define FP_FROM_INT_Q(X,r,rs,rt)	_FP_FROM_INT(Q,2,X,r,rs,rt)
diff --git a/soft-fp/single.h b/soft-fp/single.h
index 9c3734adf4..b571d5058a 100644
--- a/soft-fp/single.h
+++ b/soft-fp/single.h
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Single Precision.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -12,15 +12,6 @@
    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
@@ -28,36 +19,30 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #if _FP_W_TYPE_SIZE < 32
 #error "Here's a nickel kid.  Go buy yourself a real computer."
 #endif
 
-#define _FP_FRACTBITS_S		_FP_W_TYPE_SIZE
-
 #define _FP_FRACBITS_S		24
-#define _FP_FRACXBITS_S		(_FP_FRACTBITS_S - _FP_FRACBITS_S)
+#define _FP_FRACXBITS_S		(_FP_W_TYPE_SIZE - _FP_FRACBITS_S)
 #define _FP_WFRACBITS_S		(_FP_WORKBITS + _FP_FRACBITS_S)
-#define _FP_WFRACXBITS_S	(_FP_FRACTBITS_S - _FP_WFRACBITS_S)
+#define _FP_WFRACXBITS_S	(_FP_W_TYPE_SIZE - _FP_WFRACBITS_S)
 #define _FP_EXPBITS_S		8
 #define _FP_EXPBIAS_S		127
 #define _FP_EXPMAX_S		255
 #define _FP_QNANBIT_S		((_FP_W_TYPE)1 << (_FP_FRACBITS_S-2))
-#define _FP_QNANBIT_SH_S	((_FP_W_TYPE)1 << (_FP_FRACBITS_S-2+_FP_WORKBITS))
 #define _FP_IMPLBIT_S		((_FP_W_TYPE)1 << (_FP_FRACBITS_S-1))
-#define _FP_IMPLBIT_SH_S	((_FP_W_TYPE)1 << (_FP_FRACBITS_S-1+_FP_WORKBITS))
 #define _FP_OVERFLOW_S		((_FP_W_TYPE)1 << (_FP_WFRACBITS_S))
 
 /* The implementation of _FP_MUL_MEAT_S and _FP_DIV_MEAT_S should be
    chosen by the target machine.  */
 
-typedef float SFtype __attribute__((mode(SF)));
-
 union _FP_UNION_S
 {
-  SFtype flt;
+  float flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign : 1;
@@ -93,18 +78,6 @@ union _FP_UNION_S
     _FP_UNPACK_CANONICAL(S,1,X);	\
   } while (0)
 
-#define FP_UNPACK_SEMIRAW_S(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_1(S,X,val);		\
-    _FP_UNPACK_SEMIRAW(S,1,X);		\
-  } while (0)
-
-#define FP_UNPACK_SEMIRAW_SP(X,val)	\
-  do {					\
-    _FP_UNPACK_RAW_1_P(S,X,val);	\
-    _FP_UNPACK_SEMIRAW(S,1,X);		\
-  } while (0)
-
 #define FP_PACK_S(val,X)		\
   do {					\
     _FP_PACK_CANONICAL(S,1,X);		\
@@ -118,19 +91,6 @@ union _FP_UNION_S
       _FP_PACK_RAW_1_P(S,val,X);	\
   } while (0)
 
-#define FP_PACK_SEMIRAW_S(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(S,1,X);		\
-    _FP_PACK_RAW_1(S,val,X);		\
-  } while (0)
-
-#define FP_PACK_SEMIRAW_SP(val,X)	\
-  do {					\
-    _FP_PACK_SEMIRAW(S,1,X);		\
-    if (!FP_INHIBIT_RESULTS)		\
-      _FP_PACK_RAW_1_P(S,val,X);	\
-  } while (0)
-
 #define FP_ISSIGNAN_S(X)		_FP_ISSIGNAN(S,1,X)
 #define FP_NEG_S(R,X)			_FP_NEG(S,1,R,X)
 #define FP_ADD_S(R,X,Y)			_FP_ADD(S,1,R,X,Y)
@@ -142,7 +102,6 @@ union _FP_UNION_S
 
 #define FP_CMP_S(r,X,Y,un)	_FP_CMP(S,1,r,X,Y,un)
 #define FP_CMP_EQ_S(r,X,Y)	_FP_CMP_EQ(S,1,r,X,Y)
-#define FP_CMP_UNORD_S(r,X,Y)	_FP_CMP_UNORD(S,1,r,X,Y)
 
 #define FP_TO_INT_S(r,X,rsz,rsg)	_FP_TO_INT(S,1,r,X,rsz,rsg)
 #define FP_FROM_INT_S(X,r,rs,rt)	_FP_FROM_INT(S,1,X,r,rs,rt)
diff --git a/soft-fp/soft-fp.h b/soft-fp/soft-fp.h
index dbf080e7f4..18779f88d8 100644
--- a/soft-fp/soft-fp.h
+++ b/soft-fp/soft-fp.h
@@ -1,6 +1,5 @@
 /* Software floating-point emulation.
-   Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006
-	Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -12,15 +11,6 @@
    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
@@ -28,25 +18,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #ifndef SOFT_FP_H
 #define SOFT_FP_H
 
-#ifdef _LIBC
-#include <sfp-machine.h>
-#else
 #include "sfp-machine.h"
-#endif
 
 /* Allow sfp-machine to have its own byte order definitions. */
 #ifndef __BYTE_ORDER
-#ifdef _LIBC
 #include <endian.h>
-#else
-#error "endianness not defined by sfp-machine.h"
-#endif
 #endif
 
 #define _FP_WORKBITS		3
@@ -189,21 +171,8 @@ typedef unsigned int UHWtype __attribute__((mode(HI)));
 typedef USItype UHWtype;
 #endif
 
-#define SI_BITS		(__CHAR_BIT__ * (int)sizeof(SItype))
-#define DI_BITS		(__CHAR_BIT__ * (int)sizeof(DItype))
-
 #ifndef umul_ppmm
-#ifdef _LIBC
 #include <stdlib/longlong.h>
-#else
-#include "longlong.h"
-#endif
-#endif
-
-#ifdef _LIBC
-#include <stdlib.h>
-#else
-extern void abort (void);
 #endif
 
 #endif
diff --git a/soft-fp/sqrtdf2.c b/soft-fp/sqrtdf2.c
index 90601a3748..48efad9349 100644
--- a/soft-fp/sqrtdf2.c
+++ b/soft-fp/sqrtdf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return sqrt(a)
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __sqrtdf2(DFtype a)
+double __sqrtdf2(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_D(A, a);
diff --git a/soft-fp/sqrtsf2.c b/soft-fp/sqrtsf2.c
index 9102b8c3a7..1c8aead6eb 100644
--- a/soft-fp/sqrtsf2.c
+++ b/soft-fp/sqrtsf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return sqrt(a)
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __sqrtsf2(SFtype a)
+float __sqrtsf2(float a)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_S(A, a);
diff --git a/soft-fp/sqrttf2.c b/soft-fp/sqrttf2.c
index 5026ae19ad..241f42dbb4 100644
--- a/soft-fp/sqrttf2.c
+++ b/soft-fp/sqrttf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return sqrt(a)
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,17 +17,17 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __sqrttf2(TFtype a)
+long double __sqrttf2(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_Q(A, a);
diff --git a/soft-fp/subdf3.c b/soft-fp/subdf3.c
index 3978b52998..11a33395f2 100644
--- a/soft-fp/subdf3.c
+++ b/soft-fp/subdf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a - b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,23 +17,23 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 
-DFtype __subdf3(DFtype a, DFtype b)
+double __subdf3(double a, double b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_D(A, a);
-  FP_UNPACK_SEMIRAW_D(B, b);
+  FP_UNPACK_D(A, a);
+  FP_UNPACK_D(B, b);
   FP_SUB_D(R, A, B);
-  FP_PACK_SEMIRAW_D(r, R);
+  FP_PACK_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/subsf3.c b/soft-fp/subsf3.c
index f1cbdd1ff1..84d418b612 100644
--- a/soft-fp/subsf3.c
+++ b/soft-fp/subsf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a - b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,23 +17,23 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 
-SFtype __subsf3(SFtype a, SFtype b)
+float __subsf3(float a, float b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_S(A, a);
-  FP_UNPACK_SEMIRAW_S(B, b);
+  FP_UNPACK_S(A, a);
+  FP_UNPACK_S(B, b);
   FP_SUB_S(R, A, B);
-  FP_PACK_SEMIRAW_S(r, R);
+  FP_PACK_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/subtf3.c b/soft-fp/subtf3.c
index 7ba4c8c5ea..448d398a95 100644
--- a/soft-fp/subtf3.c
+++ b/soft-fp/subtf3.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a - b
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,23 +17,23 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "quad.h"
 
-TFtype __subtf3(TFtype a, TFtype b)
+long double __subtf3(long double a, long double b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  TFtype r;
+  long double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_Q(A, a);
-  FP_UNPACK_SEMIRAW_Q(B, b);
+  FP_UNPACK_Q(A, a);
+  FP_UNPACK_Q(B, b);
   FP_SUB_Q(R, A, B);
-  FP_PACK_SEMIRAW_Q(r, R);
+  FP_PACK_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/truncdfsf2.c b/soft-fp/truncdfsf2.c
index bd953912e9..f7459513d6 100644
--- a/soft-fp/truncdfsf2.c
+++ b/soft-fp/truncdfsf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE double into IEEE single
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,28 +17,28 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 #include "double.h"
 
-SFtype __truncdfsf2(DFtype a)
+float __truncdfsf2(double a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_D(A, a);
+  FP_UNPACK_D(A, a);
 #if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
-  FP_TRUNC(S,D,1,2,R,A);
+  FP_CONV(S,D,1,2,R,A);
 #else
-  FP_TRUNC(S,D,1,1,R,A);
+  FP_CONV(S,D,1,1,R,A);
 #endif
-  FP_PACK_SEMIRAW_S(r, R);
+  FP_PACK_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/trunctfdf2.c b/soft-fp/trunctfdf2.c
index c3827b08ab..18ce1d56e8 100644
--- a/soft-fp/trunctfdf2.c
+++ b/soft-fp/trunctfdf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE quad into IEEE double
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,28 +17,28 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "double.h"
 #include "quad.h"
 
-DFtype __trunctfdf2(TFtype a)
+double __trunctfdf2(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   FP_DECL_D(R);
-  DFtype r;
+  double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_TRUNC(D,Q,2,4,R,A);
+  FP_CONV(D,Q,2,4,R,A);
 #else
-  FP_TRUNC(D,Q,1,2,R,A);
+  FP_CONV(D,Q,1,2,R,A);
 #endif
-  FP_PACK_SEMIRAW_D(r, R);
+  FP_PACK_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/trunctfsf2.c b/soft-fp/trunctfsf2.c
index 676c937e20..32d658ab67 100644
--- a/soft-fp/trunctfsf2.c
+++ b/soft-fp/trunctfsf2.c
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE quad into IEEE single
-   Copyright (C) 1997,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
@@ -10,15 +10,6 @@
    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
@@ -26,28 +17,28 @@
 
    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.  */
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
 #include "soft-fp.h"
 #include "single.h"
 #include "quad.h"
 
-SFtype __trunctfsf2(TFtype a)
+float __trunctfsf2(long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   FP_DECL_S(R);
-  SFtype r;
+  float r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_TRUNC(S,Q,1,4,R,A);
+  FP_CONV(S,Q,1,4,R,A);
 #else
-  FP_TRUNC(S,Q,1,2,R,A);
+  FP_CONV(S,Q,1,2,R,A);
 #endif
-  FP_PACK_SEMIRAW_S(r, R);
+  FP_PACK_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff --git a/soft-fp/unorddf2.c b/soft-fp/unorddf2.c
deleted file mode 100644
index c83a563275..0000000000
--- a/soft-fp/unorddf2.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Software floating-point emulation.
-   Return 1 iff a or b is a NaN, 0 otherwise.
-   Copyright (C) 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Joseph Myers (joseph@codesourcery.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"
-
-int
-__unorddf2(DFtype a, DFtype b)
-{
-  FP_DECL_D(A); FP_DECL_D(B);
-  int r;
-
-  FP_UNPACK_RAW_D(A, a);
-  FP_UNPACK_RAW_D(B, b);
-  FP_CMP_UNORD_D(r, A, B);
-
-  return r;
-}
diff --git a/soft-fp/unordsf2.c b/soft-fp/unordsf2.c
deleted file mode 100644
index 8de7563566..0000000000
--- a/soft-fp/unordsf2.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Software floating-point emulation.
-   Return 1 iff a or b is a NaN, 0 otherwise.
-   Copyright (C) 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Joseph Myers (joseph@codesourcery.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"
-
-int
-__unordsf2(SFtype a, SFtype b)
-{
-  FP_DECL_S(A);
-  FP_DECL_S(B);
-  int r;
-
-  FP_UNPACK_RAW_S(A, a);
-  FP_UNPACK_RAW_S(B, b);
-  FP_CMP_UNORD_S(r, A, B);
-
-  return r;
-}
diff --git a/soft-fp/unordtf2.c b/soft-fp/unordtf2.c
deleted file mode 100644
index 134b1d09b8..0000000000
--- a/soft-fp/unordtf2.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Software floating-point emulation.
-   Return 1 iff a or b is a NaN, 0 otherwise.
-   Copyright (C) 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Joseph Myers (joseph@codesourcery.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"
-
-int
-__unordtf2(TFtype a, TFtype b)
-{
-  FP_DECL_Q(A);
-  FP_DECL_Q(B);
-  int r;
-
-  FP_UNPACK_RAW_Q(A, a);
-  FP_UNPACK_RAW_Q(B, b);
-  FP_CMP_UNORD_Q(r, A, B);
-
-  return r;
-}