* sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c: Moved to ...
authorRoland McGrath <roland@gnu.org>
Sat, 25 Feb 2006 01:29:59 +0000 (01:29 +0000)
committerRoland McGrath <roland@gnu.org>
Sat, 25 Feb 2006 01:29:59 +0000 (01:29 +0000)
* sysdeps/sparc/dl-procinfo.c: ... here, new file.
* sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Moved to ...
* sysdeps/sparc/dl-procinfo.h: ... here, new file.
(HWCAP_IMPORTANT): Include HWCAP_SPARC_V9 when [__WORDSIZE__ != 64].
* sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.c: File removed.
* sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: File removed.

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.

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

* soft-fp/op-common.h (_FP_UNPACK_SEMIRAW): Define.
(_FP_OVERFLOW_SEMIRAW): Likewise.
(_FP_CHECK_SIGNAN_SEMIRAW): Likewise.
(_FP_CHOOSENAN_SEMIRAW): Likewise.
(_FP_EXP_NORMAL): Likewise.
(_FP_PACK_SEMIRAW): Likewise.
(_FP_ADD_INTERNAL): Rewrite to operate on semi-raw value.
(_FP_SUB): Likewise.
(_FP_TO_INT): Rewrite to operate on raw values.  Don't set INVALID
exception for conversions where most negative representable
integer is correct truncated value, but do set INEXACT for such
conversions where appropriate.  Don't always left-shift for
converting to a wider integer.
(_FP_FROM_INT): Rewrite to yield raw value.  Correct shift for
integers with one more bits than (mantissa + guard) bits for the
floating point format.  Don't use __FP_FRAC_SRS_1 for shifting
integers that may be wider than _FP_W_TYPE_SIZE.
(FP_CONV): Don't define.
(FP_EXTEND): Define.
(FP_TRUNC): Likewise.
* soft-fp/op-1.h (_FP_FRAC_SRST_1, __FP_FRAC_SRST_1): Define.
(_FP_FRAC_CONV_1_1): Don't define.
(_FP_FRAC_COPY_1_1): Define.
* soft-fp/op-2.h (_FP_FRAC_SRST_2): Define.
(_FP_FRAC_CONV_1_2, _FP_FRAC_CONV_2_1): Don't define.
(_FP_FRAC_COPY_1_2, _FP_FRAC_COPY_2_1): Define.
* soft-fp/op-4.h (_FP_FRAC_SRST_4): Define.
(_FP_FRAC_SRS_4): Define based on _FP_FRAC_SRST_4.
(_FP_FRAC_CONV_1_4, _FP_FRAC_CONV_2_4): Don't define.
(_FP_FRAC_COPY_1_4, _FP_FRAC_COPY_2_4): Define.
(_FP_FRAC_CONV_4_1, _FP_FRAC_CONV_4_2): Don't define.
(_FP_FRAC_COPY_4_1, _FP_FRAC_COPY_4_2): Define.
* soft-fp/single.h (_FP_FRACTBITS_S): Define.
(_FP_FRACXBITS_S): Define in terms of _FP_FRACXBITS_S.
(_FP_WFRACXBITS_S): Likewise.
(_FP_QNANBIT_SH_S, _FP_IMPLBIT_SH_S): Define.
(FP_UNPACK_SEMIRAW_S, FP_UNPACK_SEMIRAW_SP): Define.
(FP_PACK_SEMIRAW_S, FP_PACK_SEMIRAW_SP): Define.
* soft-fp/double.h (_FP_QNANBIT_SH_D, _FP_IMPLBIT_SH_D): Define.
(FP_UNPACK_SEMIRAW_D, FP_UNPACK_SEMIRAW_D): Define
(FP_PACK_SEMIRAW_D, FP_PACK_SEMIRAW_DP): Define.
* soft-fp/extended.h (_FP_QNANBIT_SH_E, _FP_IMPLBIT_SH_E): Define.
(FP_UNPACK_EP): Correct typo.
(FP_UNPACK_SEMIRAW_E, FP_UNPACK_SEMIRAW_EP): Define.
(FP_PACK_SEMIRAW_E, FP_PACK_SEMIRAW_EP): Define.
* soft-fp/quad.h (_FP_QNANBIT_SH_Q, _FP_IMPLBIT_SH_Q): Define.
(FP_UNPACK_SEMIRAW_Q, FP_UNPACK_SEMIRAW_QP): Define.
(FP_PACK_SEMIRAW_Q, FP_PACK_SEMIRAW_QP): Define.
* soft-fp/fixdfdi.c: Use unsigned type for result of conversion.
* 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.
* sysdeps/alpha/soft-fp/ots_cvtxq.c: Likewise.
* sysdeps/alpha/soft-fp/ots_nintxq.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtoi.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtoll.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_qtoi.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_qtoll.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise.
* soft-fp/adddf3.c: Update for changed soft-fp interfaces.
* soft-fp/addsf3.c: Likewise.
* soft-fp/addtf3.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/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.
* sysdeps/alpha/soft-fp/ots_add.c: Likewise.
* sysdeps/alpha/soft-fp/ots_cvtqux.c: Likewise.
* sysdeps/alpha/soft-fp/ots_cvtqx.c: Likewise.
* sysdeps/alpha/soft-fp/ots_cvttx.c: Likewise.
* sysdeps/alpha/soft-fp/ots_cvtxq.c: Likewise.
* sysdeps/alpha/soft-fp/ots_cvtxt.c: Likewise.
* sysdeps/alpha/soft-fp/ots_nintxq.c: Likewise.
* sysdeps/alpha/soft-fp/ots_sub.c: Likewise.
* sysdeps/powerpc/soft-fp/q_add.c: Likewise.
* sysdeps/powerpc/soft-fp/q_dtoq.c: Likewise.
* sysdeps/powerpc/soft-fp/q_itoq.c: Likewise.
* sysdeps/powerpc/soft-fp/q_lltoq.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtod.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtoi.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtoll.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtos.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtou.c: Likewise.
* sysdeps/powerpc/soft-fp/q_qtoull.c: Likewise.
* sysdeps/powerpc/soft-fp/q_stoq.c: Likewise.
* sysdeps/powerpc/soft-fp/q_sub.c: Likewise.
* sysdeps/powerpc/soft-fp/q_ulltoq.c: Likewise.
* sysdeps/powerpc/soft-fp/q_utoq.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_add.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_dtoq.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_qtod.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_qtoi.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_qtoll.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_qtos.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_qtou.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_qtoull.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_stoq.c: Likewise.
* sysdeps/sparc/sparc32/soft-fp/q_sub.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_add.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_itoq.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtod.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtos.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_stoq.c: Likewise.
* sysdeps/sparc/sparc64/soft-fp/qp_sub.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.

125 files changed:
ChangeLog
soft-fp/adddf3.c
soft-fp/addsf3.c
soft-fp/addtf3.c
soft-fp/divdf3.c
soft-fp/divsf3.c
soft-fp/divtf3.c
soft-fp/double.h
soft-fp/eqdf2.c
soft-fp/eqsf2.c
soft-fp/eqtf2.c
soft-fp/extenddftf2.c
soft-fp/extended.h
soft-fp/extendsfdf2.c
soft-fp/extendsftf2.c
soft-fp/fixdfdi.c
soft-fp/fixdfsi.c
soft-fp/fixsfdi.c
soft-fp/fixsfsi.c
soft-fp/fixtfdi.c
soft-fp/fixtfsi.c
soft-fp/fixunsdfdi.c
soft-fp/fixunsdfsi.c
soft-fp/fixunssfdi.c
soft-fp/fixunssfsi.c
soft-fp/fixunstfdi.c
soft-fp/fixunstfsi.c
soft-fp/floatdidf.c
soft-fp/floatdisf.c
soft-fp/floatditf.c
soft-fp/floatsidf.c
soft-fp/floatsisf.c
soft-fp/floatsitf.c
soft-fp/floatundidf.c
soft-fp/floatundisf.c
soft-fp/floatunditf.c
soft-fp/floatunsidf.c
soft-fp/floatunsisf.c
soft-fp/floatunsitf.c
soft-fp/gedf2.c
soft-fp/gesf2.c
soft-fp/getf2.c
soft-fp/ledf2.c
soft-fp/lesf2.c
soft-fp/letf2.c
soft-fp/muldf3.c
soft-fp/mulsf3.c
soft-fp/multf3.c
soft-fp/negdf2.c
soft-fp/negsf2.c
soft-fp/negtf2.c
soft-fp/op-1.h
soft-fp/op-2.h
soft-fp/op-4.h
soft-fp/op-8.h
soft-fp/op-common.h
soft-fp/quad.h
soft-fp/single.h
soft-fp/soft-fp.h
soft-fp/sqrtdf2.c
soft-fp/sqrtsf2.c
soft-fp/sqrttf2.c
soft-fp/subdf3.c
soft-fp/subsf3.c
soft-fp/subtf3.c
soft-fp/truncdfsf2.c
soft-fp/trunctfdf2.c
soft-fp/trunctfsf2.c
soft-fp/unorddf2.c
soft-fp/unordsf2.c
soft-fp/unordtf2.c
sysdeps/alpha/soft-fp/ots_add.c
sysdeps/alpha/soft-fp/ots_cvtqux.c
sysdeps/alpha/soft-fp/ots_cvtqx.c
sysdeps/alpha/soft-fp/ots_cvttx.c
sysdeps/alpha/soft-fp/ots_cvtxq.c
sysdeps/alpha/soft-fp/ots_cvtxt.c
sysdeps/alpha/soft-fp/ots_nintxq.c
sysdeps/alpha/soft-fp/ots_sub.c
sysdeps/powerpc/soft-fp/q_add.c
sysdeps/powerpc/soft-fp/q_dtoq.c
sysdeps/powerpc/soft-fp/q_itoq.c
sysdeps/powerpc/soft-fp/q_lltoq.c
sysdeps/powerpc/soft-fp/q_qtod.c
sysdeps/powerpc/soft-fp/q_qtoi.c
sysdeps/powerpc/soft-fp/q_qtoll.c
sysdeps/powerpc/soft-fp/q_qtos.c
sysdeps/powerpc/soft-fp/q_qtou.c
sysdeps/powerpc/soft-fp/q_qtoull.c
sysdeps/powerpc/soft-fp/q_stoq.c
sysdeps/powerpc/soft-fp/q_sub.c
sysdeps/powerpc/soft-fp/q_ulltoq.c
sysdeps/powerpc/soft-fp/q_utoq.c
sysdeps/sparc/dl-procinfo.c [moved from sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.c with 89% similarity]
sysdeps/sparc/dl-procinfo.h [moved from sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h with 77% similarity]
sysdeps/sparc/sparc32/soft-fp/q_add.c
sysdeps/sparc/sparc32/soft-fp/q_dtoq.c
sysdeps/sparc/sparc32/soft-fp/q_itoq.c
sysdeps/sparc/sparc32/soft-fp/q_lltoq.c
sysdeps/sparc/sparc32/soft-fp/q_qtod.c
sysdeps/sparc/sparc32/soft-fp/q_qtoi.c
sysdeps/sparc/sparc32/soft-fp/q_qtoll.c
sysdeps/sparc/sparc32/soft-fp/q_qtos.c
sysdeps/sparc/sparc32/soft-fp/q_qtou.c
sysdeps/sparc/sparc32/soft-fp/q_qtoull.c
sysdeps/sparc/sparc32/soft-fp/q_stoq.c
sysdeps/sparc/sparc32/soft-fp/q_sub.c
sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c
sysdeps/sparc/sparc32/soft-fp/q_utoq.c
sysdeps/sparc/sparc64/soft-fp/qp_add.c
sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c
sysdeps/sparc/sparc64/soft-fp/qp_itoq.c
sysdeps/sparc/sparc64/soft-fp/qp_qtod.c
sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c
sysdeps/sparc/sparc64/soft-fp/qp_qtos.c
sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c
sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c
sysdeps/sparc/sparc64/soft-fp/qp_qtox.c
sysdeps/sparc/sparc64/soft-fp/qp_stoq.c
sysdeps/sparc/sparc64/soft-fp/qp_sub.c
sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c
sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c
sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c
sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c [deleted file]
sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h [deleted file]

