This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: soft-fp speedup patch


As a followup to my previous patch 
<http://sources.redhat.com/ml/libc-alpha/2006-02/msg00028.html>, and 
relative to glibc with that patch applied, this patch makes further 
cleanups in preparation for using this code in libgcc.  The form of the 
code after this patch is exactly the form I intend to import into GCC 
apart from using GPL plus libgcc exception instead of LGPL for the libgcc 
copy (as approved by RMS).

There is one soft-fp interface changes in this patch (with consequent 
changes to sysdeps code): _FP_FROM_INT now takes an unsigned type as an 
argument, instead of a signed type to which "unsigned " is prepended; this 
allows the argument to be a typedef.  Apart from this, the code is cleaned 
up.  Function arguments and returns are defined using typedefs defined 
with __attribute__((mode(...))), as these are how the interfaces to these 
functions are defined by GCC.  Many compilation warnings are avoided.  In 
particular, warnings for shifts out of range in conditional code are 
avoided by using ? : and statement expressions in place of if ... else 
....  Some _LIBC conditionals are added to facilitate using the same code 
in GCC and glibc.

As with the previous patch, this one fixes newly discovered bugs in the 
original code.  The *_SRS* macros in op-2.h, op-4.h and op-8.h could, when 
shifting by a multiple of _FP_W_TYPE_SIZE, shift a word left by exactly 
_FP_W_TYPE_SIZE, which is undefined behavior in C.  Depending on the code 
generated for such shifts this could lead to incorrect setting of the 
sticky bit on some processors (where such a shift returns the original 
value, say, instead of 0).

2006-02-18  Joseph S. Myers  <joseph@codesourcery.com>

	* soft-fp/single.h (SFtype): Define.
	(union _FP_UNION_S): Use it.
	* soft-fp/double.h (DFtype): Define.
	(union _FP_UNION_D): Use it.
	* soft-fp/extended.h (XFtype): Define.
	(union _FP_UNION_E): Use it.
	* soft-fp/quad.h (TFtype): Define.
	(union _FP_UNION_Q): Use it.
	* soft-fp/soft-fp.h: Add _LIBC conditionals.
	(SI_BITS, DI_BITS): Define.
	* soft-fp/op-common.h (_FP_DECL): Add __attribute__((unused)) for
	X##_c.
	(_FP_CMP_EQ): Use parentheses for && inside ||.
	(_FP_TO_INT): Use statement expressions in conditional controlling
	constant shift.
	(_FP_FROM_INT): Likewise.  Take unsigned type as argument.
	* soft-fp/op-2.h (_FP_FRAC_SLL_2, _FP_FRAC_SRL_2, _FP_FRAC_SRST_2,
	_FP_FRAC_SRS_2, _FP_FRAC_ASSEMBLE_2): Use statement expressions in
	conditional controlling possibly constant shift.
	(_FP_FRAC_SRST_2, _FP_FRAC_SRS_2): Avoid left shift by exactly
	_FP_W_TYPE_SIZE.
	(_FP_FRAC_GT_2, _FP_FRAC_GE_2): Use parentheses for && inside ||.
	* soft-fp/op-4.h (_FP_FRAC_SRST_4): Avoid left shift by exactly
	_FP_W_TYPE_SIZE.
	(__FP_FRAC_ADD_3, __FP_FRAC_ADD_4, __FP_FRAC_SUB_3,
	__FP_FRAC_SUB_4): Use _FP_W_TYPE for carry flags.
	* soft-fp/op-8.h (_FP_FRAC_SRS_8): Avoid left shift by exactly
	_FP_W_TYPE_SIZE.
	* soft-fp/floatdidf.c: Pass unsigned type and macro for type size.
	* soft-fp/floatdisf.c: Likewise.
	* soft-fp/floatditf.c: Likewise.
	* soft-fp/floatsidf.c: Likewise.
	* soft-fp/floatsisf.c: Likewise.
	* soft-fp/floatsitf.c: Likewise.
	* soft-fp/floatundidf.c: Likewise.
	* soft-fp/floatundisf.c: Likewise.
	* soft-fp/floatunditf.c: Likewise.
	* soft-fp/floatunsidf.c: Likewise.
	* soft-fp/floatunsisf.c: Likewise.
	* soft-fp/floatunsitf.c: Likewise.
	* soft-fp/fixdfdi.c: Pass macro for type size.
	* soft-fp/fixdfsi.c: Likewise.
	* soft-fp/fixsfdi.c: Likewise.
	* soft-fp/fixsfsi.c: Likewise.
	* soft-fp/fixtfdi.c: Likewise.
	* soft-fp/fixtfsi.c: Likewise.
	* soft-fp/fixunsdfdi.c: Likewise.
	* soft-fp/fixunsdfsi.c: Likewise.
	* soft-fp/fixunssfdi.c: Likewise.
	* soft-fp/fixunssfsi.c: Likewise.
	* soft-fp/fixunstfdi.c: Likewise.
	* soft-fp/fixunstfsi.c: Likewise.
	* sysdeps/alpha/soft-fp/ots_cvtqux.c: Pass unsigned type.
	* sysdeps/alpha/soft-fp/ots_cvtqx.c: Likewise.
	* sysdeps/powerpc/soft-fp/q_itoq.c: Likewise.
	* sysdeps/powerpc/soft-fp/q_lltoq.c: Likewise.
	* sysdeps/powerpc/soft-fp/q_ulltoq.c: Likewise.
	* sysdeps/powerpc/soft-fp/q_utoq.c: Likewise.
	* sysdeps/sparc/sparc32/soft-fp/q_itoq.c: Likewise.
	* sysdeps/sparc/sparc32/soft-fp/q_lltoq.c: Likewise.
	* sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c: Likewise.
	* sysdeps/sparc/sparc32/soft-fp/q_utoq.c: Likewise.
	* sysdeps/sparc/sparc64/soft-fp/qp_itoq.c: Likewise.
	* sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c: Likewise.
	* sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c: Likewise.
	* sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c: Likewise.
	* soft-fp/adddf3.c: Use typedefs for argument and return types.
        * soft-fp/addsf3.c: Likewise.
        * soft-fp/addtf3.c: Likewise.
        * soft-fp/divdf3.c: Likewise.
        * soft-fp/divsf3.c: Likewise.
        * soft-fp/divtf3.c: Likewise.
        * soft-fp/eqdf2.c: Likewise.
        * soft-fp/eqsf2.c: Likewise.
        * soft-fp/eqtf2.c: Likewise.
        * soft-fp/extenddftf2.c: Likewise.
        * soft-fp/extendsfdf2.c: Likewise.
        * soft-fp/extendsftf2.c: Likewise.
        * soft-fp/fixdfdi.c: Likewise.
        * soft-fp/fixdfsi.c: Likewise.
        * soft-fp/fixsfdi.c: Likewise.
        * soft-fp/fixsfsi.c: Likewise.
        * soft-fp/fixtfdi.c: Likewise.
        * soft-fp/fixtfsi.c: Likewise.
        * soft-fp/fixunsdfdi.c: Likewise.
        * soft-fp/fixunsdfsi.c: Likewise.
        * soft-fp/fixunssfdi.c: Likewise.
        * soft-fp/fixunssfsi.c: Likewise.
        * soft-fp/fixunstfdi.c: Likewise.
        * soft-fp/fixunstfsi.c: Likewise.
        * soft-fp/floatdidf.c: Likewise.
        * soft-fp/floatdisf.c: Likewise.
        * soft-fp/floatditf.c: Likewise.
        * soft-fp/floatsidf.c: Likewise.
        * soft-fp/floatsisf.c: Likewise.
        * soft-fp/floatsitf.c: Likewise.
        * soft-fp/floatundidf.c: Likewise.
        * soft-fp/floatundisf.c: Likewise.
        * soft-fp/floatunditf.c: Likewise.
        * soft-fp/floatunsidf.c: Likewise.
        * soft-fp/floatunsisf.c: Likewise.
        * soft-fp/floatunsitf.c: Likewise.
        * soft-fp/gedf2.c: Likewise.
        * soft-fp/gesf2.c: Likewise.
        * soft-fp/getf2.c: Likewise.
        * soft-fp/ledf2.c: Likewise.
        * soft-fp/lesf2.c: Likewise.
        * soft-fp/letf2.c: Likewise.
        * soft-fp/muldf3.c: Likewise.
        * soft-fp/mulsf3.c: Likewise.
        * soft-fp/multf3.c: Likewise.
        * soft-fp/negdf2.c: Likewise.
        * soft-fp/negsf2.c: Likewise.
        * soft-fp/negtf2.c: Likewise.
        * soft-fp/sqrtdf2.c: Likewise.
        * soft-fp/sqrtsf2.c: Likewise.
        * soft-fp/sqrttf2.c: Likewise.
        * soft-fp/subdf3.c: Likewise.
        * soft-fp/subsf3.c: Likewise.
        * soft-fp/subtf3.c: Likewise.
        * soft-fp/truncdfsf2.c: Likewise.
        * soft-fp/trunctfdf2.c: Likewise.
        * soft-fp/trunctfsf2.c: Likewise.
        * soft-fp/unorddf2.c: Likewise.
        * soft-fp/unordsf2.c: Likewise.
        * soft-fp/unordtf2.c: Likewise.

