From: jsm28 Date: Mon, 15 Jan 2007 23:56:32 +0000 (+0000) Subject: * config/soft-fp/op-common.h, config/soft-fp/op-4.h: Update from X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a2a54432470a3303ac9cda8341a9fcc132220dec;p=thirdparty%2Fgcc.git * config/soft-fp/op-common.h, config/soft-fp/op-4.h: Update from glibc CVS. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120806 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30bc446b07c4..74b2285e37d3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-01-15 Joseph S. Myers + + * config/soft-fp/op-common.h, config/soft-fp/op-4.h: Update from + glibc CVS. + 2007-01-15 Tom Tromey * doc/sourcebuild.texi (libgcj Tests): Don't mention jacks. diff --git a/gcc/config/soft-fp/op-4.h b/gcc/config/soft-fp/op-4.h index 34f5098e8c21..1b90535c56e5 100644 --- a/gcc/config/soft-fp/op-4.h +++ b/gcc/config/soft-fp/op-4.h @@ -564,7 +564,7 @@ r1 = x1 - y1; \ _c2 = r1 > x1; \ r1 -= _c1; \ - _c2 |= r1 > _c1; \ + _c2 |= _c1 && (y1 == x1); \ r2 = x2 - y2 - _c2; \ } while (0) #endif @@ -578,11 +578,11 @@ r1 = x1 - y1; \ _c2 = r1 > x1; \ r1 -= _c1; \ - _c2 |= r1 > _c1; \ + _c2 |= _c1 && (y1 == x1); \ r2 = x2 - y2; \ _c3 = r2 > x2; \ r2 -= _c2; \ - _c3 |= r2 > _c2; \ + _c3 |= _c2 && (y2 == x2); \ r3 = x3 - y3 - _c3; \ } while (0) #endif diff --git a/gcc/config/soft-fp/op-common.h b/gcc/config/soft-fp/op-common.h index 4ec7fade485e..0aa6e3e05d84 100644 --- a/gcc/config/soft-fp/op-common.h +++ b/gcc/config/soft-fp/op-common.h @@ -1,5 +1,5 @@ /* Software floating-point emulation. Common operations. - Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2006,2007 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), @@ -99,10 +99,10 @@ do { \ 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); \ } \ + FP_SET_EXCEPTION(FP_EX_INEXACT); \ + FP_SET_EXCEPTION(FP_EX_OVERFLOW); \ } while (0) /* Check for a semi-raw value being a signaling NaN and raise the @@ -1252,6 +1252,9 @@ do { \ _FP_FRAC_SRL_##swc(S, (_FP_WFRACBITS_##sfs \ - _FP_WFRACBITS_##dfs)); \ _FP_FRAC_COPY_##dwc##_##swc(D, S); \ + /* Semi-raw NaN must have all workbits cleared. */ \ + _FP_FRAC_LOW_##dwc(D) \ + &= ~(_FP_W_TYPE) ((1 << _FP_WORKBITS) - 1); \ _FP_FRAC_HIGH_##dfs(D) |= _FP_QNANBIT_SH_##dfs; \ } \ } \