aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md7
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b8876af..8e3f21c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-20 Richard Henderson <rth@redhat.com>
+
+ * config/i386/i386.md (sse2_movsd): Remove ix86_binary_operator_ok
+ check.
+
2004-12-20 Steven Bosscher <stevenb@suse.de>
Andrew Pinski <pinskia@physics.uc.edu>
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index b575d42..37fe29b 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -23873,13 +23873,18 @@
[(set_attr "type" "ssecvt")
(set_attr "mode" "DF")])
+;; ??? We ought to be using ix86_binary_operator_ok on this pattern, so
+;; that we enforce the whole matching memory thing through combine et al.
+;; But that requires that things be set up properly when invoked via an
+;; intrinsic, which we don't do. Which leads to instantiate virtual regs
+;; lossage, as seen compiling gcc.dg/i386-sse-2.c for x86_64 at -O0.
(define_insn "sse2_movsd"
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,m")
(vec_merge:V2DF
(match_operand:V2DF 1 "nonimmediate_operand" "0,0,0")
(match_operand:V2DF 2 "nonimmediate_operand" "x,m,x")
(const_int 2)))]
- "TARGET_SSE2 && ix86_binary_operator_ok (UNKNOWN, V2DFmode, operands)"
+ "TARGET_SSE2"
"@movsd\t{%2, %0|%0, %2}
movlpd\t{%2, %0|%0, %2}
movlpd\t{%2, %0|%0, %2}"