aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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,