index 715c6b7a44680f53f50efd2d948df2df564898bb..74064c8d3dae42736fc18182f3eeb1165d108a04 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,296 @@
 2006-02-24  Roland McGrath  <roland@redhat.com>
 
+       * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c: Moved to ...
+       * sysdeps/sparc/dl-procinfo.c: ... here, new file.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Moved to ...
+       * sysdeps/sparc/dl-procinfo.h: ... here, new file.
+       (HWCAP_IMPORTANT): Include HWCAP_SPARC_V9 when [__WORDSIZE__ != 64].
+       * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.c: File removed.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: File removed.
+
        * elf/sofini.c (__FRAME_END__): Mark as const.
        * elf/soinit.c (__EH_FRAME_BEGIN__): Likewise.  Add used attribute.
 
+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.
+
+2006-02-09  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * soft-fp/op-common.h (_FP_UNPACK_SEMIRAW): Define.
+       (_FP_OVERFLOW_SEMIRAW): Likewise.
+       (_FP_CHECK_SIGNAN_SEMIRAW): Likewise.
+       (_FP_CHOOSENAN_SEMIRAW): Likewise.
+       (_FP_EXP_NORMAL): Likewise.
+       (_FP_PACK_SEMIRAW): Likewise.
+       (_FP_ADD_INTERNAL): Rewrite to operate on semi-raw value.
+       (_FP_SUB): Likewise.
+       (_FP_TO_INT): Rewrite to operate on raw values.  Don't set INVALID
+       exception for conversions where most negative representable
+       integer is correct truncated value, but do set INEXACT for such
+       conversions where appropriate.  Don't always left-shift for
+       converting to a wider integer.
+       (_FP_FROM_INT): Rewrite to yield raw value.  Correct shift for
+       integers with one more bits than (mantissa + guard) bits for the
+       floating point format.  Don't use __FP_FRAC_SRS_1 for shifting
+       integers that may be wider than _FP_W_TYPE_SIZE.
+       (FP_CONV): Don't define.
+       (FP_EXTEND): Define.
+       (FP_TRUNC): Likewise.
+       * soft-fp/op-1.h (_FP_FRAC_SRST_1, __FP_FRAC_SRST_1): Define.
+       (_FP_FRAC_CONV_1_1): Don't define.
+       (_FP_FRAC_COPY_1_1): Define.
+       * soft-fp/op-2.h (_FP_FRAC_SRST_2): Define.
+       (_FP_FRAC_CONV_1_2, _FP_FRAC_CONV_2_1): Don't define.
+       (_FP_FRAC_COPY_1_2, _FP_FRAC_COPY_2_1): Define.
+       * soft-fp/op-4.h (_FP_FRAC_SRST_4): Define.
+       (_FP_FRAC_SRS_4): Define based on _FP_FRAC_SRST_4.
+       (_FP_FRAC_CONV_1_4, _FP_FRAC_CONV_2_4): Don't define.
+       (_FP_FRAC_COPY_1_4, _FP_FRAC_COPY_2_4): Define.
+       (_FP_FRAC_CONV_4_1, _FP_FRAC_CONV_4_2): Don't define.
+       (_FP_FRAC_COPY_4_1, _FP_FRAC_COPY_4_2): Define.
+       * soft-fp/single.h (_FP_FRACTBITS_S): Define.
+       (_FP_FRACXBITS_S): Define in terms of _FP_FRACXBITS_S.
+       (_FP_WFRACXBITS_S): Likewise.
+       (_FP_QNANBIT_SH_S, _FP_IMPLBIT_SH_S): Define.
+       (FP_UNPACK_SEMIRAW_S, FP_UNPACK_SEMIRAW_SP): Define.
+       (FP_PACK_SEMIRAW_S, FP_PACK_SEMIRAW_SP): Define.
+       * soft-fp/double.h (_FP_QNANBIT_SH_D, _FP_IMPLBIT_SH_D): Define.
+       (FP_UNPACK_SEMIRAW_D, FP_UNPACK_SEMIRAW_D): Define
+       (FP_PACK_SEMIRAW_D, FP_PACK_SEMIRAW_DP): Define.
+       * soft-fp/extended.h (_FP_QNANBIT_SH_E, _FP_IMPLBIT_SH_E): Define.
+       (FP_UNPACK_EP): Correct typo.
+       (FP_UNPACK_SEMIRAW_E, FP_UNPACK_SEMIRAW_EP): Define.
+       (FP_PACK_SEMIRAW_E, FP_PACK_SEMIRAW_EP): Define.
+       * soft-fp/quad.h (_FP_QNANBIT_SH_Q, _FP_IMPLBIT_SH_Q): Define.
+       (FP_UNPACK_SEMIRAW_Q, FP_UNPACK_SEMIRAW_QP): Define.
+       (FP_PACK_SEMIRAW_Q, FP_PACK_SEMIRAW_QP): Define.
+       * soft-fp/fixdfdi.c: Use unsigned type for result of conversion.
+       * 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.
+       * sysdeps/alpha/soft-fp/ots_cvtxq.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_nintxq.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtoi.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtoll.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_qtoi.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_qtoll.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise.
+       * soft-fp/adddf3.c: Update for changed soft-fp interfaces.
+       * soft-fp/addsf3.c: Likewise.
+       * soft-fp/addtf3.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/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.
+       * sysdeps/alpha/soft-fp/ots_add.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_cvtqux.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_cvtqx.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_cvttx.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_cvtxq.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_cvtxt.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_nintxq.c: Likewise.
+       * sysdeps/alpha/soft-fp/ots_sub.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_add.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_dtoq.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_itoq.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_lltoq.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtod.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtoi.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtoll.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtos.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtou.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_qtoull.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_stoq.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_sub.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_ulltoq.c: Likewise.
+       * sysdeps/powerpc/soft-fp/q_utoq.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_add.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_dtoq.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_qtod.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_qtoi.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_qtoll.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_qtos.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_qtou.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_qtoull.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_stoq.c: Likewise.
+       * sysdeps/sparc/sparc32/soft-fp/q_sub.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_add.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_itoq.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtod.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtos.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_stoq.c: Likewise.
+       * sysdeps/sparc/sparc64/soft-fp/qp_sub.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.
+
 2006-02-23  Roland McGrath  <roland@redhat.com>
 
        * include/libc-symbols.h: Fix comment typo.
index 6802d13e374c39206ce7cef58f52e66df7fb67cc..269ef664c7d14612d9d6847558596f3ee84b1359 100644 (file)
@@ -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).
 #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_D(A, a);
-  FP_UNPACK_D(B, b);
+  FP_UNPACK_SEMIRAW_D(A, a);
+  FP_UNPACK_SEMIRAW_D(B, b);
   FP_ADD_D(R, A, B);
-  FP_PACK_D(r, R);
+  FP_PACK_SEMIRAW_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index a1e7f0c10c547ee7a72d8e41c423eb592a083e1e..cfd9526ea6f28485d61eaf57b2e891edc7c8b0e1 100644 (file)
@@ -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).
 #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_S(A, a);
