diff options
author | Uros Bizjak <uros@kss-loka.si> | 2005-09-21 20:39:07 +0200 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2005-09-21 18:39:07 +0000 |
commit | d06e6434d49d3087bbe3ea11824853b1235ccda7 (patch) | |
tree | 5ea2ac7fb062501f7dcec0b888928ff15b41f4fe /gcc | |
parent | 604a493708c0373b3dc44aecf83a5bbe62013df2 (diff) | |
download | gcc-d06e6434d49d3087bbe3ea11824853b1235ccda7.zip gcc-d06e6434d49d3087bbe3ea11824853b1235ccda7.tar.gz gcc-d06e6434d49d3087bbe3ea11824853b1235ccda7.tar.bz2 |
re PR target/22585 (ICE with long doubles in expand_simple_unop)
PR target/22585
* config/i386/i386.c (ix86_prepare_fp_compare_args): Do not
force integer op1 into register for XFmode compares.
From-SVN: r104498
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 10 |
2 files changed, 12 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 415fd5c..58b8a36 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-09-21 Uros Bizjak <uros@kss-loka.si> + + PR target/22585 + * config/i386/i386.c (ix86_prepare_fp_compare_args): Do not + force integer op1 into register for XFmode compares. + 2005-09-21 Kazu Hirata <kazu@codesourcery.com> PR middle-end/23971 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index a53df0b..914e66e 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -9065,15 +9065,17 @@ ix86_prepare_fp_compare_args (enum rtx_code code, rtx *pop0, rtx *pop1) int is_sse = TARGET_SSE_MATH && SSE_FLOAT_MODE_P (op_mode); /* All of the unordered compare instructions only work on registers. - The same is true of the fcomi compare instructions. The same is - true of the XFmode compare instructions if not comparing with - zero (ftst insn is used in this case). */ + The same is true of the fcomi compare instructions. The XFmode + compare instructions require registers except when comparing + against zero or when converting operand 1 from fixed point to + floating point. */ if (!is_sse && (fpcmp_mode == CCFPUmode || (op_mode == XFmode && ! (standard_80387_constant_p (op0) == 1 - || standard_80387_constant_p (op1) == 1)) + || standard_80387_constant_p (op1) == 1) + && GET_CODE (op1) != FLOAT) || ix86_use_fcomi_compare (code))) { op0 = force_reg (op_mode, op0); |