aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-01-08 13:47:15 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2001-01-08 12:47:15 +0000
commit734dba19cd3a968ac15d17388665277bbd7746a1 (patch)
treef71a6cb10e508a17faf565cb1876f5247ef6cbb3
parent1f0d71c5bb8b6db96c0b99ccfad95d157f4f2064 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c32
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,