-  FP_UNPACK_S(B, b);
+  FP_UNPACK_SEMIRAW_S(A, a);
+  FP_UNPACK_SEMIRAW_S(B, b);
   FP_ADD_S(R, A, B);
-  FP_PACK_S(r, R);
+  FP_PACK_SEMIRAW_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index b7348f5acce0079b72480240662092377d4b4854..f889a189b63be4cc531fdbf6074e49526fe2abc9 100644 (file)
@@ -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).
 #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_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_ADD_Q(R, A, B);
-  FP_PACK_Q(r, R);
+  FP_PACK_SEMIRAW_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index f8a479dce730edf3cf3ab91ef373428c5b2be0a3..b45a91ce0c48592291ca2dab6ea133ad70c316ff 100644 (file)
@@ -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).
 #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);
index 9e9234fddf3ea550b7a019535d9a5d20bc51aa76..d62c7c02b72179d48f0c720695872ba04f3ba9ef 100644 (file)
@@ -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).
 #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);
index 264af97cb071f7983dff8c13fbffa82b079e82a7..842aa8116efe0a8b56a1f059c82a956174e120b1 100644 (file)
@@ -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).
 #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);
index 4d66c8d4577d21ea96cd26c0829e3d99f21600f6..86fd8ada86a67b4f3ae4339ee46e65a6427138e5 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Double Precision
-   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),
 
 #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
 {
-  double flt;
+  DFtype flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign  : 1;
@@ -89,6 +95,18 @@ 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);         \
@@ -102,6 +120,19 @@ 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)
@@ -125,7 +156,7 @@ union _FP_UNION_D
 
 union _FP_UNION_D
 {
-  double flt;
+  DFtype flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign : 1;
@@ -161,6 +192,18 @@ 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);         \
@@ -174,6 +217,19 @@ 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)
index b2586bdb9ce780f1f00d5cf37c194a42f1b0afc6..d1eb97222f79e3a88cbcd308fb8d4fe437c93e6e 100644 (file)
@@ -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);
index d838b52396a363794633dbe21de9286b70e0b7f2..371465f74dab67f93a9af82910a12a77625c528c 100644 (file)
@@ -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);
index adb1663edb872a9fcd10d7f8a2acb915871a841e..59479b47a04131eb43c6e35a2d729bf469594ed9 100644 (file)
@@ -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);
index 53ac72cfca05bc731a06fbcd0f405507fbc50a2e..e25cc5c822e3a4a4c443552345189605802ff11a 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE quad
-   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).
 #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_D(A, a);
+  FP_UNPACK_RAW_D(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,D,4,2,R,A);
+  FP_EXTEND(Q,D,4,2,R,A);
 #else
-  FP_CONV(Q,D,2,1,R,A);
+  FP_EXTEND(Q,D,2,1,R,A);
 #endif
-  FP_PACK_Q(r, R);
+  FP_PACK_RAW_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index d34df5d0cef06ba1e3fd68bf10c9721ecc91abc5..0f2060e970351ce06c5f9c01d767415d8094cfc4 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Extended Precision.
-   Copyright (C) 1999 Free Software Foundation, Inc.
+   Copyright (C) 1999,2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek (jj@ultra.linux.cz).
 
 
 #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
 {
-   long double flt;
+   XFtype flt;
    struct 
    {
 #if __BYTE_ORDER == __BIG_ENDIAN
@@ -143,10 +149,22 @@ union _FP_UNION_E
 
 #define FP_UNPACK_EP(X,val)            \
   do {                                 \
-    FP_UNPACK_RAW_2_P(X,val);          \
+    FP_UNPACK_RAW_EP(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);         \
@@ -159,6 +177,18 @@ 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)
@@ -235,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);
@@ -324,6 +354,18 @@ 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);         \
@@ -336,6 +378,18 @@ 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)
index a418f1967e4e46239f2b31c51162ee0293b09355..220caf930d60adb9f231778e199fcd1fb8f6ffb6 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE double
-   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).
 #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_S(A, a);
+  FP_UNPACK_RAW_S(A, a);
 #if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
-  FP_CONV(D,S,2,1,R,A);
+  FP_EXTEND(D,S,2,1,R,A);
 #else
-  FP_CONV(D,S,1,1,R,A);
+  FP_EXTEND(D,S,1,1,R,A);
 #endif
-  FP_PACK_D(r, R);
+  FP_PACK_RAW_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index d2735ba1a549c0dd696027a4919ae9ab59a4987c..412d2e877c6d9074531680004ef2656f4d60d846 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE quad
-   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).
 #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_S(A, a);
+  FP_UNPACK_RAW_S(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,S,4,1,R,A);
+  FP_EXTEND(Q,S,4,1,R,A);
 #else
-  FP_CONV(Q,S,2,1,R,A);
+  FP_EXTEND(Q,S,2,1,R,A);
 #endif
-  FP_PACK_Q(r, R);
+  FP_PACK_RAW_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 201014581ff47965a1f27c5f522e8dce1266fa6a..537de101c6fb22e6d2b4919d69d1e94dd26facd7 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   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).
 #include "soft-fp.h"
 #include "double.h"
 
-DItype __fixdfdi(double a)
+DItype __fixdfdi(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  DItype r;
+  UDItype r;
 
-  FP_UNPACK_D(A, a);
-  FP_TO_INT_D(r, A, 64, 1);
+  FP_UNPACK_RAW_D(A, a);
+  FP_TO_INT_D(r, A, DI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 9961d3d560d4eacd9d451839c2693e039a70c4a1..0607005108cc107cb0d59bdb7b589c8416c98bc7 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   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).
 #include "soft-fp.h"
 #include "double.h"
 
-SItype __fixdfsi(double a)
+SItype __fixdfsi(DFtype a)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  SItype r;
+  USItype r;
 
-  FP_UNPACK_D(A, a);
-  FP_TO_INT_D(r, A, 32, 1);
+  FP_UNPACK_RAW_D(A, a);
+  FP_TO_INT_D(r, A, SI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index f3fd2e77a150772f90eff851ac284164c8f76d06..d9ef9e843b9d0decb40ee1bb081a52de2bff1c69 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   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).
 #include "soft-fp.h"
 #include "single.h"
 
-DItype __fixsfdi(float a)
+DItype __fixsfdi(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  DItype r;
+  UDItype r;
 
-  FP_UNPACK_S(A, a);
-  FP_TO_INT_S(r, A, 64, 1);
+  FP_UNPACK_RAW_S(A, a);
+  FP_TO_INT_S(r, A, DI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index e8251d18b6644591998fbca320dcda904a15487a..916b079387e0ddfa3462a4a5cf915e822eeb1716 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   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).
 #include "soft-fp.h"
 #include "single.h"
 
-SItype __fixsfsi(float a)
+SItype __fixsfsi(SFtype a)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  SItype r;
+  USItype r;
 
-  FP_UNPACK_S(A, a);
-  FP_TO_INT_S(r, A, 32, 1);
+  FP_UNPACK_RAW_S(A, a);
+  FP_TO_INT_S(r, A, SI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index fda412261d37d4178f4395448bdd25129e43e8e1..73a1cc7cbf0b40af42d81f0a50e407b67532c964 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   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).
 #include "soft-fp.h"
 #include "quad.h"
 
-DItype __fixtfdi(long double a)
+DItype __fixtfdi(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  DItype r;
+  UDItype r;
 
-  FP_UNPACK_Q(A, a);
-  FP_TO_INT_Q(r, A, 64, 1);
+  FP_UNPACK_RAW_Q(A, a);
+  FP_TO_INT_Q(r, A, DI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index da51cf951bb809b08ba1300cd3a20bc1609448f0..78bad0ee39b76a5e6355128a600bc917ad62b80c 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   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).
 #include "soft-fp.h"
 #include "quad.h"
 
-SItype __fixtfsi(long double a)
+SItype __fixtfsi(TFtype a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  SItype r;
+  USItype r;
 
-  FP_UNPACK_Q(A, a);
-  FP_TO_INT_Q(r, A, 32, 1);
+  FP_UNPACK_RAW_Q(A, a);
+  FP_TO_INT_Q(r, A, SI_BITS, 1);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 18bc61ca30279297bd7f170ffd1547b4e871bbfa..b350d952724021cc54ebe47624fc5fecca0cb126 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   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).
 #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_D(A, a);
-  FP_TO_INT_D(r, A, 64, 0);
+  FP_UNPACK_RAW_D(A, a);
+  FP_TO_INT_D(r, A, DI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 4060b5119a6208ee95400c407f8c9f53bcaa2db1..c363e5fbcebe2352f540041a506afcc43d49ee3c 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   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).
 #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_D(A, a);
-  FP_TO_INT_D(r, A, 32, 0);
+  FP_UNPACK_RAW_D(A, a);
+  FP_TO_INT_D(r, A, SI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 6e4f5beb303d19a3b761cc0b233a656b02f9ddd2..6a43cb88effd8ef9b238bb5ed42e33f305972533 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   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).
 #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_S(A, a);
-  FP_TO_INT_S(r, A, 64, 0);
+  FP_UNPACK_RAW_S(A, a);
+  FP_TO_INT_S(r, A, DI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 5c3e99305e7dfe08948657f073760abb4f4e5a69..3ddcee55dedc6069c8202dcb68c5992abaca36b6 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   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).
 #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_S(A, a);
-  FP_TO_INT_S(r, A, 32, 0);
+  FP_UNPACK_RAW_S(A, a);
+  FP_TO_INT_S(r, A, SI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index a8ac454ce4624507dd66d3fd161c9f1521cc163d..0bf5327d1cd4563636c25700291a45736fbbb6dc 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   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).
 #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_Q(A, a);
-  FP_TO_INT_Q(r, A, 64, 0);
+  FP_UNPACK_RAW_Q(A, a);
+  FP_TO_INT_Q(r, A, DI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 812fb8ef2629ee729bd0e1a124b1d98c8af73621..387b9c615bdc3cd7f53df238df753c4207058da3 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   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).
 #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_Q(A, a);
-  FP_TO_INT_Q(r, A, 32, 0);
+  FP_UNPACK_RAW_Q(A, a);
+  FP_TO_INT_Q(r, A, SI_BITS, 0);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 38303f292f44adaad916ea1b08bf90c5010b952e..2c6800010f47d629212b9f838af99e8b76279c93 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE double
-   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).
 #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_PACK_D(a, A);
+  FP_FROM_INT_D(A, i, DI_BITS, UDItype);
+  FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index d2a2af09476a7121ab370962fcd7f9d4e5284f33..36f05ee4097e802f25ec84471ea111a01e2b1e00 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE single
-   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).
 #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_PACK_S(a, A);
+  FP_FROM_INT_S(A, i, DI_BITS, UDItype);
+  FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index ef05dee109724f2110b315c46e446ec7f6775807..03487adfcbbe5482f6ea012ca2b6f5cddc7e9332 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE quad
-   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).
 #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_PACK_Q(a, A);
