aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2012-12-06 11:43:15 +0800
committerAndrew Hsieh <andrewhsieh@google.com>2012-12-06 11:43:15 +0800
commit081453273c622c16a2d87b61f87a861261a08f07 (patch)
tree2967f119b0d86a7045cafcb3b64a11299a96ef84
parentcc078a51b7945149f03938590ea26fbb7264c950 (diff)
downloadtoolchain_gcc-081453273c622c16a2d87b61f87a861261a08f07.tar.gz
toolchain_gcc-081453273c622c16a2d87b61f87a861261a08f07.tar.bz2
toolchain_gcc-081453273c622c16a2d87b61f87a861261a08f07.zip
Backport r193554 to GCC4.7/x86 resotre earlier cmov behavior
See http://gcc.gnu.org/viewcvs?view=revision&revision=193554 Change-Id: I069da55efd2d75fc8b5ad518090660131d6fec05
-rw-r--r--gcc-4.7/ChangeLog.backported9
-rw-r--r--gcc-4.7/gcc/config/i386/i386.c5
-rw-r--r--gcc-4.7/gcc/config/i386/i386.md4
3 files changed, 16 insertions, 2 deletions
diff --git a/gcc-4.7/ChangeLog.backported b/gcc-4.7/ChangeLog.backported
index b9fd26272..3adc01420 100644
--- a/gcc-4.7/ChangeLog.backported
+++ b/gcc-4.7/ChangeLog.backported
@@ -1,3 +1,12 @@
+http://gcc.gnu.org/viewcvs?view=revision&revision=193554
+2012-11-16 Jakub Jelinek <jakub@redhat.com>
+ PR target/54073
+ * config/i386/i386.md (mov<mode>cc): Use comparison_operator
+ instead of ordered_comparison_operator resp.
+ ix86_fp_comparison_operator predicates.
+ * config/i386/i386.c (ix86_expand_fp_movcc): Reject TImode
+ or for -m32 DImode comparisons.
+
http://gcc.gnu.org/viewcvs?view=revision&revision=193825
2012-11-26 Diego Novillo <dnovillo@google.com>
diff --git a/gcc-4.7/gcc/config/i386/i386.c b/gcc-4.7/gcc/config/i386/i386.c
index c21cb81c1..34e6f1f14 100644
--- a/gcc-4.7/gcc/config/i386/i386.c
+++ b/gcc-4.7/gcc/config/i386/i386.c
@@ -19578,6 +19578,11 @@ ix86_expand_fp_movcc (rtx operands[])
return true;
}
+ if (GET_MODE (op0) == TImode
+ || (GET_MODE (op0) == DImode
+ && !TARGET_64BIT))
+ return false;
+
/* The floating point conditional move instructions don't directly
support conditions resulting from a signed integer comparison. */
diff --git a/gcc-4.7/gcc/config/i386/i386.md b/gcc-4.7/gcc/config/i386/i386.md
index e006cc8fb..c0cc8ea8c 100644
--- a/gcc-4.7/gcc/config/i386/i386.md
+++ b/gcc-4.7/gcc/config/i386/i386.md
@@ -16318,7 +16318,7 @@
(define_expand "mov<mode>cc"
[(set (match_operand:SWIM 0 "register_operand" "")
- (if_then_else:SWIM (match_operand 1 "ordered_comparison_operator" "")
+ (if_then_else:SWIM (match_operand 1 "comparison_operator" "")
(match_operand:SWIM 2 "<general_operand>" "")
(match_operand:SWIM 3 "<general_operand>" "")))]
""
@@ -16435,7 +16435,7 @@
(define_expand "mov<mode>cc"
[(set (match_operand:X87MODEF 0 "register_operand" "")
(if_then_else:X87MODEF
- (match_operand 1 "ix86_fp_comparison_operator" "")
+ (match_operand 1 "comparison_operator" "")
(match_operand:X87MODEF 2 "register_operand" "")
(match_operand:X87MODEF 3 "register_operand" "")))]
"(TARGET_80387 && TARGET_CMOVE)