From a991de32677e4cfba3ef2418475c7d4ef36fe0c7 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sat, 25 Feb 2006 01:24:57 +0000 Subject: [PATCH] 2006-02-09 Joseph S. Myers * 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. --- sysdeps/alpha/soft-fp/ots_add.c | 8 ++++---- sysdeps/alpha/soft-fp/ots_cvtqux.c | 4 ++-- sysdeps/alpha/soft-fp/ots_cvtqx.c | 4 ++-- sysdeps/alpha/soft-fp/ots_cvttx.c | 10 +++++----- sysdeps/alpha/soft-fp/ots_cvtxq.c | 7 ++++--- sysdeps/alpha/soft-fp/ots_cvtxt.c | 10 +++++----- sysdeps/alpha/soft-fp/ots_nintxq.c | 12 +++++++----- sysdeps/alpha/soft-fp/ots_sub.c | 8 ++++---- 8 files changed, 33 insertions(+), 30 deletions(-) diff --git a/sysdeps/alpha/soft-fp/ots_add.c b/sysdeps/alpha/soft-fp/ots_add.c index b4f6c28f3d0..acf66f316bb 100644 --- a/sysdeps/alpha/soft-fp/ots_add.c +++ b/sysdeps/alpha/soft-fp/ots_add.c @@ -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); diff --git a/sysdeps/alpha/soft-fp/ots_cvtqux.c b/sysdeps/alpha/soft-fp/ots_cvtqux.c index d7ab5bae43b..cdb83c882b0 100644 --- a/sysdeps/alpha/soft-fp/ots_cvtqux.c +++ b/sysdeps/alpha/soft-fp/ots_cvtqux.c @@ -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). @@ -34,7 +34,7 @@ _OtsCvtQUX (unsigned long a) FP_DECL_RETURN(c); FP_FROM_INT_Q(C, a, 64, long); - FP_PACK_Q(c, C); + FP_PACK_RAW_Q(c, C); FP_RETURN(c); } diff --git a/sysdeps/alpha/soft-fp/ots_cvtqx.c b/sysdeps/alpha/soft-fp/ots_cvtqx.c index 0e1c6bdc411..6248f9ad102 100644 --- a/sysdeps/alpha/soft-fp/ots_cvtqx.c +++ b/sysdeps/alpha/soft-fp/ots_cvtqx.c @@ -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). @@ -34,6 +34,6 @@ _OtsCvtQX (long a) FP_DECL_RETURN(c); FP_FROM_INT_Q(C, a, 64, long); - FP_PACK_Q(c, C); + FP_PACK_RAW_Q(c, C); FP_RETURN(c); } diff --git a/sysdeps/alpha/soft-fp/ots_cvttx.c b/sysdeps/alpha/soft-fp/ots_cvttx.c index ee5ac324cd2..2d0bc9bca9e 100644 --- a/sysdeps/alpha/soft-fp/ots_cvttx.c +++ b/sysdeps/alpha/soft-fp/ots_cvttx.c @@ -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); diff --git a/sysdeps/alpha/soft-fp/ots_cvtxq.c b/sysdeps/alpha/soft-fp/ots_cvtxq.c index 1fd47da4f7f..2c9df529d5d 100644 --- a/sysdeps/alpha/soft-fp/ots_cvtxq.c +++ b/sysdeps/alpha/soft-fp/ots_cvtxq.c @@ -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)) diff --git a/sysdeps/alpha/soft-fp/ots_cvtxt.c b/sysdeps/alpha/soft-fp/ots_cvtxt.c index 2629dd9e400..6221a2365ce 100644 --- a/sysdeps/alpha/soft-fp/ots_cvtxt.c +++ b/sysdeps/alpha/soft-fp/ots_cvtxt.c @@ -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; diff --git a/sysdeps/alpha/soft-fp/ots_nintxq.c b/sysdeps/alpha/soft-fp/ots_nintxq.c index 2cb1ca4c2ab..a718372af76 100644 --- a/sysdeps/alpha/soft-fp/ots_nintxq.c +++ b/sysdeps/alpha/soft-fp/ots_nintxq.c @@ -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; diff --git a/sysdeps/alpha/soft-fp/ots_sub.c b/sysdeps/alpha/soft-fp/ots_sub.c index c10043f0717..5147266a049 100644 --- a/sysdeps/alpha/soft-fp/ots_sub.c +++ b/sysdeps/alpha/soft-fp/ots_sub.c @@ -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); -- 2.47.2