diff options
author | Jan Hubicka <jh@suse.cz> | 2001-01-08 13:47:15 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-01-08 12:47:15 +0000 |
commit | 734dba19cd3a968ac15d17388665277bbd7746a1 (patch) | |
tree | f71a6cb10e508a17faf565cb1876f5247ef6cbb3 | |
parent | 1f0d71c5bb8b6db96c0b99ccfad95d157f4f2064 (diff) | |
download | gcc-734dba19cd3a968ac15d17388665277bbd7746a1.zip gcc-734dba19cd3a968ac15d17388665277bbd7746a1.tar.gz gcc-734dba19cd3a968ac15d17388665277bbd7746a1.tar.bz2 |
i386.c (ix86_expand_int_movcc): Take care to reverse fp conditions properly.
* i386.c (ix86_expand_int_movcc): Take care to reverse fp conditions
properly.
From-SVN: r38799
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 32 |
2 files changed, 33 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 362a767..52bb93d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Jan 8 13:46:02 MET 2001 Jan Hubicka <jh@suse.cz> + + * i386.c (ix86_expand_int_movcc): Take care to reverse fp conditions + properly. + Sun Jan 7 18:37:43 2001 Mark P Mitchell <mark@codesourcery.com> * ggc-page.c (max_alignment): New structure. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3afc75c..53e33d4 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5399,8 +5399,20 @@ ix86_expand_int_movcc (operands) HOST_WIDE_INT tmp; tmp = ct, ct = cf, cf = tmp; diff = -diff; - compare_code = reverse_condition (compare_code); - code = reverse_condition (code); + if (FLOAT_MODE_P (GET_MODE (ix86_compare_op0))) + { + /* We may be reversing unordered compare to normal compare, that + is not valid in general (we may convert non-trapping condition + to trapping one), however on i386 we currently emit all + comparisons unordered. */ + compare_code = reverse_condition_maybe_unordered (compare_code); + code = reverse_condition_maybe_unordered (code); + } + else + { + compare_code = reverse_condition (compare_code); + code = reverse_condition (code); + } } if (diff == 1 || diff == 2 || diff == 4 || diff == 8 || diff == 3 || diff == 5 || diff == 9) @@ -5489,8 +5501,20 @@ ix86_expand_int_movcc (operands) { ct = cf; cf = 0; - compare_code = reverse_condition (compare_code); - code = reverse_condition (code); + if (FLOAT_MODE_P (GET_MODE (ix86_compare_op0))) + { + /* We may be reversing unordered compare to normal compare, + that is not valid in general (we may convert non-trapping + condition to trapping one), however on i386 we currently + emit all comparisons unordered. */ + compare_code = reverse_condition_maybe_unordered (compare_code); + code = reverse_condition_maybe_unordered (code); + } + else + { + compare_code = reverse_condition (compare_code); + code = reverse_condition (code); + } } out = emit_store_flag (out, code, ix86_compare_op0, |