diff -rupN libc.softfp/soft-fp/adddf3.c libc.softfp2/soft-fp/adddf3.c
--- libc.softfp/soft-fp/adddf3.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/adddf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __adddf3(double a, double b)
+DFtype __adddf3(DFtype a, DFtype b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_D(A, a);
diff -rupN libc.softfp/soft-fp/addsf3.c libc.softfp2/soft-fp/addsf3.c
--- libc.softfp/soft-fp/addsf3.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/addsf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __addsf3(float a, float b)
+SFtype __addsf3(SFtype a, SFtype b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_S(A, a);
diff -rupN libc.softfp/soft-fp/addtf3.c libc.softfp2/soft-fp/addtf3.c
--- libc.softfp/soft-fp/addtf3.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/addtf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __addtf3(long double a, long double b)
+TFtype __addtf3(TFtype a, TFtype b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_Q(A, a);
diff -rupN libc.softfp/soft-fp/divdf3.c libc.softfp2/soft-fp/divdf3.c
--- libc.softfp/soft-fp/divdf3.c	2001-07-06 10:53:02.000000000 +0000
+++ libc.softfp2/soft-fp/divdf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __divdf3(double a, double b)
+DFtype __divdf3(DFtype a, DFtype b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_D(A, a);
diff -rupN libc.softfp/soft-fp/divsf3.c libc.softfp2/soft-fp/divsf3.c
--- libc.softfp/soft-fp/divsf3.c	2001-07-06 10:53:02.000000000 +0000
+++ libc.softfp2/soft-fp/divsf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __divsf3(float a, float b)
+SFtype __divsf3(SFtype a, SFtype b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_S(A, a);
diff -rupN libc.softfp/soft-fp/divtf3.c libc.softfp2/soft-fp/divtf3.c
--- libc.softfp/soft-fp/divtf3.c	2001-07-06 10:53:02.000000000 +0000
+++ libc.softfp2/soft-fp/divtf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __divtf3(long double a, long double b)
+TFtype __divtf3(TFtype a, TFtype b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_Q(A, a);
diff -rupN libc.softfp/soft-fp/double.h libc.softfp2/soft-fp/double.h
--- libc.softfp/soft-fp/double.h	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/double.h	2006-02-18 01:32:32.000000000 +0000
@@ -51,11 +51,13 @@
 #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
 {
-  double flt;
+  DFtype flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign  : 1;
@@ -154,7 +156,7 @@ union _FP_UNION_D
 
 union _FP_UNION_D
 {
-  double flt;
+  DFtype flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign : 1;
diff -rupN libc.softfp/soft-fp/eqdf2.c libc.softfp2/soft-fp/eqdf2.c
--- libc.softfp/soft-fp/eqdf2.c	2001-07-06 10:53:02.000000000 +0000
+++ libc.softfp2/soft-fp/eqdf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "double.h"
 
-int __eqdf2(double a, double b)
+int __eqdf2(DFtype a, DFtype b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B);
diff -rupN libc.softfp/soft-fp/eqsf2.c libc.softfp2/soft-fp/eqsf2.c
--- libc.softfp/soft-fp/eqsf2.c	2001-07-06 10:53:02.000000000 +0000
+++ libc.softfp2/soft-fp/eqsf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "single.h"
 
-int __eqsf2(float a, float b)
+int __eqsf2(SFtype a, SFtype b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B);
diff -rupN libc.softfp/soft-fp/eqtf2.c libc.softfp2/soft-fp/eqtf2.c
--- libc.softfp/soft-fp/eqtf2.c	2001-07-06 10:53:02.000000000 +0000
+++ libc.softfp2/soft-fp/eqtf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-int __eqtf2(long double a, long double b)
+int __eqtf2(TFtype a, TFtype b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B);
diff -rupN libc.softfp/soft-fp/extenddftf2.c libc.softfp2/soft-fp/extenddftf2.c
--- libc.softfp/soft-fp/extenddftf2.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/extenddftf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -24,12 +24,12 @@
 #include "double.h"
 #include "quad.h"
 
-long double __extenddftf2(double a)
+TFtype __extenddftf2(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_RAW_D(A, a);
diff -rupN libc.softfp/soft-fp/extended.h libc.softfp2/soft-fp/extended.h
--- libc.softfp/soft-fp/extended.h	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/extended.h	2006-02-18 01:32:32.000000000 +0000
@@ -48,11 +48,13 @@
 #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
 {
-   long double flt;
+   XFtype flt;
    struct 
    {
 #if __BYTE_ORDER == __BIG_ENDIAN
@@ -263,7 +265,7 @@ union _FP_UNION_E
 #else   /* not _FP_W_TYPE_SIZE < 64 */
 union _FP_UNION_E
 {
-  long double flt /* __attribute__((mode(TF))) */ ;
+  XFtype flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned long pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
diff -rupN libc.softfp/soft-fp/extendsfdf2.c libc.softfp2/soft-fp/extendsfdf2.c
--- libc.softfp/soft-fp/extendsfdf2.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/extendsfdf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -24,12 +24,12 @@
 #include "single.h"
 #include "double.h"
 
-double __extendsfdf2(float a)
+DFtype __extendsfdf2(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_RAW_S(A, a);
diff -rupN libc.softfp/soft-fp/extendsftf2.c libc.softfp2/soft-fp/extendsftf2.c
--- libc.softfp/soft-fp/extendsftf2.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/extendsftf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -24,12 +24,12 @@
 #include "single.h"
 #include "quad.h"
 
-long double __extendsftf2(float a)
+TFtype __extendsftf2(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_RAW_S(A, a);
diff -rupN libc.softfp/soft-fp/fixdfdi.c libc.softfp2/soft-fp/fixdfdi.c
--- libc.softfp/soft-fp/fixdfdi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixdfdi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "double.h"
 
-DItype __fixdfdi(double a)
+DItype __fixdfdi(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   UDItype r;
 
   FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, 64, 1);
+  FP_TO_INT_D(r, A, DI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixdfsi.c libc.softfp2/soft-fp/fixdfsi.c
--- libc.softfp/soft-fp/fixdfsi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixdfsi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "double.h"
 
-SItype __fixdfsi(double a)
+SItype __fixdfsi(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   USItype r;
 
   FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, 32, 1);
+  FP_TO_INT_D(r, A, SI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixsfdi.c libc.softfp2/soft-fp/fixsfdi.c
--- libc.softfp/soft-fp/fixsfdi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixsfdi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "single.h"
 
-DItype __fixsfdi(float a)
+DItype __fixsfdi(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   UDItype r;
 
   FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, 64, 1);
+  FP_TO_INT_S(r, A, DI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixsfsi.c libc.softfp2/soft-fp/fixsfsi.c
--- libc.softfp/soft-fp/fixsfsi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixsfsi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "single.h"
 
-SItype __fixsfsi(float a)
+SItype __fixsfsi(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   USItype r;
 
   FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, 32, 1);
+  FP_TO_INT_S(r, A, SI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixtfdi.c libc.softfp2/soft-fp/fixtfdi.c
--- libc.softfp/soft-fp/fixtfdi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixtfdi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-DItype __fixtfdi(long double a)
+DItype __fixtfdi(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   UDItype r;
 
   FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, 64, 1);
+  FP_TO_INT_Q(r, A, DI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixtfsi.c libc.softfp2/soft-fp/fixtfsi.c
--- libc.softfp/soft-fp/fixtfsi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixtfsi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-SItype __fixtfsi(long double a)
+SItype __fixtfsi(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   USItype r;
 
   FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, 32, 1);
+  FP_TO_INT_Q(r, A, SI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixunsdfdi.c libc.softfp2/soft-fp/fixunsdfdi.c
--- libc.softfp/soft-fp/fixunsdfdi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixunsdfdi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "double.h"
 
-UDItype __fixunsdfdi(double a)
+UDItype __fixunsdfdi(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   UDItype r;
 
   FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, 64, 0);
+  FP_TO_INT_D(r, A, DI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixunsdfsi.c libc.softfp2/soft-fp/fixunsdfsi.c
--- libc.softfp/soft-fp/fixunsdfsi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixunsdfsi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "double.h"
 
-USItype __fixunsdfsi(double a)
+USItype __fixunsdfsi(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   USItype r;
 
   FP_UNPACK_RAW_D(A, a);
-  FP_TO_INT_D(r, A, 32, 0);
+  FP_TO_INT_D(r, A, SI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixunssfdi.c libc.softfp2/soft-fp/fixunssfdi.c
--- libc.softfp/soft-fp/fixunssfdi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixunssfdi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "single.h"
 
-UDItype __fixunssfdi(float a)
+UDItype __fixunssfdi(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   UDItype r;
 
   FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, 64, 0);
+  FP_TO_INT_S(r, A, DI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixunssfsi.c libc.softfp2/soft-fp/fixunssfsi.c
--- libc.softfp/soft-fp/fixunssfsi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixunssfsi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "single.h"
 
-USItype __fixunssfsi(float a)
+USItype __fixunssfsi(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
   USItype r;
 
   FP_UNPACK_RAW_S(A, a);
-  FP_TO_INT_S(r, A, 32, 0);
+  FP_TO_INT_S(r, A, SI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixunstfdi.c libc.softfp2/soft-fp/fixunstfdi.c
--- libc.softfp/soft-fp/fixunstfdi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixunstfdi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-UDItype __fixunstfdi(long double a)
+UDItype __fixunstfdi(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   UDItype r;
 
   FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, 64, 0);
+  FP_TO_INT_Q(r, A, DI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/fixunstfsi.c libc.softfp2/soft-fp/fixunstfsi.c
--- libc.softfp/soft-fp/fixunstfsi.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/fixunstfsi.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-USItype __fixunstfsi(long double a)
+USItype __fixunstfsi(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   USItype r;
 
   FP_UNPACK_RAW_Q(A, a);
-  FP_TO_INT_Q(r, A, 32, 0);
+  FP_TO_INT_Q(r, A, SI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
diff -rupN libc.softfp/soft-fp/floatdidf.c libc.softfp2/soft-fp/floatdidf.c
--- libc.softfp/soft-fp/floatdidf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatdidf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,13 +23,13 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __floatdidf(DItype i)
+DFtype __floatdidf(DItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  double a;
+  DFtype a;
 
-  FP_FROM_INT_D(A, i, 64, long long);
+  FP_FROM_INT_D(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatdisf.c libc.softfp2/soft-fp/floatdisf.c
--- libc.softfp/soft-fp/floatdisf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatdisf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,13 +23,13 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __floatdisf(DItype i)
+SFtype __floatdisf(DItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  float a;
+  SFtype a;
 
-  FP_FROM_INT_S(A, i, 64, long long);
+  FP_FROM_INT_S(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatditf.c libc.softfp2/soft-fp/floatditf.c
--- libc.softfp/soft-fp/floatditf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatditf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,13 +23,13 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __floatditf(DItype i)
+TFtype __floatditf(DItype i)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long double a;
+  TFtype a;
 
-  FP_FROM_INT_Q(A, i, 64, long long);
+  FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatsidf.c libc.softfp2/soft-fp/floatsidf.c
--- libc.softfp/soft-fp/floatsidf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatsidf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,13 +23,13 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __floatsidf(SItype i)
+DFtype __floatsidf(SItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  double a;
+  DFtype a;
 
-  FP_FROM_INT_D(A, i, 32, int);
+  FP_FROM_INT_D(A, i, SI_BITS, USItype);
   FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatsisf.c libc.softfp2/soft-fp/floatsisf.c
--- libc.softfp/soft-fp/floatsisf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatsisf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,13 +23,13 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __floatsisf(SItype i)
+SFtype __floatsisf(SItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  float a;
+  SFtype a;
 
-  FP_FROM_INT_S(A, i, 32, int);
+  FP_FROM_INT_S(A, i, SI_BITS, USItype);
   FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatsitf.c libc.softfp2/soft-fp/floatsitf.c
--- libc.softfp/soft-fp/floatsitf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatsitf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,13 +23,13 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __floatsitf(SItype i)
+TFtype __floatsitf(SItype i)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long double a;
+  TFtype a;
 
-  FP_FROM_INT_Q(A, i, 32, int);
+  FP_FROM_INT_Q(A, i, SI_BITS, USItype);
   FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatundidf.c libc.softfp2/soft-fp/floatundidf.c
--- libc.softfp/soft-fp/floatundidf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatundidf.c	2006-02-18 01:32:32.000000000 +0000
@@ -28,9 +28,9 @@ __floatundidf(UDItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  double a;
+  DFtype a;
 
-  FP_FROM_INT_D(A, i, 64, long long);
+  FP_FROM_INT_D(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatundisf.c libc.softfp2/soft-fp/floatundisf.c
--- libc.softfp/soft-fp/floatundisf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatundisf.c	2006-02-18 01:32:32.000000000 +0000
@@ -28,9 +28,9 @@ __floatundisf(UDItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  float a;
+  SFtype a;
 
-  FP_FROM_INT_S(A, i, 64, long long);
+  FP_FROM_INT_S(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatunditf.c libc.softfp2/soft-fp/floatunditf.c
--- libc.softfp/soft-fp/floatunditf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatunditf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double
+TFtype
 __floatunditf(UDItype i)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long double a;
+  TFtype a;
 
-  FP_FROM_INT_Q(A, i, 64, long long);
+  FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatunsidf.c libc.softfp2/soft-fp/floatunsidf.c
--- libc.softfp/soft-fp/floatunsidf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatunsidf.c	2006-02-18 01:32:32.000000000 +0000
@@ -28,9 +28,9 @@ __floatunsidf(USItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  double a;
+  DFtype a;
 
-  FP_FROM_INT_D(A, i, 32, int);
+  FP_FROM_INT_D(A, i, SI_BITS, USItype);
   FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatunsisf.c libc.softfp2/soft-fp/floatunsisf.c
--- libc.softfp/soft-fp/floatunsisf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatunsisf.c	2006-02-18 01:32:32.000000000 +0000
@@ -28,9 +28,9 @@ __floatunsisf(USItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  float a;
+  SFtype a;
 
-  FP_FROM_INT_S(A, i, 32, int);
+  FP_FROM_INT_S(A, i, SI_BITS, USItype);
   FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/floatunsitf.c libc.softfp2/soft-fp/floatunsitf.c
--- libc.softfp/soft-fp/floatunsitf.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/floatunsitf.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,14 +23,14 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double
+TFtype
 __floatunsitf(USItype i)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long double a;
+  TFtype a;
 
-  FP_FROM_INT_Q(A, i, 32, int);
+  FP_FROM_INT_Q(A, i, SI_BITS, USItype);
   FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
diff -rupN libc.softfp/soft-fp/gedf2.c libc.softfp2/soft-fp/gedf2.c
--- libc.softfp/soft-fp/gedf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/gedf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -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 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "double.h"
 
-int __gedf2(double a, double b)
+int __gedf2(DFtype a, DFtype b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B);
diff -rupN libc.softfp/soft-fp/gesf2.c libc.softfp2/soft-fp/gesf2.c
--- libc.softfp/soft-fp/gesf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/gesf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -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 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "single.h"
 
-int __gesf2(float a, float b)
+int __gesf2(SFtype a, SFtype b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B);
diff -rupN libc.softfp/soft-fp/getf2.c libc.softfp2/soft-fp/getf2.c
--- libc.softfp/soft-fp/getf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/getf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -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 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-int __getf2(long double a, long double b)
+int __getf2(TFtype a, TFtype b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B);
diff -rupN libc.softfp/soft-fp/ledf2.c libc.softfp2/soft-fp/ledf2.c
--- libc.softfp/soft-fp/ledf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/ledf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -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 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "double.h"
 
-int __ledf2(double a, double b)
+int __ledf2(DFtype a, DFtype b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B);
diff -rupN libc.softfp/soft-fp/lesf2.c libc.softfp2/soft-fp/lesf2.c
--- libc.softfp/soft-fp/lesf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/lesf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -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 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "single.h"
 
-int __lesf2(float a, float b)
+int __lesf2(SFtype a, SFtype b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B);
diff -rupN libc.softfp/soft-fp/letf2.c libc.softfp2/soft-fp/letf2.c
--- libc.softfp/soft-fp/letf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/letf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -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 Free Software Foundation, Inc.
+   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).
@@ -23,7 +23,7 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-int __letf2(long double a, long double b)
+int __letf2(TFtype a, TFtype b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B);
diff -rupN libc.softfp/soft-fp/muldf3.c libc.softfp2/soft-fp/muldf3.c
--- libc.softfp/soft-fp/muldf3.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/muldf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __muldf3(double a, double b)
+DFtype __muldf3(DFtype a, DFtype b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_D(A, a);
diff -rupN libc.softfp/soft-fp/mulsf3.c libc.softfp2/soft-fp/mulsf3.c
--- libc.softfp/soft-fp/mulsf3.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/mulsf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __mulsf3(float a, float b)
+SFtype __mulsf3(SFtype a, SFtype b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_S(A, a);
diff -rupN libc.softfp/soft-fp/multf3.c libc.softfp2/soft-fp/multf3.c
--- libc.softfp/soft-fp/multf3.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/multf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __multf3(long double a, long double b)
+TFtype __multf3(TFtype a, TFtype b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_Q(A, a);
diff -rupN libc.softfp/soft-fp/negdf2.c libc.softfp2/soft-fp/negdf2.c
--- libc.softfp/soft-fp/negdf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/negdf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __negdf2(double a)
+DFtype __negdf2(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_UNPACK_D(A, a);
   FP_NEG_D(R, A);
diff -rupN libc.softfp/soft-fp/negsf2.c libc.softfp2/soft-fp/negsf2.c
--- libc.softfp/soft-fp/negsf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/negsf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __negsf2(float a)
+SFtype __negsf2(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_UNPACK_S(A, a);
   FP_NEG_S(R, A);
diff -rupN libc.softfp/soft-fp/negtf2.c libc.softfp2/soft-fp/negtf2.c
--- libc.softfp/soft-fp/negtf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/negtf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __negtf2(long double a)
+TFtype __negtf2(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_UNPACK_Q(A, a);
   FP_NEG_Q(R, A);
diff -rupN libc.softfp/soft-fp/op-2.h libc.softfp2/soft-fp/op-2.h
--- libc.softfp/soft-fp/op-2.h	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/op-2.h	2006-02-18 01:32:32.000000000 +0000
@@ -29,79 +29,74 @@
 #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)						\
-  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_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_SRL_2(X,N)						\
-  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)
+(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;							\
+	  }))
 
 /* Right shift with sticky-lsb.  */
-#define _FP_FRAC_SRST_2(X,S, N,sz)					\
-  do {									\
-    if ((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);							\
-      }									\
-    else								\
-      {									\
-	S = (((X##_f1 << (2*_FP_W_TYPE_SIZE - (N))) | X##_f0) != 0);	\
-	X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE));			\
-	X##_f1 = 0;							\
-      }									\
-  } while (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_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_ADDI_2(X,I)	\
   __FP_FRAC_ADDI_2(X##_f1, X##_f0, I)
@@ -133,9 +128,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
@@ -588,16 +583,13 @@
  */
 
 #define _FP_FRAC_ASSEMBLE_2(r, X, rsize)	\
-  do {						\
-    if (rsize <= _FP_W_TYPE_SIZE)		\
-      r = X##_f0;				\
-    else					\
-      {						\
-	r = X##_f1;				\
-	r <<= _FP_W_TYPE_SIZE;			\
-	r += X##_f0;				\
-      }						\
-  } while (0)
+(void)((rsize <= _FP_W_TYPE_SIZE)		\
+       ? ({ r = X##_f0; })			\
+       : ({					\
+	    r = X##_f1;				\
+	    r <<= _FP_W_TYPE_SIZE;		\
+	    r += X##_f0;			\
+	  }))
 
 #define _FP_FRAC_DISASSEMBLE_2(X, r, rsize)				\
   do {									\
diff -rupN libc.softfp/soft-fp/op-4.h libc.softfp2/soft-fp/op-4.h
--- libc.softfp/soft-fp/op-4.h	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/op-4.h	2006-02-18 01:32:32.000000000 +0000
@@ -87,13 +87,12 @@
     _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						\
       {							\
+	_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;	\
@@ -518,7 +517,7 @@
 #ifndef __FP_FRAC_ADD_3
 #define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0)		\
   do {								\
-    int _c1, _c2;							\
+    _FP_W_TYPE _c1, _c2;					\
     r0 = x0 + y0;						\
     _c1 = r0 < x0;						\
     r1 = x1 + y1;						\
@@ -532,7 +531,7 @@
 #ifndef __FP_FRAC_ADD_4
 #define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0)	\
   do {								\
-    int _c1, _c2, _c3;						\
+    _FP_W_TYPE _c1, _c2, _c3;					\
     r0 = x0 + y0;						\
     _c1 = r0 < x0;						\
     r1 = x1 + y1;						\
@@ -550,7 +549,7 @@
 #ifndef __FP_FRAC_SUB_3
 #define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0)		\
   do {								\
-    int _c1, _c2;							\
+    _FP_W_TYPE _c1, _c2;					\
     r0 = x0 - y0;						\
     _c1 = r0 > x0;						\
     r1 = x1 - y1;						\
@@ -564,7 +563,7 @@
 #ifndef __FP_FRAC_SUB_4
 #define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0)	\
   do {								\
-    int _c1, _c2, _c3;						\
+    _FP_W_TYPE _c1, _c2, _c3;					\
     r0 = x0 - y0;						\
     _c1 = r0 > x0;						\
     r1 = x1 - y1;						\
diff -rupN libc.softfp/soft-fp/op-8.h libc.softfp2/soft-fp/op-8.h
--- libc.softfp/soft-fp/op-8.h	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/op-8.h	2006-02-18 01:32:32.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic eight-word fraction declaration and manipulation.
-   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2006 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
@@ -83,13 +83,12 @@
     _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 -rupN libc.softfp/soft-fp/op-common.h libc.softfp2/soft-fp/op-common.h
--- libc.softfp/soft-fp/op-common.h	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/op-common.h	2006-02-18 01:32:32.000000000 +0000
@@ -21,8 +21,8 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#define _FP_DECL(wc, X)			\
-  _FP_I_TYPE X##_c, X##_s, X##_e;	\
+#define _FP_DECL(wc, X)						\
+  _FP_I_TYPE X##_c __attribute__((unused)), X##_s, X##_e;	\
   _FP_FRAC_DECL_##wc(X)
 
 /*
@@ -898,20 +898,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))); \
-      }									  \
+#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.  */
@@ -1027,9 +1027,11 @@ do {									\
 	  /* Possibly converting to most negative integer; check the	\
 	     mantissa.  */						\
 	  int inexact = 0;						\
-	  if (_FP_FRACBITS_##fs > rsize)				\
-	    _FP_FRAC_SRST_##wc(X, inexact, _FP_FRACBITS_##fs - rsize,	\
-			       _FP_FRACBITS_##fs);			\
+	  (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)						\
@@ -1062,76 +1064,76 @@ do {									\
     }									\
 } while (0)
 
-/* Convert integer to fp.  Output is raw.  RTYPE is signed even if
-   input is unsigned.  */
-#define _FP_FROM_INT(fs, wc, X, r, rsize, rtype)			 \
-  do {									 \
-    if (r)								 \
-      {									 \
-	unsigned rtype ur_;						 \
-									 \
-	if ((X##_s = (r < 0)))						 \
-	  r = -(unsigned rtype)r;					 \
-									 \
-	ur_ = (unsigned rtype) r;					 \
-	if (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_;	 \
-	  }								 \
-	else if (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_;	 \
-	  }								 \
-	else								 \
-	  abort();							 \
-									 \
-	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);			 \
-      }									 \
+/* 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);			     \
+      }									     \
   } while (0)
 
 
diff -rupN libc.softfp/soft-fp/quad.h libc.softfp2/soft-fp/quad.h
--- libc.softfp/soft-fp/quad.h	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/quad.h	2006-02-18 01:32:32.000000000 +0000
@@ -51,11 +51,13 @@
 #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
 {
-   long double flt;
+   TFtype flt;
    struct 
    {
 #if __BYTE_ORDER == __BIG_ENDIAN
@@ -159,7 +161,7 @@ union _FP_UNION_Q
 #else   /* not _FP_W_TYPE_SIZE < 64 */
 union _FP_UNION_Q
 {
-  long double flt /* __attribute__((mode(TF))) */ ;
+  TFtype flt /* __attribute__((mode(TF))) */ ;
   struct {
     _FP_W_TYPE a, b;
   } longs;
diff -rupN libc.softfp/soft-fp/single.h libc.softfp2/soft-fp/single.h
--- libc.softfp/soft-fp/single.h	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/single.h	2006-02-18 01:32:32.000000000 +0000
@@ -44,9 +44,11 @@
 /* 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
 {
-  float flt;
+  SFtype flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign : 1;
diff -rupN libc.softfp/soft-fp/soft-fp.h libc.softfp2/soft-fp/soft-fp.h
--- libc.softfp/soft-fp/soft-fp.h	2005-12-23 11:49:50.000000000 +0000
+++ libc.softfp2/soft-fp/soft-fp.h	2006-02-18 01:32:32.000000000 +0000
@@ -1,5 +1,5 @@
 /* Software floating-point emulation.
-   Copyright (C) 1997,1998,1999,2000,2002,2003,2005
+   Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
@@ -25,11 +25,19 @@
 #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
@@ -172,10 +180,21 @@ typedef unsigned int UHWtype __attribute
 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 -rupN libc.softfp/soft-fp/sqrtdf2.c libc.softfp2/soft-fp/sqrtdf2.c
--- libc.softfp/soft-fp/sqrtdf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/sqrtdf2.c	2006-02-18 01:33:14.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return sqrt(a)
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __sqrtdf2(double a)
+DFtype __sqrtdf2(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_D(A, a);
diff -rupN libc.softfp/soft-fp/sqrtsf2.c libc.softfp2/soft-fp/sqrtsf2.c
--- libc.softfp/soft-fp/sqrtsf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/sqrtsf2.c	2006-02-18 01:33:01.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return sqrt(a)
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __sqrtsf2(float a)
+SFtype __sqrtsf2(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_S(A, a);
diff -rupN libc.softfp/soft-fp/sqrttf2.c libc.softfp2/soft-fp/sqrttf2.c
--- libc.softfp/soft-fp/sqrttf2.c	2001-07-06 10:53:04.000000000 +0000
+++ libc.softfp2/soft-fp/sqrttf2.c	2006-02-18 01:33:37.000000000 +0000
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return sqrt(a)
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   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).
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __sqrttf2(long double a)
+TFtype __sqrttf2(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_Q(A, a);
diff -rupN libc.softfp/soft-fp/subdf3.c libc.softfp2/soft-fp/subdf3.c
--- libc.softfp/soft-fp/subdf3.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/subdf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "double.h"
 
-double __subdf3(double a, double b)
+DFtype __subdf3(DFtype a, DFtype b)
 {
   FP_DECL_EX;
   FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_D(A, a);
diff -rupN libc.softfp/soft-fp/subsf3.c libc.softfp2/soft-fp/subsf3.c
--- libc.softfp/soft-fp/subsf3.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/subsf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "single.h"
 
-float __subsf3(float a, float b)
+SFtype __subsf3(SFtype a, SFtype b)
 {
   FP_DECL_EX;
   FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_S(A, a);
diff -rupN libc.softfp/soft-fp/subtf3.c libc.softfp2/soft-fp/subtf3.c
--- libc.softfp/soft-fp/subtf3.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/subtf3.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,11 +23,11 @@
 #include "soft-fp.h"
 #include "quad.h"
 
-long double __subtf3(long double a, long double b)
+TFtype __subtf3(TFtype a, TFtype b)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
-  long double r;
+  TFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_Q(A, a);
diff -rupN libc.softfp/soft-fp/truncdfsf2.c libc.softfp2/soft-fp/truncdfsf2.c
--- libc.softfp/soft-fp/truncdfsf2.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/truncdfsf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -24,12 +24,12 @@
 #include "single.h"
 #include "double.h"
 
-float __truncdfsf2(double a)
+SFtype __truncdfsf2(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
   FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_D(A, a);
diff -rupN libc.softfp/soft-fp/trunctfdf2.c libc.softfp2/soft-fp/trunctfdf2.c
--- libc.softfp/soft-fp/trunctfdf2.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/trunctfdf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -24,12 +24,12 @@
 #include "double.h"
 #include "quad.h"
 
-double __trunctfdf2(long double a)
+DFtype __trunctfdf2(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   FP_DECL_D(R);
-  double r;
+  DFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_Q(A, a);
diff -rupN libc.softfp/soft-fp/trunctfsf2.c libc.softfp2/soft-fp/trunctfsf2.c
--- libc.softfp/soft-fp/trunctfsf2.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/soft-fp/trunctfsf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -24,12 +24,12 @@
 #include "single.h"
 #include "quad.h"
 
-float __trunctfsf2(long double a)
+SFtype __trunctfsf2(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
   FP_DECL_S(R);
-  float r;
+  SFtype r;
 
   FP_INIT_ROUNDMODE;
   FP_UNPACK_SEMIRAW_Q(A, a);
diff -rupN libc.softfp/soft-fp/unorddf2.c libc.softfp2/soft-fp/unorddf2.c
--- libc.softfp/soft-fp/unorddf2.c	2006-01-06 10:47:45.000000000 +0000
+++ libc.softfp2/soft-fp/unorddf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,7 +23,7 @@
 #include "double.h"
 
 int
-__unorddf2(double a, double b)
+__unorddf2(DFtype a, DFtype b)
 {
   FP_DECL_D(A); FP_DECL_D(B);
   int r;
diff -rupN libc.softfp/soft-fp/unordsf2.c libc.softfp2/soft-fp/unordsf2.c
--- libc.softfp/soft-fp/unordsf2.c	2006-01-06 10:47:45.000000000 +0000
+++ libc.softfp2/soft-fp/unordsf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,7 +23,7 @@
 #include "single.h"
 
 int
-__unordsf2(float a, float b)
+__unordsf2(SFtype a, SFtype b)
 {
   FP_DECL_S(A);
   FP_DECL_S(B);
diff -rupN libc.softfp/soft-fp/unordtf2.c libc.softfp2/soft-fp/unordtf2.c
--- libc.softfp/soft-fp/unordtf2.c	2006-01-06 10:47:45.000000000 +0000
+++ libc.softfp2/soft-fp/unordtf2.c	2006-02-18 01:32:32.000000000 +0000
@@ -23,7 +23,7 @@
 #include "quad.h"
 
 int
-__unordtf2(long double a, long double b)
+__unordtf2(TFtype a, TFtype b)
 {
   FP_DECL_Q(A);
   FP_DECL_Q(B);
diff -rupN libc.softfp/sysdeps/alpha/soft-fp/ots_cvtqux.c libc.softfp2/sysdeps/alpha/soft-fp/ots_cvtqux.c
--- libc.softfp/sysdeps/alpha/soft-fp/ots_cvtqux.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/alpha/soft-fp/ots_cvtqux.c	2006-02-18 01:35:35.000000000 +0000
@@ -33,7 +33,7 @@ _OtsCvtQUX (unsigned long a)
   FP_DECL_Q(C);
   FP_DECL_RETURN(c);
 
-  FP_FROM_INT_Q(C, a, 64, long);
+  FP_FROM_INT_Q(C, a, 64, unsigned long);
   FP_PACK_RAW_Q(c, C);
 
   FP_RETURN(c);
diff -rupN libc.softfp/sysdeps/alpha/soft-fp/ots_cvtqx.c libc.softfp2/sysdeps/alpha/soft-fp/ots_cvtqx.c
--- libc.softfp/sysdeps/alpha/soft-fp/ots_cvtqx.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/alpha/soft-fp/ots_cvtqx.c	2006-02-18 01:35:45.000000000 +0000
@@ -33,7 +33,7 @@ _OtsCvtQX (long a)
   FP_DECL_Q(C);
   FP_DECL_RETURN(c);
 
-  FP_FROM_INT_Q(C, a, 64, long);
+  FP_FROM_INT_Q(C, a, 64, unsigned long);
   FP_PACK_RAW_Q(c, C);
   FP_RETURN(c);
 }
diff -rupN libc.softfp/sysdeps/powerpc/soft-fp/q_itoq.c libc.softfp2/sysdeps/powerpc/soft-fp/q_itoq.c
--- libc.softfp/sysdeps/powerpc/soft-fp/q_itoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/powerpc/soft-fp/q_itoq.c	2006-02-18 01:36:07.000000000 +0000
@@ -30,7 +30,7 @@ long double _q_itoq(const int a)
   int b = a;
   long double c;
 
-  FP_FROM_INT_Q(C, b, 32, int);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/powerpc/soft-fp/q_lltoq.c libc.softfp2/sysdeps/powerpc/soft-fp/q_lltoq.c
--- libc.softfp/sysdeps/powerpc/soft-fp/q_lltoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/powerpc/soft-fp/q_lltoq.c	2006-02-18 01:36:25.000000000 +0000
@@ -30,7 +30,7 @@ long double _q_lltoq(const long long a)
   long double c;
   long long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long long);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/powerpc/soft-fp/q_ulltoq.c libc.softfp2/sysdeps/powerpc/soft-fp/q_ulltoq.c
--- libc.softfp/sysdeps/powerpc/soft-fp/q_ulltoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/powerpc/soft-fp/q_ulltoq.c	2006-02-18 01:36:34.000000000 +0000
@@ -30,7 +30,7 @@ long double _q_ulltoq(const unsigned lon
   long double c;
   unsigned long long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long long);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/powerpc/soft-fp/q_utoq.c libc.softfp2/sysdeps/powerpc/soft-fp/q_utoq.c
--- libc.softfp/sysdeps/powerpc/soft-fp/q_utoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/powerpc/soft-fp/q_utoq.c	2006-02-18 01:36:16.000000000 +0000
@@ -30,7 +30,7 @@ long double _q_uitoq(const unsigned int 
   long double c;
   unsigned int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_itoq.c libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_itoq.c
--- libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_itoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_itoq.c	2006-02-18 01:36:55.000000000 +0000
@@ -30,7 +30,7 @@ long double _Q_itoq(const int a)
   int b = a;
   long double c;
 
-  FP_FROM_INT_Q(C, b, 32, int);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c
--- libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c	2006-02-18 01:37:12.000000000 +0000
@@ -30,7 +30,7 @@ long double _Q_lltoq(const long long a)
   long double c;
   long long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long long);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c
--- libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c	2006-02-18 01:37:21.000000000 +0000
@@ -30,7 +30,7 @@ long double _Q_ulltoq(const unsigned lon
   long double c;
   unsigned long long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long long);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_utoq.c libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_utoq.c
--- libc.softfp/sysdeps/sparc/sparc32/soft-fp/q_utoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc32/soft-fp/q_utoq.c	2006-02-18 01:37:04.000000000 +0000
@@ -30,7 +30,7 @@ long double _Q_utoq(const unsigned int a
   long double c;
   unsigned int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
   FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
diff -rupN libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c
--- libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c	2006-02-18 01:37:41.000000000 +0000
@@ -29,7 +29,7 @@ void _Qp_itoq(long double *c, const int 
   FP_DECL_Q(C);
   int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
   FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }
diff -rupN libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c
--- libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c	2006-02-18 01:37:50.000000000 +0000
@@ -29,7 +29,7 @@ void _Qp_uitoq(long double *c, const uns
   FP_DECL_Q(C);
   unsigned int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
   FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }
diff -rupN libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c
--- libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c	2006-02-18 01:38:06.000000000 +0000
@@ -29,7 +29,7 @@ void _Qp_uxtoq(long double *c, const uns
   FP_DECL_Q(C);
   unsigned long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long);
+  FP_FROM_INT_Q(C, b, 64, unsigned long);
   FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }
diff -rupN libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c
--- libc.softfp/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c	2006-02-18 01:30:20.000000000 +0000
+++ libc.softfp2/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c	2006-02-18 01:37:59.000000000 +0000
@@ -29,7 +29,7 @@ void _Qp_xtoq(long double *c, const long
   FP_DECL_Q(C);
   long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long);
+  FP_FROM_INT_Q(C, b, 64, unsigned long);
   FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]