+  FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
+  FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index e136333d8721bba35d51fd7aa7801c182a8659b8..d11ddcc9f1717d848c5c8d0339484203f388e4e6 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE double
-   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).
 #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_PACK_D(a, A);
+  FP_FROM_INT_D(A, i, SI_BITS, USItype);
+  FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index d68f5a8ac1cc3300461848464b1eb96c2dd10043..64006e691b2bf383103b08acff8adf8ef849ee3f 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE single
-   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).
 #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_PACK_S(a, A);
+  FP_FROM_INT_S(A, i, SI_BITS, USItype);
+  FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index e982bb7b35bb7fb267f10cfdf4b641ee5244f695..5a64c70bc2f49d26e70c78542641603a9763b3a6 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE quad
-   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).
 #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_PACK_Q(a, A);
+  FP_FROM_INT_Q(A, i, SI_BITS, USItype);
+  FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index 03bda04e629042a9eea34d74ab0f5de64af00985..dcec2f8360e70dbbd4726cba47c34856903c60ab 100644 (file)
@@ -28,10 +28,10 @@ __floatundidf(UDItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  double a;
+  DFtype a;
 
-  FP_FROM_INT_D(A, i, 64, long long);
-  FP_PACK_D(a, A);
+  FP_FROM_INT_D(A, i, DI_BITS, UDItype);
+  FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index 68aa90fbf779b6303097dde2b36ce412a453c74c..a2437e407101e94b315b93bd62ef4d87b4492d3a 100644 (file)
@@ -28,10 +28,10 @@ __floatundisf(UDItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  float a;
+  SFtype a;
 
-  FP_FROM_INT_S(A, i, 64, long long);
-  FP_PACK_S(a, A);
+  FP_FROM_INT_S(A, i, DI_BITS, UDItype);
+  FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index 2f53f7d6e4c9034a9003194c87707f2cfa040c8f..f0fd3af92d7f6cf12eaf23684ea4c7c1447af418 100644 (file)
 #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_PACK_Q(a, A);
+  FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
+  FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index 2649adcb6d7650e559f1ae1187ab5e8b3caedeea..b43ed35cd7cf2c81d00a0fa244fd23d00b62b7d6 100644 (file)
@@ -28,10 +28,10 @@ __floatunsidf(USItype i)
 {
   FP_DECL_EX;
   FP_DECL_D(A);
-  double a;
+  DFtype a;
 
-  FP_FROM_INT_D(A, i, 32, int);
-  FP_PACK_D(a, A);
+  FP_FROM_INT_D(A, i, SI_BITS, USItype);
+  FP_PACK_RAW_D(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index a7f21ca68b7d19334c641ec208514b1ac8442866..16fbf1dddbfdc728545e1e258609540eea5caca1 100644 (file)
@@ -28,10 +28,10 @@ __floatunsisf(USItype i)
 {
   FP_DECL_EX;
   FP_DECL_S(A);
-  float a;
+  SFtype a;
 
-  FP_FROM_INT_S(A, i, 32, int);
-  FP_PACK_S(a, A);
+  FP_FROM_INT_S(A, i, SI_BITS, USItype);
+  FP_PACK_RAW_S(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index efb66e9f0a0a06c32607c502e162b6364a802923..afc3b7862b720da7330ca3b33892fea3b676da7b 100644 (file)
 #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_PACK_Q(a, A);
+  FP_FROM_INT_Q(A, i, SI_BITS, USItype);
+  FP_PACK_RAW_Q(a, A);
   FP_HANDLE_EXCEPTIONS;
 
   return a;
index 66762d0c815715f10b9f17dc91de139d67fa7856..b3af2f16d804af9cb63d2ef394a5efcf56232eca 100644 (file)
@@ -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);
index bc5f4317471448fc7de6ae2444a8cb299da9c858..d1cdbec7d3bf304eea595177864cf238dc5065ab 100644 (file)
@@ -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);
index 40a3a51e779b94bdcb14f7f39dde476bdce0811b..51aa7de3702a7610e9e77c540e9dcec22807a3c9 100644 (file)
@@ -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);
index 70d849a1e269e8a2374277abd04626197a2efd98..f5efaaabd8f26c84a075cbed6051e8fd0b887eee 100644 (file)
@@ -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);
index 31c07e6e23a5eb38645cd0f09dc3756b17e73e0c..86e0c87a394fddb3d7887a7608c78885b4c254b7 100644 (file)
@@ -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);
index 883745ffab0ef2432ef5897581bb010755151240..339ee0381f75dcb7c914905c6141b9defcbeabc3 100644 (file)
@@ -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);
index c1521ef9d7d9c42f65742d6fe03ac276e4946f2a..e6f8a0f108e8ae26398a3e65c0de8e294f053617 100644 (file)
@@ -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).
 #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);
index 48b215b7d6df296959a47ded40d7260fb82c1ad4..b493df86097a974df6c6d4be53e1e07365deff55 100644 (file)
@@ -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).
 #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);
index b54eb1a767b5ed8f79bd44b5c4882b39496d8262..067ff1a3f77f6d7cefab4bb327a0073a57488ced 100644 (file)
@@ -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).
 #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);
index cc287c54fe48b0ca60a3a0419cecc2d62e9c9b6f..cc3ce78f56f0c0574c504b75ef1bfd05ba1fbc6b 100644 (file)
@@ -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).
 #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);
index 15bfef4fc1702db87192b3bc3e1a4f00ee8bd154..48ac33b9141ffad130d02ea396f3ba0fbe1b4d4f 100644 (file)
@@ -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).
 #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);
index f3eba5f21ddfb75564d9fd181e1c5207606c0748..38fbe97d588c0ff3447c0fb06984ef70dd64c9c9 100644 (file)
@@ -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).
 #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);
index 367ff2274b6fa9cf0598c08d24ea8309597b3893..9f58ba6a086c6fad7717954a5c2b8cd4805be117 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic one-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),
 #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)))
  * Convert FP values between word sizes
  */
 
-#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)
+#define _FP_FRAC_COPY_1_1(D, S)                (D##_f = S##_f)
index 89da27fa4f17993ce283b58c0e042341a9261c93..d8b89ff8438c084274bc5b58ad4826b0fc223668 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic two-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),
 #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_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)
 #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
  */
 
 #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 {                                                                 \
  * Convert FP values between word sizes
  */
 
-#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_1_2(D, S)                (D##_f = S##_f0)
 
+#define _FP_FRAC_COPY_2_1(D, S)                ((D##_f0 = S##_f), (D##_f1 = 0))
index 404cb22848b906cc838695a98f882a3eb67b1091..c0ffaafff696d3cf9430abd42dff0f092a8b99f1 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic four-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),
  * 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_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);                                             \
+#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;                       \
   } while (0)
 
 #define _FP_FRAC_ADD_4(R,X,Y)                                          \
 #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;                                              \
 #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;                                              \
 #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;                                              \
 #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;                                              \
  * 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_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_1_4(D, S)                (D##_f = S##_f[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)
+#define _FP_FRAC_COPY_2_4(D, S)                        \
+do {                                           \
+  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.
     X##_f[3] = (rsize <= 3*_FP_W_TYPE_SIZE ? 0 : r >> 3*_FP_W_TYPE_SIZE); \
   } 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)
-
+#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)
index 789d383da78c70eb1957b8111eff491f49a0a7b6..01d92357ddfb8ce37a8dd135d50f43e50ab60d54 100644 (file)
@@ -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
     _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;                       \
