mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-14 09:01:07 +00:00
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.
This commit is contained in:
parent
2575768d0b
commit
a991de3267
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user