From: Richard Kenner Date: Wed, 31 Mar 1993 20:56:14 +0000 (-0500) Subject: (standard_80387_constant_p): When testing for floating-point equality, X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0b6b29004875046757143caa8a0552d236d137f0;p=gcc.git (standard_80387_constant_p): When testing for floating-point equality, make sure we do so inside a region protected from traps. From-SVN: r3962 --- diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 960bfd4090f..fe85584444f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -18,6 +18,7 @@ along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include +#include #include "config.h" #include "rtl.h" #include "regs.h" @@ -437,21 +438,30 @@ int standard_80387_constant_p (x) rtx x; { - union real_extract u; - register double d; +#if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) + REAL_VALUE_TYPE d; + jmp_buf handler; + int is0, is1; - bcopy (&CONST_DOUBLE_LOW (x), &u, sizeof u); - d = u.d; + if (setjmp (handler)) + return 0; + + set_float_handler (handler); + REAL_VALUE_FROM_CONST_DOUBLE (d, x); + is0 = REAL_VALUES_EQUAL (d, dconst0); + is1 = REAL_VALUES_EQUAL (d, dconst1); + set_float_handler (NULL_PTR); - if (d == 0) + if (is0) return 1; - if (d == 1) + if (is1) return 2; /* Note that on the 80387, other constants, such as pi, are much slower to load as standard constants than to load from doubles in memory! */ +#endif return 0; }