index f30260ede4228140c2ddf8262fbe7d67e2313b2d..957f71dacd77324770ce79e018c7c6d264b76e77 100644 (file)
@@ -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)
 
 /*
@@ -71,6 +71,87 @@ 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_SET_EXCEPTION(FP_EX_OVERFLOW);                        \
+      FP_SET_EXCEPTION(FP_EX_INEXACT);                 \
+      _FP_FRAC_SET_##wc(X, _FP_MAXFRAC_##wc);          \
+    }                                                  \
+} 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
@@ -202,153 +283,433 @@ do {                                                            \
 
 
 
-/*
- * 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();                                                                \
-  }                                                                         \
+/* 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: ;                                                                 \
+    }                                                                   \
 } 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##_c != FP_CLS_NAN) Y##_s ^= 1;                                    \
-    _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, '-');                                \
   } while (0)
 
 
@@ -537,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.  */
@@ -616,115 +977,277 @@ do {                                                                    \
   } while (0)
 
 /*
- * Convert from FP to integer
+ * Convert from FP to integer.  Input is raw.
  */
 
 /* 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 {                                                                         \
-    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;                                      \
+#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 (_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;                                 \
-      }                                                                        \
+      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);                             \
+      }                                                                             \
   } 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)
+/* 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);                             \
+             _FP_FRAC_HIGH_##dfs(D) |= _FP_QNANBIT_SH_##dfs;                \
+           }                                                                \
+       }                                                                    \
+    }                                                                       \
+} while (0)
 
 /*
  * Helper primitives.
index c1dccc49a157fd650529c55adb027899d70d7adb..578f17e43621b11115428b57cad396ecddbed700 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Quad Precision.
-   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),
 
 #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
 {
-   long double flt;
+   TFtype flt;
    struct 
    {
 #if __BYTE_ORDER == __BIG_ENDIAN
@@ -95,6 +101,18 @@ 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);         \
@@ -108,6 +126,19 @@ 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)
@@ -130,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;
@@ -171,6 +202,18 @@ 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);         \
@@ -184,6 +227,19 @@ 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)
index 094dc3c484e3a00f17e0562baa1a263f9dc10608..ffb31786af0398faefce2f71453e60824fb752cb 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Single Precision.
-   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),
 #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_W_TYPE_SIZE - _FP_FRACBITS_S)
+#define _FP_FRACXBITS_S                (_FP_FRACTBITS_S - _FP_FRACBITS_S)
 #define _FP_WFRACBITS_S                (_FP_WORKBITS + _FP_FRACBITS_S)
-#define _FP_WFRACXBITS_S       (_FP_W_TYPE_SIZE - _FP_WFRACBITS_S)
+#define _FP_WFRACXBITS_S       (_FP_FRACTBITS_S - _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
 {
-  float flt;
+  SFtype flt;
   struct {
 #if __BYTE_ORDER == __BIG_ENDIAN
     unsigned sign : 1;
@@ -78,6 +84,18 @@ 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);         \
@@ -91,6 +109,19 @@ 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)
index 24a9b33c08703308e3f9015dd867ee8b5958d11a..4d4e5d504ca9224bbb23185f5e9f790741ee3c68 100644 (file)
@@ -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),
 #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__((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
index 48efad9349d69d617b610e98ce307f78a23e9a17..b52cafd04d8a1eb254708649d87ef74b3729b304 100644 (file)
@@ -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).
 #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);
index 1c8aead6eba5addcc28b5f1ef3a05175d5861b30..436e8cedad09065ca851f8df0f5b88d588372175 100644 (file)
@@ -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).
 #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);
index 241f42dbb465512b5a1a0b9001f946b1122b4ec9..ac2ad6fc5fbba6c6d0e9e7d5dfc87524c2a016f4 100644 (file)
@@ -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).
 #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);
index 11a33395f2f935cecdfc0221041ba9c3de0375b8..81a2585d62248d6fd4679bda64bdf5554845e30b 100644 (file)
@@ -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).
 #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_D(A, a);
-  FP_UNPACK_D(B, b);
+  FP_UNPACK_SEMIRAW_D(A, a);
+  FP_UNPACK_SEMIRAW_D(B, b);
   FP_SUB_D(R, A, B);
-  FP_PACK_D(r, R);
+  FP_PACK_SEMIRAW_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 84d418b612a049ac57d3dcf78a508682f1532c0e..843fb5055dc86603a7cd0d38b0a14fc6682cb155 100644 (file)
@@ -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).
 #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_S(A, a);
-  FP_UNPACK_S(B, b);
+  FP_UNPACK_SEMIRAW_S(A, a);
+  FP_UNPACK_SEMIRAW_S(B, b);
   FP_SUB_S(R, A, B);
-  FP_PACK_S(r, R);
+  FP_PACK_SEMIRAW_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 448d398a952e6763286f15bd821d175b0331acba..a8e2eead5f67c4fd4102376834c67d8bba261b76 100644 (file)
@@ -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).
 #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_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_SUB_Q(R, A, B);
-  FP_PACK_Q(r, R);
+  FP_PACK_SEMIRAW_Q(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index f7459513d669ea51892f249970c00968e7f22871..0e802d9dfd12f69e3506d9e892b1004bb734f3bd 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE double into IEEE single
-   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).
 #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_D(A, a);
+  FP_UNPACK_SEMIRAW_D(A, a);
 #if _FP_W_TYPE_SIZE < _FP_FRACBITS_D
-  FP_CONV(S,D,1,2,R,A);
+  FP_TRUNC(S,D,1,2,R,A);
 #else
-  FP_CONV(S,D,1,1,R,A);
+  FP_TRUNC(S,D,1,1,R,A);
 #endif
-  FP_PACK_S(r, R);
+  FP_PACK_SEMIRAW_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 18ce1d56e8bfdd96c2563558c37f010c1ad01574..e88d476f13519c29e793731a627eac6f1d843415 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE quad into IEEE double
-   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).
 #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_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(D,Q,2,4,R,A);
+  FP_TRUNC(D,Q,2,4,R,A);
 #else
-  FP_CONV(D,Q,1,2,R,A);
+  FP_TRUNC(D,Q,1,2,R,A);
 #endif
-  FP_PACK_D(r, R);
+  FP_PACK_SEMIRAW_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 32d658ab67a05f93576480c1064b4154c11a6382..0601cf01fde3df9b800e5ea8a0b95e33c9528e62 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE quad into IEEE single
-   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).
 #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_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(S,Q,1,4,R,A);
+  FP_TRUNC(S,Q,1,4,R,A);
 #else
-  FP_CONV(S,Q,1,2,R,A);
+  FP_TRUNC(S,Q,1,2,R,A);
 #endif
-  FP_PACK_S(r, R);
+  FP_PACK_SEMIRAW_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 35f3e673dbe0ff33368df061dc1d275bef2d5615..c44b61d131a4c90eb5717ac906fd2442f36b116c 100644 (file)
@@ -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;
index e741b794c1068d6f7673f4f05008f4a9c464884f..4924ddcc1ed39320bc92ce0e5f9f64b11297397b 100644 (file)
@@ -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);
index 5e30ddb8d2ce157909991cb2dc8e00b6086962e6..f0e43c1deeb494c50eb8ec96529cc0986b9e6a5d 100644 (file)
@@ -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);
index b4f6c28f3d072fdbb65073c1d7ed70d4fa90a842..acf66f316bbd052aafd5c53362c34487daba94c4 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: addition.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -29,10 +29,10 @@ _OtsAddX(long al, long ah, long bl, long bh, long _round)
   FP_DECL_RETURN(c);
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_ADD_Q(C, A, B);
-  FP_PACK_Q(c, C);
+  FP_PACK_SEMIRAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
 
   FP_RETURN(c);
index d7ab5bae43b7229e38c31c76831506e59a703d23..82c50806c4e4a426a0de40f52037c1e30293b1fe 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: unsigned integer to float conversion.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -33,8 +33,8 @@ _OtsCvtQUX (unsigned long a)
   FP_DECL_Q(C);
   FP_DECL_RETURN(c);
 
-  FP_FROM_INT_Q(C, a, 64, long);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, a, 64, unsigned long);
+  FP_PACK_RAW_Q(c, C);
 
   FP_RETURN(c);
 }
index 0e1c6bdc4112c55a796d145974bcb0f3c665ddc9..dc802915066c3632bf2a69e52cb19830e2996e9b 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: signed integer to float conversion.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -33,7 +33,7 @@ _OtsCvtQX (long a)
   FP_DECL_Q(C);
   FP_DECL_RETURN(c);
 
-  FP_FROM_INT_Q(C, a, 64, long);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, a, 64, unsigned long);
+  FP_PACK_RAW_Q(c, C);
   FP_RETURN(c);
 }
index ee5ac324cd27fc0faf865a701ef23997f6b5d878..2d0bc9bca9e3ebc34358a1c68c0d24d21a51e05f 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: floating point extension.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -35,13 +35,13 @@ _OtsConvertFloatTX(double a)
   FP_DECL_Q(C);
   FP_DECL_RETURN(c);
 
-  FP_UNPACK_D(A, a);
+  FP_UNPACK_RAW_D(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,D,4,2,C,A);
+  FP_EXTEND(Q,D,4,2,C,A);
 #else
-  FP_CONV(Q,D,2,1,C,A);
+  FP_EXTEND(Q,D,2,1,C,A);
 #endif
-  FP_PACK_Q(c, C);
+  FP_PACK_RAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
 
   FP_RETURN(c);
index 1fd47da4f7f1d8b7e27f8f8de25783a637cdaab8..2c9df529d5d5bc45a65d67c00d48ca8fac134882 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: float to integer conversion.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -26,14 +26,15 @@ _OtsCvtXQ (long al, long ah, long _round)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long r, s;
+  unsigned long r;
+  long s;
 
   /* If bit 3 is set, then integer overflow detection is requested.  */
   s = _round & 8 ? 1 : -1;
   _round = _round & 3;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 64, s);
 
   if (s > 0 && (_fex &= FP_EX_INVALID))
index 2629dd9e400b42295a2eab87a21eb5f608772e1b..6221a2365ceadd2ac4c1ed2e1c4905ac812fefa7 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: floating point truncation.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -31,13 +31,13 @@ _OtsConvertFloatXT (long al, long ah, long _round)
   double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(D,Q,2,4,R,A);
+  FP_TRUNC(D,Q,2,4,R,A);
 #else
-  FP_CONV(D,Q,1,2,R,A);
+  FP_TRUNC(D,Q,1,2,R,A);
 #endif
