Commit 0b6b2900 by Richard Kenner

(standard_80387_constant_p): When testing for floating-point equality,

make sure we do so inside a region protected from traps.

From-SVN: r3962
parent 978e8952
...@@ -18,6 +18,7 @@ along with GNU CC; see the file COPYING. If not, write to ...@@ -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. */ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h> #include <stdio.h>
#include <setjmp.h>
#include "config.h" #include "config.h"
#include "rtl.h" #include "rtl.h"
#include "regs.h" #include "regs.h"
...@@ -437,21 +438,30 @@ int ...@@ -437,21 +438,30 @@ int
standard_80387_constant_p (x) standard_80387_constant_p (x)
rtx x; rtx x;
{ {
union real_extract u; #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
register double d; REAL_VALUE_TYPE d;
jmp_buf handler;
int is0, is1;
bcopy (&CONST_DOUBLE_LOW (x), &u, sizeof u); if (setjmp (handler))
d = u.d; 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; return 1;
if (d == 1) if (is1)
return 2; return 2;
/* Note that on the 80387, other constants, such as pi, /* Note that on the 80387, other constants, such as pi,
are much slower to load as standard constants are much slower to load as standard constants
than to load from doubles in memory! */ than to load from doubles in memory! */
#endif
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment