From 734dba19cd3a968ac15d17388665277bbd7746a1 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 8 Jan 2001 13:47:15 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/i386/i386.c | 32 ++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 362a7679fa1..52bb93d1bfa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Jan 8 13:46:02 MET 2001 Jan Hubicka + + * i386.c (ix86_expand_int_movcc): Take care to reverse fp conditions + properly. + Sun Jan 7 18:37:43 2001 Mark P Mitchell * ggc-page.c (max_alignment): New structure. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3afc75cd29f..53e33d4cbd6 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, -- 2.30.2