-  FP_PACK_D(r, R);
+  FP_PACK_SEMIRAW_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 2cb1ca4c2abb862050fa69ab88ebfdda06b7318a..a718372af76e3aedee2b9f8f4bc5485b871ea605 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: convert to fortran nearest.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -26,22 +26,24 @@ _OtsNintXQ (long al, long ah, long _round)
 {
   FP_DECL_EX;
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C);
-  long r, s;
+  unsigned long r;
+  long s;
 
   /* If bit 3 is set, then integer overflow detection is requested.  */
   s = _round & 8 ? 1 : -1;
   _round = _round & 3;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 
   /* Build 0.5 * sign(A) */
   B_e = _FP_EXPBIAS_Q;
-  __FP_FRAC_SET_2 (B, _FP_IMPLBIT_Q, 0);
+  __FP_FRAC_SET_2 (B, 0, 0);
   B_s = A_s;
-  _FP_UNPACK_CANONICAL(Q,2,B);
 
   FP_ADD_Q(C, A, B);
+  _FP_FRAC_SRL_2(C, _FP_WORKBITS);
+  _FP_FRAC_HIGH_RAW_Q(C) &= ~(_FP_W_TYPE)_FP_IMPLBIT_Q;
   FP_TO_INT_Q(r, C, 64, s);
   if (s > 0 && (_fex &= FP_EX_INVALID))
     FP_HANDLE_EXCEPTIONS;
index c10043f07179ddb95547b25ee4095874c5dbc10b..5147266a0494a9a9eca7bb4a4a80c94b8f8edb72 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation: subtraction.
-   Copyright (C) 1997,1999,2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,1999,2004,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).
@@ -29,10 +29,10 @@ _OtsSubX(long al, long ah, long bl, long bh, long _round)
   FP_DECL_RETURN(c);
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_SUB_Q(C, A, B);
-  FP_PACK_Q(c, C);
+  FP_PACK_SEMIRAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
 
   FP_RETURN(c);
index 4338803932847b9fb1ece42a9ef37bb3b6e46569..80a0b3f6d329745a439f01268b4dea3cd59bf195 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a + b
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,10 +30,10 @@ long double _q_add(const long double a, const long double b)
   long double c;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_ADD_Q(C, A, B);
-  FP_PACK_Q(c, C);
+  FP_PACK_SEMIRAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 6c4c74037ec29bf3f84c7a303ed3cff9533da0c3..baebea546b09ea408720b76824637994c8d4c251 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long double)(a)
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -32,13 +32,13 @@ long double _q_dtoq(const double a)
   long double c;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_D(A, a);
+  FP_UNPACK_RAW_D(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,D,4,2,C,A);
+  FP_EXTEND(Q,D,4,2,C,A);
 #else
-  FP_CONV(Q,D,2,1,C,A);
+  FP_EXTEND(Q,D,2,1,C,A);
 #endif
-  FP_PACK_Q(c, C);
+  FP_PACK_RAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 166138c24eeeb8c788731b9d008683804893fd99..e2884005ae2a4f68056921c8e9507b14d2f63c13 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long double)(a)
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,8 +30,8 @@ long double _q_itoq(const int a)
   int b = a;
   long double c;
 
-  FP_FROM_INT_Q(C, b, 32, int);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
index 6412eccd3e897e7c99d459edb9decee7dd649561..22d2e55fac37deed3916d8c11c409432f50416a2 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long double)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,8 +30,8 @@ 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_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
index d107f3869630ba00ffc6c9061499149fcd0c94e1..685aa68e6dc25e348a302b4df0ecebbbc87f18d1 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (double)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -32,13 +32,13 @@ double _q_qtod(const long double a)
   double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(D,Q,2,4,R,A);
+  FP_TRUNC(D,Q,2,4,R,A);
 #else
-  FP_CONV(D,Q,1,2,R,A);
+  FP_TRUNC(D,Q,1,2,R,A);
 #endif
-  FP_PACK_D(r, R);
+  FP_PACK_SEMIRAW_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 90c01e6e7ac3ac0929f10c7e1a2d49dbb775643d..89410d1253c3266117809f97652a218a76cf7153 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (int)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -28,9 +28,9 @@ int _q_qtoi(const long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  int r;
+  unsigned int r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 32, 1);
   FP_HANDLE_EXCEPTIONS;
 
index 72bde2e62a000136e7ef2d734600a5c76b9fa647..3b0251f1bac72d20872ad1edeac38adff1c3f8d7 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -28,9 +28,9 @@ long long _q_qtoll(const long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long long r;
+  unsigned long long r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 64, 1);
   FP_HANDLE_EXCEPTIONS;
 
index ebd6baee95a43aae28dfa8d7aecc18d0189f0963..0d71271d0177a0c5183b01b561d0818fa45d3ee7 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (float)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -32,13 +32,13 @@ float _q_qtos(const long double a)
   float r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(S,Q,1,4,R,A);
+  FP_TRUNC(S,Q,1,4,R,A);
 #else
-  FP_CONV(S,Q,1,2,R,A);
+  FP_TRUNC(S,Q,1,2,R,A);
 #endif
-  FP_PACK_S(r, R);
+  FP_PACK_SEMIRAW_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index b9119d037c07e486755eeb5778c487dc8bb13c13..e5d21f1f4df1950281a5c7eb89c3b11c8100ba8c 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (unsigned int)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,7 +30,7 @@ unsigned int _q_qtou(const long double a)
   FP_DECL_Q(A);
   unsigned int r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 32, -1);
   FP_HANDLE_EXCEPTIONS;
 
index 9fcefd60be0964642df847ea1db976ed1ab71f5a..a01100c797bc1553ad56965cf9b959c608bc5a5c 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,7 +30,7 @@ unsigned long long _q_qtoull(const long double a)
   FP_DECL_Q(A);
   unsigned long long r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 64, -1);
   FP_HANDLE_EXCEPTIONS;
 
index 3fc4a5970df2a6372ee7d0659d71ce151c5f1f1a..f43a93ceabfa88b62d2dba74af7f9bdacb8a6409 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    c = (long double)(a)
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -31,13 +31,13 @@ long double _q_stoq(const float a)
   FP_DECL_Q(C);
   long double c;
 
-  FP_UNPACK_S(A, a);
+  FP_UNPACK_RAW_S(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,S,4,1,C,A);
+  FP_EXTEND(Q,S,4,1,C,A);
 #else
-  FP_CONV(Q,S,2,1,C,A);
+  FP_EXTEND(Q,S,2,1,C,A);
 #endif
-  FP_PACK_Q(c, C);
+  FP_PACK_RAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 50c56b29c4b3cbae684f957c55475de0015ccaab..399be021d250648e3307154e10374f989762167d 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    c = a - b
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,10 +30,10 @@ long double _q_sub(const long double a, const long double b)
   long double c;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_SUB_Q(C, A, B);
-  FP_PACK_Q(c, C);
+  FP_PACK_SEMIRAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 428f201e15c5a20fe6f4fe3ad1ad4af20729e8ce..30f5fc9bfadc6a82836926aa1c77fea94a042a93 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long double)a
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,8 +30,8 @@ long double _q_ulltoq(const unsigned long long a)
   long double c;
   unsigned long long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long long);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
index 87607e3ab979ca8375e8ed181c69804f5af73faf..232bcfe3e9b30fe5dee904023450608503b7fdfe 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    c = (long double)(a)
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 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).
@@ -30,8 +30,8 @@ long double _q_uitoq(const unsigned int a)
   long double c;
   unsigned int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
similarity index 89%
rename from sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.c
rename to sysdeps/sparc/dl-procinfo.c
index e9042d9717067e7c80a784ee0960d99633fd53e6..55677be6aeb7af878a95668fca1bd21228398479 100644 (file)
@@ -1,5 +1,5 @@
-/* Data for Linux/sparc32 version of processor capability information.
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Data for Linux/sparc version of processor capability information.
+   Copyright (C) 2002,2003,2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
 
@@ -45,9 +45,9 @@
 #endif
 
 #if !defined PROCINFO_DECL && defined SHARED
-  ._dl_sparc32_cap_flags
+  ._dl_sparc_cap_flags
 #else
-PROCINFO_CLASS const char _dl_sparc32_cap_flags[6][7]
+PROCINFO_CLASS const char _dl_sparc_cap_flags[][7]
 #endif
 #ifndef PROCINFO_DECL
 = {
similarity index 77%
rename from sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h
rename to sysdeps/sparc/dl-procinfo.h
index 82a94fca9cec275c36318b1fdebf3539cc60317c..a90a4890056b8cbf58125a19f0bb68b2ce720d6e 100644 (file)
@@ -1,5 +1,6 @@
-/* Linux/sparc32 version of processor capability information handling macros.
-   Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
+/* Linux/sparc version of processor capability information handling macros.
+   Copyright (C) 1999,2000,2001,2002,2003,2004,2006
+       Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999.
 
@@ -35,7 +36,7 @@ _dl_procinfo (int word)
 
   for (i = 0; i < _DL_HWCAP_COUNT; ++i)
     if (word & (1 << i))
-      _dl_printf (" %s", GLRO(dl_sparc32_cap_flags)[i]);
+      _dl_printf (" %s", GLRO(dl_sparc_cap_flags)[i]);
 
   _dl_printf ("\n");
 
@@ -46,7 +47,7 @@ static inline const char *
 __attribute__ ((unused))
 _dl_hwcap_string (int idx)
 {
-  return GLRO(dl_sparc32_cap_flags)[idx];
+  return GLRO(dl_sparc_cap_flags)[idx];
 };
 
 static inline int
@@ -56,13 +57,15 @@ _dl_string_hwcap (const char *str)
   int i;
   for (i = 0; i < _DL_HWCAP_COUNT; i++)
     {
-      if (strcmp (str, GLRO(dl_sparc32_cap_flags) [i]) == 0)
+      if (strcmp (str, GLRO(dl_sparc_cap_flags) [i]) == 0)
        return i;
     }
   return -1;
 };
 
-#define HWCAP_IMPORTANT (HWCAP_SPARC_V9|HWCAP_SPARC_ULTRA3)
+#include <bits/wordsize.h>
+#define HWCAP_IMPORTANT_V9 (__WORDSIZE__ == 64 ? 0 : HWCAP_SPARC_V9)
+#define HWCAP_IMPORTANT (HWCAP_IMPORTANT_V9|HWCAP_SPARC_ULTRA3)
 
 /* There are no different platforms defined.  */
 #define _dl_platform_string(idx) ""
index fb9346159345f98b15f9c39c74f4b733d3e8d43f..987c7255820562b6474a65f10c0fb617c38bf715 100644 (file)
@@ -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).
@@ -30,10 +30,10 @@ long double _Q_add(const long double a, const long double b)
   long double c;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_ADD_Q(C, A, B);
-  FP_PACK_Q(c, C);
+  FP_PACK_SEMIRAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 5cac5c0840e83e89cef99820145d8ded57327456..6b119f45019f313473233d233967036dba6bae01 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long double)(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).
@@ -32,13 +32,13 @@ long double _Q_dtoq(const double a)
   long double c;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_D(A, a);
+  FP_UNPACK_RAW_D(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,D,4,2,C,A);
+  FP_EXTEND(Q,D,4,2,C,A);
 #else
-  FP_CONV(Q,D,2,1,C,A);
+  FP_EXTEND(Q,D,2,1,C,A);
 #endif
-  FP_PACK_Q(c, C);
+  FP_PACK_RAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 0010b3bcbf3fc34d465f41e2d56202f640c3935c..b50942f75f3cefbb1bd11d82aba1221fdd03a325 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long double)(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).
@@ -30,8 +30,8 @@ long double _Q_itoq(const int a)
   int b = a;
   long double c;
 
-  FP_FROM_INT_Q(C, b, 32, int);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
index c801ca86f11e892fb8e6a4b499888c10ca7a1413..f977585e429f2c5703272bfb6e97603b48e60024 100644 (file)
@@ -30,8 +30,8 @@ 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_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
index b0778476b8c994d51a06ce72f1a3bfcd4a497d55..82b01ec8a15210575f39b9ce092fbb9a17a6f60a 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (double)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).
@@ -32,13 +32,13 @@ double _Q_qtod(const long double a)
   double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(D,Q,2,4,R,A);
+  FP_TRUNC(D,Q,2,4,R,A);
 #else
-  FP_CONV(D,Q,1,2,R,A);
+  FP_TRUNC(D,Q,1,2,R,A);
 #endif
-  FP_PACK_D(r, R);
+  FP_PACK_SEMIRAW_D(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 0440e9abbaac5de5105eb1dcd10a51442aaddb9a..270ba9f677b521f051474c829403af118137d868 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (int)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).
@@ -28,9 +28,9 @@ int _Q_qtoi(const long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  int r;
+  unsigned int r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 32, 1);
   FP_HANDLE_EXCEPTIONS;
 
index af328bda1c6f1d7852bb23335080de1a6d28fde4..e0d29019b3fdd68ac5e16d11bba823b9c80873c0 100644 (file)
@@ -28,9 +28,9 @@ long long _Q_qtoll(const long double a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long long r;
+  unsigned long long r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 64, 1);
   FP_HANDLE_EXCEPTIONS;
 
index 31c8d6ac821dc3a3e50f694666a18587d04054bb..93daa23cacf95d1633e75195d5da4267172980ad 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (float)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).
@@ -32,13 +32,13 @@ float _Q_qtos(const long double a)
   float r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(S,Q,1,4,R,A);
+  FP_TRUNC(S,Q,1,4,R,A);
 #else
-  FP_CONV(S,Q,1,2,R,A);
+  FP_TRUNC(S,Q,1,2,R,A);
 #endif
-  FP_PACK_S(r, R);
+  FP_PACK_SEMIRAW_S(r, R);
   FP_HANDLE_EXCEPTIONS;
 
   return r;
index 041a78e28cfa12bad829a1133ccc887b10446d89..812b4e06ea6c50410fa1a6c3139a7fa7e93a9492 100644 (file)
@@ -30,7 +30,7 @@ unsigned int _Q_qtou(const long double a)
   FP_DECL_Q(A);
   unsigned int r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 32, -1);
   FP_HANDLE_EXCEPTIONS;
 
index 8170e994f54e5641db3fd4b99b3396f8f8d059ab..7a88c9f3828465e45dd0f423cc60ae9ad253178f 100644 (file)
@@ -30,7 +30,7 @@ unsigned long long _Q_qtoull(const long double a)
   FP_DECL_Q(A);
   unsigned long long r;
 
-  FP_UNPACK_Q(A, a);
+  FP_UNPACK_RAW_Q(A, a);
   FP_TO_INT_Q(r, A, 64, -1);
   FP_HANDLE_EXCEPTIONS;
 
index 98609faf20554e44a56ef1220d97c188b64ce28c..714d880dd782e9d53cc98cb1071bbbd31fcba216 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    c = (long double)(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).
@@ -31,13 +31,13 @@ long double _Q_stoq(const float a)
   FP_DECL_Q(C);
   long double c;
 
-  FP_UNPACK_S(A, a);
+  FP_UNPACK_RAW_S(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,S,4,1,C,A);
+  FP_EXTEND(Q,S,4,1,C,A);
 #else
-  FP_CONV(Q,S,2,1,C,A);
+  FP_EXTEND(Q,S,2,1,C,A);
 #endif
-  FP_PACK_Q(c, C);
+  FP_PACK_RAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 1987aea4808c45aaed580606085b9d2314166984..8616727bb14e4b26cd897c759574350a486bbea9 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    c = 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).
@@ -30,10 +30,10 @@ long double _Q_sub(const long double a, const long double b)
   long double c;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_Q(A, a);
-  FP_UNPACK_Q(B, b);
+  FP_UNPACK_SEMIRAW_Q(A, a);
+  FP_UNPACK_SEMIRAW_Q(B, b);
   FP_SUB_Q(C, A, B);
-  FP_PACK_Q(c, C);
+  FP_PACK_SEMIRAW_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
index 77e64b4de7d4290106f62be88e193ae2a8c98fa1..53c0add2d8d428c2b3e945afc2e0c60997cce633 100644 (file)
@@ -30,8 +30,8 @@ long double _Q_ulltoq(const unsigned long long a)
   long double c;
   unsigned long long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long long);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 64, unsigned long long);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
index 6efb780cf1649b8bba8e55b9b2c4afc47078660d..f902bf83973e2ddb75cf117acc6eee3741dc2835 100644 (file)
@@ -30,8 +30,8 @@ long double _Q_utoq(const unsigned int a)
   long double c;
   unsigned int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
-  FP_PACK_Q(c, C);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
+  FP_PACK_RAW_Q(c, C);
   FP_CLEAR_EXCEPTIONS;
   FP_HANDLE_EXCEPTIONS;
   return c;
index bcfd0ff281127c7284065b9a50feb8969d704d28..eced23fad89d92407e77f9b334618513bb1f2341 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (*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).
@@ -29,10 +29,10 @@ void _Qp_add(long double *c, const long double *a, const long double *b)
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C);
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
-  FP_UNPACK_QP(B, b);
+  FP_UNPACK_SEMIRAW_QP(A, a);
+  FP_UNPACK_SEMIRAW_QP(B, b);
   FP_ADD_Q(C, A, B);
-  FP_PACK_QP(c, C);
+  FP_PACK_SEMIRAW_QP(c, C);
   QP_HANDLE_EXCEPTIONS(__asm (
 "      ldd [%1], %%f52\n"
 "      ldd [%1+8], %%f54\n"
index 9ba2fac9ce91322f81e23072b9e77782538f3a12..63f3d742aac40a718d8a22fc53b67bdebec86b1e 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (long double)(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).
@@ -31,13 +31,13 @@ void _Qp_dtoq(long double *c, const double a)
   FP_DECL_Q(C);
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_D(A, a);
+  FP_UNPACK_RAW_D(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,D,4,2,C,A);
+  FP_EXTEND(Q,D,4,2,C,A);
 #else
-  FP_CONV(Q,D,2,1,C,A);
+  FP_EXTEND(Q,D,2,1,C,A);
 #endif
-  FP_PACK_QP(c, C);
+  FP_PACK_RAW_QP(c, C);
   QP_HANDLE_EXCEPTIONS(__asm (
 "      fdtoq %1, %%f60\n"
 "      std %%f60, [%0]\n"
index dd28b6a56ed97812d5c390d981275b13bd634d64..310d70c77a03a55ac0a462a1be24eb6f0571320c 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (long double)(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).
@@ -29,7 +29,7 @@ void _Qp_itoq(long double *c, const int a)
   FP_DECL_Q(C);
   int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
-  FP_PACK_QP(c, C);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
+  FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }
index c86967a5d40c4ce0ad6b997071a5cc9f8524e092..2e5edadcb7d47bcc60f012bef1060b61f229a1e9 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (double)(*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).
@@ -32,13 +32,13 @@ double _Qp_qtod(const long double *a)
   double r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
+  FP_UNPACK_SEMIRAW_QP(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(D,Q,2,4,R,A);
+  FP_TRUNC(D,Q,2,4,R,A);
 #else
-  FP_CONV(D,Q,1,2,R,A);
+  FP_TRUNC(D,Q,1,2,R,A);
 #endif
-  FP_PACK_D(r, R);
+  FP_PACK_SEMIRAW_D(r, R);
   QP_HANDLE_EXCEPTIONS(__asm (
 "      ldd [%1], %%f52\n"
 "      ldd [%1+8], %%f54\n"
index cf8aba73c6c87eb56facf918d60e92c5cc730c79..a40253654ab4838f945576e251c5cea272f57562 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (int)(*a)
-   Copyright (C) 1997, 1999, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2004, 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).
@@ -28,10 +28,10 @@ int _Qp_qtoi(const long double *a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  int r;
+  unsigned int r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
+  FP_UNPACK_RAW_QP(A, a);
   FP_TO_INT_Q(r, A, 32, 1);
   QP_HANDLE_EXCEPTIONS(
        int rx;
index 52d52d683021a8303bb0c665b2bb7f8c933ff87f..f5f9cdb190175832a9908960da3ba1aee0a36802 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (float)(*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).
@@ -32,13 +32,13 @@ float _Qp_qtos(const long double *a)
   float r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
+  FP_UNPACK_SEMIRAW_QP(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(S,Q,1,4,R,A);
+  FP_TRUNC(S,Q,1,4,R,A);
 #else
-  FP_CONV(S,Q,1,2,R,A);
+  FP_TRUNC(S,Q,1,2,R,A);
 #endif
-  FP_PACK_S(r, R);
+  FP_PACK_SEMIRAW_S(r, R);
 
   QP_HANDLE_EXCEPTIONS(__asm (
 "      ldd [%1], %%f52\n"
index abee50b06aa218f6d0af9ca3a76e6bba21796302..884d23e527c11fd1fd810fa2200823424a3185b7 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (unsigned int)(*a)
-   Copyright (C) 1997, 1999, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2004, 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).
@@ -31,7 +31,7 @@ unsigned int _Qp_qtoui(const long double *a)
   unsigned int r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
+  FP_UNPACK_RAW_QP(A, a);
   FP_TO_INT_Q(r, A, 32, -1);
   QP_HANDLE_EXCEPTIONS(
        int rx;
index 87c8478880d9f39a230d62da7bdd88e6969842af..4b6f265a476d3c1235d9d3143e2f4f43ad73bdc5 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (unsigned long)(*a)
-   Copyright (C) 1997, 1999, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2004, 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).
@@ -31,7 +31,7 @@ unsigned long _Qp_qtoux(const long double *a)
   unsigned long r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
+  FP_UNPACK_RAW_QP(A, a);
   FP_TO_INT_Q(r, A, 64, -1);
   QP_HANDLE_EXCEPTIONS(
        unsigned long rx;
index 35481196eebd4f7a68792725ad7e36f469aff4f2..fac6166c2cc1d2f3c051104a4386d5991bc1c5d8 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return (long)(*a)
-   Copyright (C) 1997, 1999, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2004, 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).
@@ -28,10 +28,10 @@ long _Qp_qtox(const long double *a)
 {
   FP_DECL_EX;
   FP_DECL_Q(A);
-  long r;
+  unsigned long r;
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
+  FP_UNPACK_RAW_QP(A, a);
   FP_TO_INT_Q(r, A, 64, 1);
   QP_HANDLE_EXCEPTIONS(
        long rx;
index 655813186ed9cc45fa2be5cfb1f06ad67023e970..1a4a03df88e81a6e8792a439895d2dc8ea3e8b25 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (long double)(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).
@@ -31,13 +31,13 @@ void _Qp_stoq(long double *c, const float a)
   FP_DECL_Q(C);
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_S(A, a);
+  FP_UNPACK_RAW_S(A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
-  FP_CONV(Q,S,4,1,C,A);
+  FP_EXTEND(Q,S,4,1,C,A);
 #else
-  FP_CONV(Q,S,2,1,C,A);
+  FP_EXTEND(Q,S,2,1,C,A);
 #endif
-  FP_PACK_QP(c, C);
+  FP_PACK_RAW_QP(c, C);
   QP_HANDLE_EXCEPTIONS(__asm (
 "      fstoq %1, %%f60\n"
 "      std %%f60, [%0]\n"
index b1ed15a58817ceb9695ae713433f11513defb0e9..056224fb460e880257d298624f1201d056d8e1a4 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (*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).
@@ -29,10 +29,10 @@ void _Qp_sub(long double *c, const long double *a, const long double *b)
   FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C);
 
   FP_INIT_ROUNDMODE;
-  FP_UNPACK_QP(A, a);
-  FP_UNPACK_QP(B, b);
+  FP_UNPACK_SEMIRAW_QP(A, a);
+  FP_UNPACK_SEMIRAW_QP(B, b);
   FP_SUB_Q(C, A, B);
-  FP_PACK_QP(c, C);
+  FP_PACK_SEMIRAW_QP(c, C);
   QP_HANDLE_EXCEPTIONS(__asm (
 "      ldd [%1], %%f52\n"
 "      ldd [%1+8], %%f54\n"
index d143ba28d3b3de4c43abeabcde9bbb5a7c905691..a3bfaedfc9ae635f80e8f43a074f22858e138144 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (long double)(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).
@@ -29,7 +29,7 @@ void _Qp_uitoq(long double *c, const unsigned int a)
   FP_DECL_Q(C);
   unsigned int b = a;
 
-  FP_FROM_INT_Q(C, b, 32, int);
-  FP_PACK_QP(c, C);
+  FP_FROM_INT_Q(C, b, 32, unsigned int);
+  FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }
index 302147711c1d8ac2935378b2152ef3e5de682545..f691e4d36fa78476368b4edb25303f941672da53 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (long double)(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).
@@ -29,7 +29,7 @@ void _Qp_uxtoq(long double *c, const unsigned long a)
   FP_DECL_Q(C);
   unsigned long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long);
-  FP_PACK_QP(c, C);
+  FP_FROM_INT_Q(C, b, 64, unsigned long);
+  FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }
index 9b4d16969e59ec0fc9b896bf9dd59088d02e8f3e..b7a6102693df7ef77456b7d340c556cd0996c4dc 100644 (file)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    (*c) = (long double)(*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).
@@ -29,7 +29,7 @@ void _Qp_xtoq(long double *c, const long a)
   FP_DECL_Q(C);
   long b = a;
 
-  FP_FROM_INT_Q(C, b, 64, long);
-  FP_PACK_QP(c, C);
+  FP_FROM_INT_Q(C, b, 64, unsigned long);
+  FP_PACK_RAW_QP(c, C);
   QP_NO_EXCEPTIONS;
 }
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c
deleted file mode 100644 (file)
index 0a453a6..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Data for Linux/sparc64 version of processor capability information.
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
-
-   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.
-
-   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, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-/* This information must be kept in sync with the _DL_HWCAP_COUNT
-   definition in procinfo.h.
-
-   If anything should be added here check whether the size of each string
-   is still ok with the given array size.
-
-   All the #ifdefs in the definitions ar equite irritating but
-   necessary if we want to avoid duplicating the information.  There
-   are three different modes:
-
-   - PROCINFO_DECL is defined.  This means we are only interested in
-     declarations.
-
-   - PROCINFO_DECL is not defined:
-
-     + if SHARED is defined the file is included in an array
-       initializer.  The .element = { ... } syntax is needed.
-
-     + if SHARED is not defined a normal array initialization is
-       needed.
-  */
-
-#ifndef PROCINFO_CLASS
-#define PROCINFO_CLASS
-#endif
-
-#if !defined PROCINFO_DECL && defined SHARED
-  ._dl_sparc64_cap_flags
-#else
-PROCINFO_CLASS const char _dl_sparc64_cap_flags[6][7]
-#endif
-#ifndef PROCINFO_DECL
-= {
-    "flush", "stbar", "swap", "muldiv", "v9", "ultra3"
-  }
-#endif
-#if !defined SHARED || defined PROCINFO_DECL
-;
-#else
-,
-#endif
-
-#undef PROCINFO_DECL
-#undef PROCINFO_CLASS
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h
deleted file mode 100644 (file)
index 3ce77a4..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Linux/sparc64 version of processor capability information handling macros.
-   Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999.
-
-   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.
-
-   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, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _DL_PROCINFO_H
-#define _DL_PROCINFO_H 1
-
-#include <ldsodefs.h>
-
-#define _DL_HWCAP_COUNT 6
-
-static inline int
-__attribute__ ((unused))
-_dl_procinfo (int word)
-{
-  int i;
-
-  _dl_printf ("AT_HWCAP:   ");
-
-  for (i = 0; i < _DL_HWCAP_COUNT; ++i)
-    if (word & (1 << i))
-      _dl_printf (" %s", GLRO(dl_sparc64_cap_flags)[i]);
-
-  _dl_printf ("\n");
-
-  return 0;
-}
-
-static inline const char *
-__attribute__ ((unused))
-_dl_hwcap_string (int idx)
-{
-  return GLRO(dl_sparc64_cap_flags)[idx];
-};
-
-
-static inline int
-__attribute__ ((unused))
-_dl_string_hwcap (const char *str)
-{
-  int i;
-  for (i = 0; i < _DL_HWCAP_COUNT; i++)
-    {
-      if (strcmp (str, GLRO(dl_sparc64_cap_flags) [i]) == 0)
-       return i;
-    }
-  return -1;
-};
-
-#define HWCAP_IMPORTANT (HWCAP_SPARC_ULTRA3)
-
-/* There are no different platforms defined.  */
-#define _dl_platform_string(idx) ""
-
-/* There're no platforms to filter out.  */
-#define _DL_HWCAP_PLATFORM 0
-
-#define _dl_string_platform(str) (-1)
-
-#endif /* dl-procinfo.h */